pax_global_header00006660000000000000000000000064133276205260014520gustar00rootroot0000000000000052 comment=7f533995270bb9e00d4c70664929832612eca35b qterm-0.7.3/000077500000000000000000000000001332762052600126575ustar00rootroot00000000000000qterm-0.7.3/.appveyor.yml000066400000000000000000000057331332762052600153350ustar00rootroot00000000000000version: '{branch}-{build}' image: Visual Studio 2015 environment: matrix: - QTDIR: C:\Qt\5.6\mingw49_32 MINGWDIR: C:\Qt\Tools\mingw492_32 CMAKE_GENERATOR: "MinGW Makefiles" - QTDIR: C:\Qt\5.6\msvc2013 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.6\msvc2013_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.6\msvc2015 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.6\msvc2015_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.7\msvc2015 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.9\mingw53_32 MINGWDIR: C:\Qt\Tools\mingw530_32 CMAKE_GENERATOR: "MinGW Makefiles" - QTDIR: C:\Qt\5.9\msvc2015 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.9\msvc2013_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.9\msvc2015_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.10\mingw53_32 MINGWDIR: C:\Qt\Tools\mingw530_32 CMAKE_GENERATOR: "MinGW Makefiles" - QTDIR: C:\Qt\5.10\msvc2015 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.10\msvc2013_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.10\msvc2015_64 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.11\mingw53_32 MINGWDIR: C:\Qt\Tools\mingw530_32 CMAKE_GENERATOR: "MinGW Makefiles" - QTDIR: C:\Qt\5.11\msvc2015 CMAKE_GENERATOR: "NMake Makefiles" - QTDIR: C:\Qt\5.11\msvc2015_64 CMAKE_GENERATOR: "NMake Makefiles" install: - set PATH=%QTDIR%\bin;%MINGWDIR%\bin;%PATH% - qmake -v - if %QTDIR:_64=%==%QTDIR% ( set ARCH=x86 ) else set ARCH=x64 - if %QTDIR:_64=%==%QTDIR% ( set OPENSSL_ROOT_DIR=C:\OpenSSL-Win32 ) else set OPENSSL_ROOT_DIR=C:\OpenSSL-Win64 - if %QTDIR:msvc=%==%QTDIR% g++ --version - if %QTDIR:msvc=%==%QTDIR% set make=mingw32-make.exe - if %QTDIR:msvc=%==%QTDIR% set PATH=%QTDIR%\bin;%MINGWDIR%\bin;C:\Program Files (x86)\CMake\bin - if %QTDIR:msvc=%==%QTDIR% %make% --version - if not %QTDIR:msvc2013=%==%QTDIR% call "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" %ARCH% - if not %QTDIR:msvc2015=%==%QTDIR% call "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %ARCH% - if not %QTDIR:msvc=%==%QTDIR% set make=nmake.exe - if not %QTDIR:msvc=%==%QTDIR% %make% /? > nul build_script: - cd %APPVEYOR_BUILD_FOLDER% - cmake . -G "%CMAKE_GENERATOR%" -DQTERM_ENABLE_SCRIPT_DEBUGGER=On -DCMAKE_BUILD_TYPE=Release -DQT5=Yes - '%make% VERBOSE=1' - if not %QTDIR:msvc=%==%QTDIR% %make% package artifacts: - path: QTerm*-win64.exe name: Win64Installer - path: QTerm*-win32.exe name: Win32Installer deploy: - provider: GitHub artifact: Win64Installer auth_token: secure: wc0cFfZSLHWbW3W8FKqgVPHQfF0bV1l54wkpLcpsq4EuBliQdwfV+4JLnWuHBdr4 on: appveyor_repo_tag: true QTDIR: C:\Qt\5.11\msvc2015_64 - provider: GitHub artifact: Win32Installer auth_token: secure: wc0cFfZSLHWbW3W8FKqgVPHQfF0bV1l54wkpLcpsq4EuBliQdwfV+4JLnWuHBdr4 on: appveyor_repo_tag: true QTDIR: C:\Qt\5.11\msvc2015 qterm-0.7.3/.travis.yml000066400000000000000000000063121332762052600147720ustar00rootroot00000000000000language: cpp os: - linux - osx compiler: - gcc - clang dist: trusty env: - QT=5 BREW=5 - QT=56 BREW=5 PPA=beineri/opt-qt562-trusty - QT=57 BREW=ex PPA=beineri/opt-qt571-trusty - QT=58 BREW=ex PPA=beineri/opt-qt58-trusty - QT=59 BREW=ex PPA=beineri/opt-qt593-trusty - QT=510 BREW=@ex PPA=beineri/opt-qt-5.10.1-trusty matrix: exclude: - { os: linux, env: QT=5 BREW=5 } - { os: osx, env: QT=57 BREW=ex PPA=beineri/opt-qt571-trusty } - { os: osx, compiler: gcc, env: QT=5 BREW=5 } # Qt 5.6 no longer supports gcc on OS X. - { os: osx, compiler: gcc, env: QT=56 BREW=5 PPA=beineri/opt-qt561-trusty } # Qt 5.6 no longer supports gcc on OS X. - { os: osx, env: QT=57 BREW=ex PPA=beineri/opt-qt571-trusty } - { os: osx, env: QT=58 BREW=ex PPA=beineri/opt-qt58-trusty } - { os: osx, env: QT=59 BREW=ex PPA=beineri/opt-qt593-trusty } - { os: osx, env: QT=510 BREW=@ex PPA=beineri/opt-qt-5.10.1-trusty } before_install: - '[[ "$TRAVIS_OS_NAME" != linux || -z "$PPA" ]] || sudo add-apt-repository -y ppa:$PPA' - '[ "$TRAVIS_OS_NAME" != linux ] || sudo apt-get -qy update' - '[ "$TRAVIS_OS_NAME" != osx ] || brew update' install: - '[[ "$TRAVIS_OS_NAME" != linux || "$PPA" != */opt-* ]] || travis_wait sudo apt-get -qy install qt$QT-meta-full' - '[[ "$TRAVIS_OS_NAME" != linux || "$PPA" == */opt-* ]] || travis_wait sudo apt-get -qy install qt5-qmake qtbase5-dev qttools5-dev qttools5-dev-tools qtscript5-dev qtmultimedia5-dev' - '[ "$TRAVIS_OS_NAME" != osx ] || travis_wait brew install qt$BREW' - '[ "$TRAVIS_OS_NAME" != osx ] || travis_wait brew link --force qt$BREW' - '[ "$TRAVIS_OS_NAME" != osx ] || travis_wait brew info openssl' script: - '[[ "$TRAVIS_OS_NAME" != linux || "$PPA" != */opt-* ]] || . /opt/qt$QT/bin/qt$QT-env.sh' - '[[ "$TRAVIS_OS_NAME" != linux || "$PPA" == */opt-* ]] || export QT_SELECT=qt5' - mkdir -p "$TRAVIS_BUILD_DIR-build" - pushd "$TRAVIS_BUILD_DIR-build" - '[ "$TRAVIS_OS_NAME" != osx ] || cmake $TRAVIS_BUILD_DIR -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=`brew --prefix qt$BREW` -DQTERM_ENABLE_SCRIPT_DEBUGGER=On -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DQT5=Yes' - '[ "$TRAVIS_OS_NAME" != linux ] || cmake $TRAVIS_BUILD_DIR -DCMAKE_BUILD_TYPE=Release -DQTERM_ENABLE_SCRIPT_DEBUGGER=On -DQT5=Yes' - make VERBOSE=1 - '[ "$TRAVIS_OS_NAME" != osx ] || make package' - popd deploy: provider: releases api_key: secure: QUO3Xl2AsNDQKm9s+vI68/pfdjtMVU/Y5ugcC7RNtxueL8dLzF5nCX1zEEDyIggBFYi0oHeLf2sdaHji9A9BqJxdu1y6Uay+TkCPnyIIkgOfn4W+xPkVBz9v8kAvMx6VaZ8kE6G3k79k+/r77QuSiicDoRXLJY4BshvBJIXdzzfwRicBvEe6sMPR06hXBFQktmnn+u+yUKaqXO9qKyqJhQr5mn4+dGFAkLyZg5XmnYqfjPSCR+N1Aci0Viyoidfqb7plEBrgLnDSeXaqmAl6FnMb0huFXRF/yBH6GM5RfN6KMY5J6SOZKAcOS3IlpBtmawPXpjnyYN8Jhev9wy7FbxaTmSQjj5oB7HmEj9noUPx6AlhbuYp9O0vYmZ6ZD5S5hoELQYcZwY19bbtWuM3Jl3i9TaeD+D1kmaTVEg7/hwqJP6BseE9lKY8Yw+1+Mnp4mfDRCq5lhUIEUk9lDrf8fT9oaQfzZgVnujYu8Guldbd+PlUfjJTEaRIIa8MjIgoUmqzEzLk4kBK/8ENzFTxWqGS+bM4L69VyvTGf4fCZpu2TEfk54rlDq1oZ1tNACjXAet6zSLV4dJqLJMz1MRPMpu9sx278lT3eyT29BnwyhyRZMd4renv8vIFEeczTEAOal0HtMH9Fkz7Pda2tKGw4x55MdbnSG459nl78acZ/Pio= file_glob: true file: $TRAVIS_BUILD_DIR-build/QTerm-*-Darwin.dmg on: condition: '"$TRAVIS_OS_NAME" == osx && "$CXX" == clang++ && "$QT" == 56' tags: true qterm-0.7.3/CMakeLists.txt000066400000000000000000000034671332762052600154310ustar00rootroot00000000000000project(qterm) include(CTest) include(FeatureSummary) cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR) set(QTERM_VERSION_MAJOR 0) set(QTERM_VERSION_MINOR 7) set(QTERM_VERSION_RELEASE 3) set(QTERM_VERSION "${QTERM_VERSION_MAJOR}.${QTERM_VERSION_MINOR}.${QTERM_VERSION_RELEASE}" ) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_AUTOMOC ON) IF(QT5) find_package(Qt5Core 5.3.0 REQUIRED) find_package(Qt5Gui 5.3.0 REQUIRED) find_package(Qt5Widgets 5.3.0 REQUIRED) find_package(Qt5Xml 5.3.0 REQUIRED) find_package(Qt5Network 5.3.0 REQUIRED) find_package(Qt5PrintSupport 5.3.0 REQUIRED) find_package(Qt5LinguistTools 5.3.0 REQUIRED) find_package(Qt5Help 5.3.0 REQUIRED) find_package(Qt5Script 5.3.0) find_package(Qt5ScriptTools 5.3.0) find_package(Qt5Multimedia 5.3.0) IF(NOT QT_BINARY_DIR) exec_program(${_qt5Core_install_prefix}/bin/qmake ARGS "-query QT_INSTALL_BINS" OUTPUT_VARIABLE QT_BINARY_DIR) ENDIF() ELSE(QT5) find_package(Qt4 4.5.0 REQUIRED) find_package(KDE4) ENDIF(QT5) IF(WIN32 AND MSVC) ADD_DEFINITIONS (/D _CRT_SECURE_NO_WARNINGS) ENDIF(WIN32 AND MSVC) IF(APPLE) SET (PROGRAME QTerm) SET (MACOSX_BUNDLE_VERSION $QTERM_VERSION) SET (MACOSX_BUNDLE_ICON_FILE QTerm.icns) ELSE(APPLE) SET (PROGRAME qterm) ENDIF(APPLE) include("package.cmake") add_subdirectory(src) add_subdirectory(icons) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) if (NOT TARGET uninstall) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") endif(NOT TARGET uninstall) feature_summary(WHAT ALL) qterm-0.7.3/COPYRIGHT000066400000000000000000001060051332762052600141540ustar00rootroot00000000000000QTerm is licensed under the GNU General Public License version 3 with the addition of the following special exception: In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL. If you modify file(s) with this exception, you may extend this exception to your version of the file(s), but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you delete this exception statement from all source files in the program, then also delete it here. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . qterm-0.7.3/CTestConfig.cmake000066400000000000000000000010221332762052600160240ustar00rootroot00000000000000## This file should be placed in the root directory of your project. ## Then modify the CMakeLists.txt file in the root directory of your ## project to incorporate the testing dashboard. ## # The following are required to uses Dart and the Cdash dashboard ## ENABLE_TESTING() ## INCLUDE(CTest) set(CTEST_PROJECT_NAME "QTerm") set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") set(CTEST_DROP_METHOD "http") set(CTEST_DROP_SITE "www.qterm.org") set(CTEST_DROP_LOCATION "/cdash/submit.php?project=QTerm") set(CTEST_DROP_SITE_CDASH TRUE) qterm-0.7.3/README.rst000066400000000000000000000054761332762052600143620ustar00rootroot00000000000000QTerm --- BBS client based on Qt ================================ QTerm is a BBS (Bulletin Board System) client program. It runs on GNU/Linux, OS X and Windows thanks to the cross-platform framework Qt. History ------- Back in year 2000, as a desktop alternative, Linux started to get popular among enthusiasts. People need the software they used to have on Windows. A BBS client was one of those that university students wanted most. In Nov.2 2000, kafa and smartfish released miniTerm at smth (now newsmth) BBS. It was an absolutly exciting experience to view BBS from its mini window. In 2001, having different vision from being "mini", QTerm forked the code to become a fully functional BBS client such as S-Term and CTerm. Build ----- The following dependencies must be met, - A basic development environment - On Debian, the package is :: sudo aptitude install build-essentials - On Fedora, the package is :: sudo dnf install @"C Development Tools and Libraries" - Qt 4.6+ or Qt 5.3+ - On Debian, the packages are :: sudo aptitude install qt5-defaults qttools5-dev qttools5-dev-tools qtscript5-dev qtmultimedia5-dev - On Fedora, the packages are :: sudo dnf install qt5-devel - The installer from Qt is simple for macOS and Windows. - CMake 2.8.11+ - On Linux and macOS, the package is most probably *cmake*. - OpenSSL 1.0+ (Optional) - On Debian, the package is *libssl-dev*. - On Fedora, the package is *openssl-devel*. - On macOS, install *openssl* via MacPorts or HomeBrew - On Windows, get the installer from https://slproweb.com/products/Win32OpenSSL.html - DBus (Optional) - Phonon (Optional) - KWallet (Optional) To build on Linux or macOS, :: # Create the build directory side by side to qterm source directory mkdir -p qterm-build && cd qterm-build # Using Qt4 cmake ../qterm # Using Qt5 cmake ../qterm -DQT5=YES # If your Qt is under non-standard location, specify the qmake program cmake ../qterm -DQT_QMAKE_EXECUTABLE= # Build make # Optionally create a binary package make package To build on Windows, open the Visual Studio Developer Command Prompt, :: # Set PATH to include Qt binary directory set PATH=C:\Qt\5.7\msvc2015\bin;%PATH% # Create the build directory side by side to qterm source directory mdkir qterm-build # Using Qt4 cmake ..\qterm -G "NMake Makefiles" # Using Qt5 cmake ..\qterm -DQT5=YES -G "NMake Makefiles" # Build nmake # Optionally create an installer if NSIS is installed nmake package Development ----------- Repository is at https://github.com/qterm/qterm License ------- QTerm is released under GNU General Public License (refer to COPYRIGHT). Credits ------- Kudos to our users for their bug reports and suggestions. qterm-0.7.3/RELEASE_NOTES000066400000000000000000000036051332762052600146360ustar00rootroot000000000000000.7.3 ===== 1. 修正在 Qt5.11 下的编译错误 0.7.2 ===== 1. 修正快速连接对话框里端口号限制 0.7.1 ====== 1. 支持 OpenSSL 1.1 2. 支持 SSH 下窗口行列改变 3. 支持在文章编辑状态下用鼠标移动输入光标 4. 修正 macOS 下默认的键盘方案 5. 修正多列菜单的支持 0.7.0 ====== 1. 支持 Qt5 2. 支持更多 ssh 加密方案 3. 增强对 HiDPI 显示器的支持 4. 各种 Bug fixes 0.5.12 ====== 1. 初步的 ASCII 辅助编辑功能 2. 支持半透明背景以及 KDE 下的 blur 效果 3. 各种 Bug fixes 0.5.11 ====== 1. 支持 Unicode 补完计划 (UAO) 2. 重写了图片浏览器 3. 增强脚本支持 4. 各种 Bug fixes 0.5.10 ====== 1. 增强脚本支持 2. 各种 Bug fixes 0.5.9 ===== 1. 新的关闭对话框 2. 优先使用当前目录下的资源文件 3. 各种 Bug fixes 0.5.8 ===== 1. 设置键盘方案 2. Qt 4.6 下的脚本支持 3. Bug fixes 0.5.6 ===== 1. QtScript 脚本支持 2. Bug fixes 0.5.5 ===== 1. 在 KWallet 可用时用 KWallet 保存密码 2. PTT 的一字双色支持 3. 打印当前内容 4. 跨行 url 识别 5. MinGW 和 MSVC 的编译支持 6. Bug fixes 0.5.4 ===== 1. 配置文件的格式改变 2. 支持 UTF-8 等编码格式 3. 打印当前内容 4. KDE 的 Phonon 的支持 (Qt 的 Phonon 未测试) 5. 内容居中显示 6. 显示程序图标 7. Bug fixes 0.5.3 ===== 0. 新的域名 1. 配置文件的格式改变 2. 快捷键和工具栏的配置对话框 3. 可能的情况下优先使用 KDE 4 的 Notification 功能 4. Bug fixes 0.5.2 ===== 1. 配置文件的格式改变 2. 新的配置对话框 3. 初步的 windows 支持 4. Bug fixes 0.5.1 ===== 1. 新的 SSH 代码,支持 SSH1 和 SSH2 0.5.0 ===== 1. 开发版本 0.4.1 ===== 1. 替换了会导致 qterm 失去相应的 qm 文件. 2. 替换了有 license 问题的代码. 3. 减少重绘时候的闪烁. 4. merge 了各种针对 0.4.0 的 patch. qterm-0.7.3/TODO000066400000000000000000000005071332762052600133510ustar00rootroot00000000000000--Next release: Complete Vt102 support? --Should be easy (but I probably will not do it in the next release): Fix the warnings, compile time and runtime, also FIXMEs Fix tab and status bar Fix image viewer Anonying bugs Proxy support using Qt --In the future: Ascii editor?(Kingson, where are you?) qterm-0.7.3/cmake/000077500000000000000000000000001332762052600137375ustar00rootroot00000000000000qterm-0.7.3/cmake/FindOpenSSLCrypto.cmake000066400000000000000000000136241332762052600202340ustar00rootroot00000000000000# A Modified Version of FindOpenSSL.cmake from CMake 2.6.2 # Because we only need the crypto library for QTerm # - Try to find the OpenSSL encryption library # Once done this will define # # OPENSSL_FOUND - system has the OpenSSL library # OPENSSL_INCLUDE_DIR - the OpenSSL include directory # OPENSSL_LIBRARIES - The libraries needed to use OpenSSL # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. IF(OPENSSLCRYPTO_LIBRARIES) SET(OpenSSLCRYPTO_FIND_QUIETLY TRUE) ENDIF(OPENSSLCRYPTO_LIBRARIES) IF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) SET(LIB_FOUND 1) ENDIF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES if(OPENSSL_USE_STATIC_LIBS) set(_openssl_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) if(WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) else() set(CMAKE_FIND_LIBRARY_SUFFIXES .a ) endif() endif() if (WIN32) # http://www.slproweb.com/products/Win32OpenSSL.html set(_OPENSSL_ROOT_HINTS ${OPENSSL_ROOT_DIR} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]" ENV OPENSSL_ROOT_DIR ) file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles) set(_OPENSSL_ROOT_PATHS "${_programfiles}/OpenSSL" "${_programfiles}/OpenSSL-Win32" "${_programfiles}/OpenSSL-Win64" "C:/OpenSSL/" "C:/OpenSSL-Win32/" "C:/OpenSSL-Win64/" ) unset(_programfiles) else () set(_OPENSSL_ROOT_HINTS /opt/local/ # MacPorts /usr/local/opt/openssl # HomeBrew ${OPENSSL_ROOT_DIR} ENV OPENSSL_ROOT_DIR ) endif () set(_OPENSSL_ROOT_HINTS_AND_PATHS HINTS ${_OPENSSL_ROOT_HINTS} PATHS ${_OPENSSL_ROOT_PATHS} ) find_path(OPENSSLCRYPTO_INCLUDE_DIR NAMES openssl/ssl.h ${_OPENSSL_ROOT_HINTS_AND_PATHS} HINTS ${_OPENSSL_INCLUDEDIR} PATH_SUFFIXES include ) #FIND_PATH(OPENSSLCRYPTO_INCLUDE_DIR openssl/ssl.h ) IF(WIN32 AND MSVC) # /MD and /MDd are the standard values - if someone wants to use # others, the libnames have to change here too # use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b # enable OPENSSL_MSVC_STATIC_RT to get the libs build /MT (Multithreaded no-DLL) # In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix: # * MD for dynamic-release # * MDd for dynamic-debug # * MT for static-release # * MTd for static-debug # Implementation details: # We are using the libraries located in the VC subdir instead of the parent directory eventhough : # libeay32MD.lib is identical to ../libeay32.lib, and # ssleay32MD.lib is identical to ../ssleay32.lib # enable OPENSSL_USE_STATIC_LIBS to use the static libs located in lib/VC/static if (OPENSSL_MSVC_STATIC_RT) set(_OPENSSL_MSVC_RT_MODE "MT") else () set(_OPENSSL_MSVC_RT_MODE "MD") endif () # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" ) set(_OPENSSL_MSVC_ARCH_SUFFIX "64") else() set(_OPENSSL_MSVC_ARCH_SUFFIX "32") endif() if(OPENSSL_USE_STATIC_LIBS) set(_OPENSSL_PATH_SUFFIXES "lib/VC/static" "VC/static" "lib" ) else() set(_OPENSSL_PATH_SUFFIXES "lib/VC" "VC" "lib" ) endif () find_library(LIB_EAY_DEBUG NAMES libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE}d libcryptod libeay32${_OPENSSL_MSVC_RT_MODE}d libeay32d NAMES_PER_DIR ${_OPENSSL_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES ${_OPENSSL_PATH_SUFFIXES} ) find_library(LIB_EAY_RELEASE NAMES libcrypto${_OPENSSL_MSVC_ARCH_SUFFIX}${_OPENSSL_MSVC_RT_MODE} libcrypto libeay32${_OPENSSL_MSVC_RT_MODE} libeay32 NAMES_PER_DIR ${_OPENSSL_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES ${_OPENSSL_PATH_SUFFIXES} ) IF(MSVC_IDE) IF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) SET(OPENSSLCRYPTO_LIBRARIES optimized ${LIB_EAY_RELEASE} debug ${LIB_EAY_DEBUG}) ELSE(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) SET(OPENSSLCRYPTO_LIBRARIES NOTFOUND) MESSAGE(STATUS "Could not find the debug and release version of openssl") ENDIF(LIB_EAY_DEBUG AND LIB_EAY_RELEASE) ELSE(MSVC_IDE) STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER) IF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) SET(OPENSSLCRYPTO_LIBRARIES ${LIB_EAY_DEBUG}) ELSE(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) SET(OPENSSLCRYPTO_LIBRARIES ${LIB_EAY_RELEASE}) ENDIF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug) ENDIF(MSVC_IDE) MARK_AS_ADVANCED(LIB_EAY_DEBUG LIB_EAY_RELEASE) ELSE(WIN32 AND MSVC) FIND_LIBRARY(OPENSSLCRYPTO_LIBRARIES NAMES crypto libeay32 NAMES_PER_DIR ${_OPENSSL_ROOT_HINTS_AND_PATHS} PATH_SUFFIXES "lib" ) ENDIF(WIN32 AND MSVC) IF(OPENSSLCRYPTO_INCLUDE_DIR AND OPENSSLCRYPTO_LIBRARIES) SET(OPENSSLCRYPTO_FOUND TRUE) ELSE(OPENSSLCRYPTO_INCLUDE_DIR AND OPENSSLCRYPTO_LIBRARIES) SET(OPENSSLCRYPTO_FOUND FALSE) ENDIF (OPENSSLCRYPTO_INCLUDE_DIR AND OPENSSLCRYPTO_LIBRARIES) IF (OPENSSLCRYPTO_FOUND) IF (NOT OpenSSLCRYPTO_FIND_QUIETLY) MESSAGE(STATUS "Found OpenSSL Crypto Library: ${OPENSSLCRYPTO_LIBRARIES}") ENDIF (NOT OpenSSLCRYPTO_FIND_QUIETLY) ELSE (OPENSSLCRYPTO_FOUND) IF (OpenSSLCRYPTO_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could NOT find OpenSSL") ENDIF (OpenSSLCRYPTO_FIND_REQUIRED) ENDIF (OPENSSLCRYPTO_FOUND) MARK_AS_ADVANCED(OPENSSLCRYPTO_INCLUDE_DIR OPENSSLCRYPTO_LIBRARIES) qterm-0.7.3/cmake/FindQtScriptQtBindings.cmake000066400000000000000000000037251332762052600213050ustar00rootroot00000000000000## Ian Monroe Copyright 2009 # released under public domain or: # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # include(CheckCXXSourceRuns) if(NOT WIN32) file( READ "${CMAKE_SOURCE_DIR}/cmake/bindingstest/QtScriptBindingsTest.cpp" source ) message(STATUS "Checking if the QtScript Qt Bindings are installed.") set(CMAKE_REQUIRED_DEFINTIONS ${QT_DEFINITIONS}) set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTSCRIPT_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${QT_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) message( STATUS "includes ${CMAKE_REQUIRED_INCLUDES} libraries ${CMAKE_REQUIRED_LIBRARIES}" ) CHECK_CXX_SOURCE_RUNS( "${source}" BINDINGS_RUN_RESULT) if(BINDINGS_RUN_RESULT EQUAL 1) message( STATUS "QtBindings found") set(QTSCRIPTQTBINDINGS_FOUND TRUE) else(BINDINGS_RUN_RESULT EQUAL 1) message( STATUS "QtBindings not found. Some functions provided by the script will not be available without QtBindings.") set(QTSCRIPTQTBINDINGS_FOUND FALSE) endif(BINDINGS_RUN_RESULT EQUAL 1) set(CMAKE_REQUIRED_DEFINTIONS "" ) set(CMAKE_REQUIRED_INCLUDES "") set(CMAKE_REQUIRED_LIBRARIES "") else(NOT WIN32) set(QTSCRIPTQTBINDINGS_FOUND TRUE) endif(NOT WIN32) qterm-0.7.3/cmake/bindingstest/000077500000000000000000000000001332762052600164345ustar00rootroot00000000000000qterm-0.7.3/cmake/bindingstest/CMakeLists.txt000066400000000000000000000005321332762052600211740ustar00rootroot00000000000000cmake_minimum_required (VERSION 2.6) find_package( Qt4 REQUIRED ) add_definitions(${QT_DEFINITIONS}) include_directories (${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTSCRIPT_INCLUDE_DIR}) add_executable (bindingstest QtScriptBindingsTest.cpp) target_link_libraries(bindingstest ${QT_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTSCRIPT_LIBRARY}) qterm-0.7.3/cmake/bindingstest/QtScriptBindingsTest.cpp000066400000000000000000000031641332762052600232330ustar00rootroot00000000000000/* * Copyright (C) 2009 Ian Monroe * released under public domain or: * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #define FAIL 0xA int main(int argc, char **argv) { QCoreApplication app( argc, argv ); QStringList allowedBindings; allowedBindings << "qt.core" << "qt.gui" << "qt.sql" << "qt.xml" << "qt.uitools" << "qt.network" << "qt.webkit"; QScriptEngine engine; foreach( QString binding, allowedBindings ) { QScriptValue error = engine.importExtension( binding ); if( error.isUndefined() ) { // undefined indiciates success continue; } qDebug() << "Extension" << binding << "not found:" << error.toString(); qDebug() << "Available extensions:" << engine.availableExtensions(); return FAIL; } return 0; } qterm-0.7.3/cmake_uninstall.cmake.in000066400000000000000000000016541332762052600174450ustar00rootroot00000000000000IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) qterm-0.7.3/config.h.cmake000066400000000000000000000001241332762052600153510ustar00rootroot00000000000000#define QTERM_VERSION "${QTERM_VERSION}" #define QT_MIN_VERSION "${QT_MIN_VERSION}" qterm-0.7.3/doc/000077500000000000000000000000001332762052600134245ustar00rootroot00000000000000qterm-0.7.3/doc/script.txt000066400000000000000000000224441332762052600154770ustar00rootroot00000000000000Introduction: Starting from the version 0.5.6, QTerm supports scripts with QtScript. With the greatest and latest script support in QTerm, you can: 1. Do boring and repeating operation automatically. 2. Change the default behavior of QTerm with system scripts. 3. Try new functions with script (In order to do this you might want to have Qt bindings for QtScript installed, they can be downloaded from http://labs.trolltech.com/page/Projects/QtScript/Generator) ================================================================================ How to Use: You can run simple scripts using Script->Run, for example, save the following code for (var i = 0; i < 10; i++) QTerm.sendString("q"); to a script file, run it in QTerm will send 10 q's to the server. To use the system control script. Open the address book, in the very end of the General tab. First enable the Load Control Script checkbox, then choose your system script. ================================================================================ How to Debug: If you want to develop serious/complicate scripts for QTerm, it is very helpful to have QScriptEngineDebugger enable. This feature is introduced in Qt 4.5, make sure your qt is new enough. Then you can run cmake with -DQTERM_ENABLE_SCRIPT_DEBUGGER=ON, for example: cmake .. -DQTERM_ENABLE_SCRIPT_DEBUGGER=ON Then do the usual make, make install to install QTerm After you enable the debugger. It will pop up every time the script engine catches a exception. You can also call the debugger any time by Script->Debug. ================================================================================ How To Write a Script Here is a list of functions you can call in the scripts, they are all in the "QTerm" object, so for example if you want to call "version()" you should call "QTerm.version()" instead. QString version() Return the version of QTerm. int caretX() int caretY() Return the x or y coordinate of the current position of caret. int columns() int rows() Return the number of columns or rows of the current window. int charX(int x, int y) int charY(int x, int y) Given the graphical coordinate in the current window, convert it to the text coordinate. int posX() int posY() Return the x or y coordinate of the mouse. QString getUrl() QString getIP() Return the URL or IP address under the mouse pointer, if no url is detected an empty string will be returned. bool isConnected() Check if the current window is conneced to a BBS server. void reconnect() Reconnect to the BBS server, do nothing if the current window is already connected. void disconnect() Disconnect from the current BBS server. void buzz() Shake QTerm. void sendString(const QString & string) Send string to the BBS server. void sendParsedString(const QString & string) Send parsed string to the BBS server. you can use '^M' to represent the return key for example. void osdMessage(const QString & message, int icon = 1, int duration = 0) Show message in the osd, icon = 0, 1, 2, 3 means No/Info/Warning/Error icon. Duration is in the unit of ms, 0 means forever. void showMessage(const QString & message, int duration = -1) Show message in the notification area or system tray. duration is not really useful for now. void cancelZmodem() Cancel the current zmodem transfer. void setZmodemFileList(const QStringList & fileList) Set the list of files you want to upload with zmodem. call it before your start zmodem to avoid the file selection dialog. QScriptValue getLine(int line) Get the object represent the 'line' line text. QScriptValue window() Return the current window object. bool addPopupMenu(QString id, QString menuTitle, QString icon = "QTerm") Add a menu item to the popup menu, you can access to the new action with QTerm.id property if the method succeed. menuTitle is the text displayed in the menu. currently icon parameter has no effect. Return true if succeed, otherwise it will return false. bool addUrlMenu(QString id, QString menuTitle, QString icon = "QTerm") Add a menu item to the url popup menu, you can access to the new action with QTerm.id property if the method succeed. menuTitle is the text displayed in the menu. currently icon parameter has no effect. Return true if succeed, otherwise it will return false. void addPopupSeparator() void addUrlSeparator() Add separators to the popup/url menu so they will look nicer. void loadScript(const QString & filename) Import external javascript files, QTerm will search the file under the "scripts" directory under the local path (e.g.SHOME/.qterm) first and then search the global path (e.g. /usr/share) void globalPath() Return the global data path, for example, if you installed QTerm to /usr, then it will return /usr/share. void localPath() Return the local data path, $HOME/.qterm under Linux. QString getSelectedText(bool rect = false, bool color = false, const QString & escape = "") Return the current selected region. rect should always be false currently. color indicate if you want the copy the attribute of the text, escape is only useful when color is true, indicate how you want to represent the escape sequence. void openUrl(const QString & url) Open the url using the http browser specified in QTerm. void loadExtension(const QString & extension) Load extension, if you want to use the classes in Qt bindings, you need to load them first. ================================================================================ How to Write a System Script In order to change the behavior of QTerm. You can reimplement the following functions in the system script, again all the functions are members of 'QTerm' object, for example init() should be understand as QTerm.init(): There is a property which is important for this usage: QTerm.accepted. It should be set to true if you do not want the native QTerm code to handle the event any further, otherwise it should set to false. init() This function is called every time the system script is loaded. You can show messages or initiate some variables here. setCursorType(x,y) Determine what kind of mouse cursor should be shown in the current context, if mouse release events is not handle by the script this function also determine how the mouse release will be handled. setPageState() Determine the current state of the BBS page, useful for further determine the mouse behavior setSelectRect(x,y) Determine if the text under mouse cursor is clickable, x and y is the mouse text coordinate. Return an 4-int array (x,y,w,h) onMouseEvent(type, button, buttons, modifiers, pt_x, pt_y) Handle the mouse event, type, button, buttons, modifiers follow the definition in QMouseEvent, pt_x and pt_y is the graphical coordinate of the mouse pointer. onKeyPressEvent(key, modifiers, text) Handle the key press event, the definition of the arguments again follows QKeyEvent. onWheelEvent(delta, buttons, modifiers, orientation, pt_x, pt_y) Handle the mouse wheel event, the definition of delta, button, modifiers, and orientation follow QWheelEvent. pt_x and pt_y is the graphical coordinate of the mouse pointer. onNewData() The function will be called every time QTerm gets new data, you can manipulate the received data a little bit. antiIdle() Determine how the anti idle event should be handled. autoReply() Determine how to reply the incoming message. Useful for those who want to write BBS robots. checkUrl() Determine if there is a URL under the mouse pointer, return the URL if found, otherwise return a empty string. checkIP() Determine if there is a IP address under the mouse pointer, return the URL if found, otherwise return a empty string. onTelnetState(int state) Handle telnet events onZmodemState(int type, int value, const QString& msg) Handle zmodem events endOfArticle() Implement this to check the end of articles for downloading articles There is also a signal: scriptEvent(const QString& type) which can be used by the script to emit and handle signals ================================================================================ Example Scripts: There are several examples provided in the QTerm source code, you can use them in you script or get a feeling about how the scripts can be used. utils.js This script provides useful auxiliary functions to save a few keystrokes for you. article.js This script provides basic article downloading functionality, note that the downloading operation is not well handled right now. Do this through the upcoming dbus interface might be a better idea. highlight.js This script will highlight keywords your specified in the code if they are found in the current page. console.js This script gives you a console to test different script functions. Steal from the great Amarok. You need qt bindings to run it. websnap.js This script, modified from the code in graphics dojo (http://qt.gitorious.org/qt-labs/graphics-dojo/trees/master/websnap), generates webpage snapshot. Currently it has troubles with webpage with frames, you are more than welcome to improve this if you are interested. smth.js Sample system script for newsmth.net. ptt.js Sample system script for ptt.cc. qterm-0.7.3/icons/000077500000000000000000000000001332762052600137725ustar00rootroot00000000000000qterm-0.7.3/icons/CMakeLists.txt000066400000000000000000000035541332762052600165410ustar00rootroot00000000000000macro(qterm_install_icons _theme) file(GLOB _icons *.png) file(GLOB _svg *svgz) set(_icons ${_icons} ${_svg}) foreach(_current_ICON ${_icons} ) get_filename_component(_ctype ${_current_ICON} EXT) if (${_ctype} STREQUAL ".png") string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\1" _size "${_current_ICON}") string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\2" _group "${_current_ICON}") string(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\3" _name "${_current_ICON}") set(_sizestring "${_size}x${_size}") endif (${_ctype} STREQUAL ".png") if (${_ctype} STREQUAL ".svgz") string(REGEX REPLACE "^.*/[a-zA-Z]+\\-([a-z]+)\\-(.+\\.svgz)$" "\\1" _group "${_current_ICON}") string(REGEX REPLACE "^.*/[a-zA-Z]+\\-([a-z]+)\\-(.+\\.svgz)$" "\\2" _name "${_current_ICON}") set(_sizestring "scalable") endif (${_ctype} STREQUAL ".svgz") set(_icon_GROUP "actions") if(${_group} STREQUAL "mime") set(_icon_GROUP "mimetypes") endif(${_group} STREQUAL "mime") if(${_group} STREQUAL "filesys") set(_icon_GROUP "filesystems") endif(${_group} STREQUAL "filesys") if(${_group} STREQUAL "device") set(_icon_GROUP "devices") endif(${_group} STREQUAL "device") if(${_group} STREQUAL "app") set(_icon_GROUP "apps") endif(${_group} STREQUAL "app") if(${_group} STREQUAL "action") set(_icon_GROUP "actions") endif(${_group} STREQUAL "action") set(_ICON_INSTALL_DIR share/icons/${_theme}/${_sizestring}/${_icon_GROUP}) install(FILES ${_current_ICON} DESTINATION ${_ICON_INSTALL_DIR} RENAME ${_name}) endforeach (_current_ICON) endmacro(qterm_install_icons) if (NOT APPLE) qterm_install_icons(hicolor) endif () qterm-0.7.3/icons/QTerm.icns000066400000000000000000001316351332762052600157110ustar00rootroot00000000000000icnsis32˪5x7}F&VIuC`qn ،P^{#+#/535< Kb 9>„iTif (\H /L_ٟ$ 4w_Tfڷ6ٳb_~(2:8,ʸѝ|wwˎ{ywnܞ䒅q~|zyynHsxwutsrd݉r{~d|j~||xǕqjoƖVrstnnomp`fKwR}{yww%znV$XXgicRL7{ݭ{ܹ9Աc`~*5:9-Fƭĺɴȿ˔ɼFćetr7rӞۮԷˮ٪Ӣ̬ᨹ݊͝⼜D֥ÿί3y̴ѭ8ʦ\Z| +276+s8mkS}Sho,Q0RZEtoN R0094oc'+mm~]il32 Ѐݧі˜o[QTg׷݇]03:4.% Dܴ-/`eF+# !$(&Tۭ N>|4"-ؕUTp1.o)sCe4+p~j[O!"وA&d 7dJh3/ WY #U53MI8O[)zS)1ҩ1ѥշ S!2䏄MۅVb U1ȷOۓ·U[ k1AM܉÷W^y 4 䚆DߍĹX_<]3gc%V4\E{    "YB T Ul5 iʈ  _I:`ґړ0àҍ*S ʙtѓ Bvd6~&:DE<' *7ЀީҖ緔}~~ٷ߇svu{ݵ+كw~ޮlϏsw{{|{{zyzږoo{~~}}{xzp l~~}}{zz{wvxo~ }}{|{zz{yzxytkzz~}~|}{zz{yyxxwxhws||{{z{zzyyxxyaBmizu{zuxwttvrxqwieK􇋀gU^usv|qg{}}]xȷ}ʯ͸ղִca {}\y֟zԑrxWa~v~|\{ǻr֝:ȹwxW_o|\|֞h~֖]ɹxyT]z^z]uاlZYʼxzG]^w|XswaאXDZus4FWfWg|r_UU|^VufRiU]bNFRn}yy~w{}wx{wyx~LY Gvzyxxw.vvuuttsxUhʾyo_9 %2>GMPRQNLHA:2)  H}˽kµuoI 8Qgv{upkgeb`^ZWQI@2% /d˽o/Ⱥvp? %IlscUGA=875355708@EHIHA7) \ʽp|p? @nw\A=2+# #)-25=>;2'eɽk˼pLQxSA3%#)0772++ '~ȻeǷ{c&SeE3!!'-3.+>JƸ^ijrEGYA)#'.).VõV°n+.y\=%!%-#E^ZC[RŪlD%!''!2:Ƚ~M!tŠL+!%S!ŷi}C3Ȳj@#!)Tð~=BʞN-!3 ȻAŲ=MȎIQ õtʶAQŁDa ʾXϺIMz@u_ķ:VDx>yH*ʿdŰp5}@)JŷIͷ$#ĆB uʿo=s2ŷQ Ȳ`SE W-ʾm Ҽ0_-@rĵN ůBv|:Uɼk ܺ} G5-N²|G Ů6^) - Ǹe ҼxP='A˾o3 ɱ6L#  ó~W ӿIz7Oȹl ͷGumtnyE ̽o9 ŭ7|m{°wW ӽj\W|k"ƶj ͷ8z-zj ʺo+ Ư7i.ug u;oI rRGng (¯s\ ѻJgz+ qh ų{kͶ(#si.Bwutrǂr: ȷoɱ 3vU%? iʺo8ĬAtAD 3ͽoJ dLm:ICbrr`D@G7-`)7G@%Sri;/^ra4 ϿoW ӾL SeJ(z})p5d- zǁ" oaѻ9X]+I9Apw3j& ®oh Ϻ)XU'I&2.Ņ8 İqn͸XM#Ivā)` Űso̷VGIY+)>&1=u űso˶SBI/1Y) qƲto"˶ QAIG)w) hƲso&˶ M@IR)) hƱso(̷H>IVQ<}I; nưqo(͸B>IWD {ůoo$ͺ =@!IW íooϼ*3@!IW ¬ooн:-@#IWv ooO#>'IW( ѽokðh:+IW(NxϺodƳ3.IW)d#̷zo[ʷ +3IU)dYȳsoNͼ)3!IM)eĭoo=O0'I=,joo%ų|'+I"Ń;e Ϻomʹ.Ip( cʴvo_ο>)#IC ʀĭpoK ųu)Ip 佤po.ʺ'I_q˶zokP%=\ C ho{vfĭpoW ȷ #   =伤po8 Ϳ?#Áɳuok Ǹ  .poR >!˶{oo)Ǻ>ªopa q³P  ف̷}pp;ɽoppfŹwʵ|pp@µHŁ忨ppf" xDZwpq<Ƚ 9κpp`ƻq ¬p-Ż\ׂȳ|ppSźN ͺqpj żH 忪qpp9ƽI  İyppUȿR ȵqpfd  ˸qpp-݀~ ۃ мqppEʢ) оtppVV ʼnQʏI؁źo`d Źf hہҳD °ķ[ _ހҫ<  ȿ÷QXչL-ȿµPM~" Ⱦـ´W5}s$~ȾـZfܬZ#LȿـUSǎmH- 5bɿֽـɿOE{žـ ڀȾC \ՀźــȽ3Ar ¹ــǼ"!T ƽpـ ƺ~'\}Ҁ }pۂ źu1]xԅ ſxpk֌ Ÿm,/Zp¿}p dA7ȋķf'Nip}pW/5“ķV7Xmpv vp^@ 6X6Thpv~ xqqpmZ?6pq[?Udpi[H+vZuR<><>?Yusnlg^ȳup"̷]cvELd}S@UkRYurnlg]ȳup'̷\btELd}SCOaR=WXtrnkg]ȳtp(̸]br~ELd}}|qcLZƐi_E=X=X>Wtrnkf\Ȳro(ͺ^`p}~ELd}||HSe==?B=X=X=WtrmjeZưpo$λ`_m}~~ELd|GR>?LY\=X=W=WtrmjcXůpoϽe^j|~ELd|FP?AZsu=X=W=WtqmiaVìooѿj]g{{~EKd|GOBH_vw=X=W=Wtqlh`Uoo­s\eyz~EKd|R>>?GPENdyyShHSfyx@ZtHSfxx?JVfv HSexx=W=W8L]VMŮqpWȹPWam||z||{z_DB?FMd|{zm`PA?==<==?AWmsyvsY?>ISfxfTH=>Xq`NE<=>Wp\HB<<;97IXPs彤pp8iSZft~|{{l]\[_bo{tmd\ZXZ\gsvywvgY^dnxnd]WXXfti`[VWWdrh]YVVSNLRULԁʴuplȹNV`kx{y|ywxy{zzxwvttsuwxyxvtstuvxvtsrtutrrq prtsqppohc]WNhppSgRYcp|{|{zyxwvuoie]SKҁͷ|pp)ȺMU]huzw|{zyxwvuskf`XMqìpparôoPValxzz|{zyxwvutmhbZPH͸~pp;ʾVRYcoy{|{zyxwvuoic]SK¬pqgƺLS\fpz|}{zyxwvuqjf_WLX̷}qqAõkNS^hsx{zyxwvuslf`XMGԁpqgXNU`itxxy{zyxwvusmgaZPHȳwqq<ȾIPWajux{zyxwvutlhaZRHjϻqqaǼHPWajsxy{zyxwvutlhb\RHP¬q-ƽwIPXaisvxyy{zyxwvusogb\SHDɴ}qqSżnINW`hrvx{zyxwvuslga\RHAȂ ϻqqk ǽiHNV_gpuyzyxwvurkf`ZRGAq:ȾjGMU^fmvuvzzyxwvu toie_YQE@ űyqqUoELR\bjrstzzyxwvu smhc^WND> ɶqqg|BINX`gnwuyxwvu tpkfa\ULB;Ãͺq-ǑEGLU]cjqrsttyxwvu rlhc^XQGA8 ҽqqpF܁ˬUDIPX_ekruxyxwvu rmie`ZULB=5 tqpVۀr@GKSZ`fkrtwyxwvutrmiea\WPG@85˽nQہ̞IAGLUZ`eiorvxyxwvuspliea]WQI@;5rۀǻq`܂}:55XķQ$MԒM5:>ADHLPRUVXYZ YXWUSQNKGB=75¶X$6}҉O658;>@BEGIIKIHGDA>:5´[gݷwO6575qVS͟lXJ@::=H_ ׾P E|ր #D \Żۀɾ3 Br؀º Ƚ# TՀȿp ȼ'\}~p݂ ǻv1]x xpql׌ ƺm/[qҀ~pq eA7ʁ‡āŹf'Njq}qX/6ÓŷV8Ynqw wq_@ 6«X7Uiqw~xqn[@7qr[@Veqj\H+ ɾzÀƑŃĊÉíŻo ®~ĀƑŃĊÌTų~ĀƑŃĊËҀƼ8ɸxĀƑŃĊˁŽ·`ɽuĀƑŃĊ˄úǽFİ|̀ÀƑŃĊ˃·iɸ|ÀƑŃĊ˃ýȽN {€ƑŃĊ˃º·h ɴŀƑŃĊ˃ȿǼ~K ɽ|ĀƑŃĊ˃ºg ҳ}ÀƑŃĊ˃;źvD ɽ|ˀƑŃĊ˃ʿa ɴԀƑŃĊ˃ʽ÷j1|ƑŃĊ˃ĿǼxS ʷÑŃĊ˃ºg ůa`bŃĊ˃Ķj7 ʽi_Ċ˃ǺrS ʶdQĊ˃ʾ|eůcCŊĄÊ‹³j)ʾa5|Ċ˃ŷjFʹ`5|˃ȺnXȳ`6}ĄÊ‹ʽufį’VJ>2&122N~˃{jŭgMbcef˃²j5ʽŸogm˃ŵjFʹҀ lw€ĀłÀ€ǷjSʷÒmxǃƿƃȹIJǁǁȹj\ȴʃœmwLJƾƃ´óĄʺjdŲȂœmwljŧƃƅټkiŰȁĀlwŋƃŁuٽmjîƀālwǃjƒňt|xŃ{tپnj®ƄlwÄtaňr`c_cÃdپnj ­ӅlwĄqeĈr`w`vcٿnj$¯҅lwÄsh|Èraƒ`ăcپmj&°ńlwĄw„ƞzjaÃ`Ńcپlj&ðłĒlwÍr~`adi`ÃaŃaٽjj"ŲŁÀlwpady`ÃaŃaٻjjŴŀlwo|dgă`ÃaŃaٺjjǶ‚lwÀ„o}iră`ÃaŃaٷjjɹlw„oabcbp~n|Ń`ÃaŃaȵjfʻȃÒlw„peÃpŃ`ÃaŃaŲ{j_;ȂÒlv„shŃqŃ`ÃaŃa¯tjWÀ€lv„rhÃrŃ`ÃaŃanjKŴlv„rip~ră`ÃaŃaڼjj;ȹlvsipră`ÃaŃaڷjj#ʽƃlvǃ|ipră`ÃaŃaƲ{jhlvŃłotƒră`ÃaŃaqj[ŷ~lv‹`yƒră`ÃaŃ`ۼkjGɽĀÒlvebăqă`ÃaŃ^۵kj,}lvÆfbeŃqă`ÃaŃ^®tkfŹ€0%#lx ~bdvù r½ab]}|ۼkjSʿ~jgcnx~fca`_`adhdcbtsabc}oabcuka``^[z۳kj6ķ}ƒ}{ށpjfɾ} ۷kjNø|ƒy܁®vkk'ɾyƒ|ۺkk\lź{~ƒtïxkk9vƒw۹kkbƽwƒy{­wkk=ĺz{ƒ~q݁۷klbu}ƒr۾rll:ǿq~ƒsŲll\Žr~ts۹l+Žs~sj ۿvllPļzr}rh҂ ıllf Ľwq|qgĂ۷l7žxoz oe ܻtllRymx ma ۿ|llb|ht~ yj]ǂ ±lkk+~Ždpy rfV ȴlkkB̂kkt {i_P ȷnkkRŽ|bnvqcWR´iMрŸbgpyue\P򉂨рŽl[ҀZhpyvf]PPрŽb cҀȴrZgnwteZPPļW[ЀɱnXbjp|zn_WPR πĻNUπ̸wS\cjq{yobXPPn πúL6JʕaQY`fjszxqi^UP πºS13wɏcPQW]`chmqtvwxyxwusplg`XQP}π¹VbӳdQPQRSUSQP|Ѐ¸QOŠ{l`YTTV_q͵ЀKAu ƽπ Ѐ@ X̀ŽЀЀ0$?m ºЀЀƿ~! Pyˀ߁ žzkЀۈ žw%Xwʁ ڀſxkҌ Žp/Yŕ؈ك½rkklle͌ Žh-WlzȀˀ¿xkkl `>5żaKelywklT-3ºR!5Uilr{zql[= 4T4Qdlrx}~ysliW=4lmV=R`lfXE)9|gfgzR!6EPX^cfhijihea\UK>,t8mk@9Oboy~}vl\H1%YΦzI%iӔS 2irU6~C <| uR 6wW  B$ eF b r}" & }'p% o`+NF& %;+?- ~=( KQ6G2! E/:U>' N5$ ZcD2S?,dpO<%^L0 XmW=# bJ2 7iT@+ _O6i\@%VujK- oS8$ t[B.JwaL8$hVB.m`K7 sjUA& Hvp\I+{wdQ1 zhV6 }l[;~n^A$ ~pbG, ;~qeK3!T~shP9& itjT>) xulXD- vm[H0 wo^L3wq`O5xrbR7yscT8yteV:qyteV:_ytfW;IyteW;-yteV: ysdU9yscS8xqaP6wp_N4bvn\I1 -vmYE. ~tjU@+ ~shR;' j~reM4"$~pbH.~~n_B& ~}l[<-|zhV7~zwdQ1 h~}vp\I+ ~|siUA& }{m_K7 &|ygUA-zv`K7#+~ysZA-~|tmQ6# "}zpfI+ytfW=" ~vn[I1R}|qfP:'  ̀|zl^E,  ~~xsbR8Oՙ~}tlYG, |yk\I6!  fzvaM9& M}{slU>,1x{xmbI0 LDpxqaQ:$  UeitjVA, alnfO8&  `lI0"Yمl8&  $Iǿh- $8ū֫{blx+  &7Ҭyqkgfnj+ &8zb- $4LY, $3CI'  "1CX9&  .=Mx9$ $8LZ3" &4AOZ洀5$  )5DTaҢ7" #1@M[cl޳~}{z2  ,:IS]dls׳}|xto, #-7ALXakqvؼ~~}||{zwslf^Vw/ &5DR_gorvwy|Ŵ~}|{yxwupkaXLADGVfow{~~~}xsfYA) #.8BIQW]bhlptxz|}~~|{xuqnid_ZSMD<3+.1?N\jry{||}}}}}}}}}}}}}}}}}||xulcP<, $+36/' (5I^iuwzz{{{{{{{{{{{{{{{{{{{yxsn^O=  (19BIPW]bfiklmnoopppppppoonmkjgd_YSLD<3*# $7JU`cffgggfffgggfffgggfffgfeb_TI: %.5ACEFGHGGFFDB@=:73/+($   %,-//000///000///000///0//..*'  #')+,---+*(&"  icnV Bffqterm-0.7.3/icons/hi128-app-qterm.png000066400000000000000000000526751332762052600172560ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx}p}ǿ涣,cKiQuڤ&k$k.ڮI.˥e ~g٘p6`,Xؖ-#ɖ%K,YeYe#d[!^C!4dl@w~^IAts/A s 1˾vawȹwtw9]&˲m]鷿3ur?S_ l+#k0L15.bP(S#LN4c|b C]~{Xkmik{_ `jԕ] AH"dFP1GICB w4mM{Lf͛]_OF%'a!ET+A04ƕLÙgje&}LL 3~X`+3 WP -AZU?A8cp/O]&|LN4y<0"0>}.zXmz͵gNF{(@;0o>!ƙFzq/czxߍw! p>#F { FrX .zVlvZ](,{nD* *k\3~X @X:tX:Z±t:a wVw34C@6ZW*QYY]{} j(ĥaFzXtEGILA 1& j f04X,V= xv34 K1SIf+J/>n<6N3V4zJ>صq㚿B<,L!x_ҤQ -: sZUѤ^U*jjOQPa INވDl&a-deIۃLCQ./!NULzU5sZUahf7`wp{ 8v38͠A}=. 6{U5^}/E=S:嵷 lbh1Q5AyFqa 䒝 ғOXڵDE-#*z&Mjގȿ&T^M')"6bh{oXERr)dfn!'w\**TUF%m=65&k݀a׉A]#M͵9ZғK!ozk' PqC\ddEYFWO]}'RV^ ;زUBBbW Z1q8&oEkOb҈^IZvm%?/r㇨VVР:FSM92'ػXKZYYҪ !iwi[>{E**e`_v&)_ʨegZ [[HЅ sҬjgN'Kzx.K>^+JGyC>Q~Z2«E~^.C|/%Ynaveؙ6#"ɈH#1l_TN,JKe Q NM[%q;o^/lXm̙2 XY xbs$ll䉄ff'y1wJ >:VJ62NWبDքɬjp iz ҏ~{BBa83? jV8ގ^c%j%> @ x_MOף5 Su,L3DZ;IMd#,F-bm[/XZ*MJ&saQM&qCJQMi7M$W6lq7nɴMAQa8b$&h(&GFt# DFͯFTaZm}s\Mh٫e\J)0b0lf]^6 1mC kOс?vbIG6B ܗ\Gh9N,|d?,ky*/} <0 sQʁΆDVq6l=%X,۔FCS--n{uu45RɮZ J YA-"k nI"WWJِ%oR$RY+(fm&cV5ͮyul> H"?nd{ݎj\.;Mͻ.:v4a4p-xWWs"*/  Dɓ^,e䒾4H!Ռl#lny+'ՙ /BvK1,NAx, فDVq猼?`،f*y`"8p5b*Wuy9,LjƉ3" 5L]ˏ?gS<XTE$$DL,$j^w[9)r᳭V]w{Egax$ƊDTqߤdh,n©69qSZwY2ez9{yBD?[\hstwp(:[6~ s1- -GgaLv`9Bz3,Ǚ[t&bλJ"dkRUUJn .W -{Tfj3[%[ٰaioK"ܧ$~j?e۫$Z ed,#9y6/!![1󊾃MGt+|ZqJZ +9{kzHͪ7Pm-A:Nr٩ݎٲMisx駒D"ﵖXY̚u٤,L-M$-@*y!M!H÷:x>F&tf|-$Y*df)◝6K㰪.PGkk=kuи{•>'ټ<ŵ"2ZDyΫm]}92STRtg$jHYkiMV]ׁ 6]I@AQ;`Pt5nD4[Xm W]-)ZtqM &ci*w}DyA\;.&ԩ ?wORx&P|X3!04'q;ͰLB$_ͯeY3{k<;,7P|#M\2,B 7F_+.PDROh9)F#F&ԽE]kajevZ22Sر׊H_.pka?]G7% \NPl"-!cWtK `n L3T{#J{*?B!'*ef,;q)naeM@vk9[6 qiOHWC}.௖KpTw""g_㑠\tN2t?!zTA!a; :5nfxE<. LCw9T2< +" rd .D&daIס}tpCA7Om&Jjshx3DdMpw_p&r VOAd/2@`c% լOH`.a7~uMwO;= [5 k-Xԏhxyԋe","0]S6lmT>TҿTB=3g'!2nfZ%MƘ?n "+^O6E"dj.;ٵ#=v}ģv;J/e}IDB"2Bo @Ngo9©+3QYYm'yhAѕ|+)AOrτtծmxQYΠ>hiȻ5rhGHO;]x!ps҈х1m'E$\DjOe3}-"r}o7ݯjŤ$d*-'dK/Se?ID{QF>L|+]L# 0S(38v q3,€oZ%ȴx=+9ϡíx7`a8}Rf%ƠapG.*#ko>ùYa' Akxlco9Vę H0TZ< z(N]Mwd|Gk !~a4%M=ǻ=I>ހDi&rr34 z\+]Ӝ:Cס}8m-60?LcDЭ(woD1C5y3E{FsU/ZzqO qox E~@d9)A"]=G;8 h]{7b`0lau'1jԋ"+"՞E䧢+a@~w{>q-86*M%bR܇wQQ_YLӓPDcbd2'ct' mb'hb(h\XJ]e¾+""VED%*Q) bEGBOWwcH6D6:OKj Ƈk4]*;VCuAx94Qss%4]Ӝ1qBئP3ƿ_ C^4>C$kNT8FJݷ ۆ*ssAjo IDATX ηjVճM$|p,kt#C6@k`ܸYBˆ-B!bO|R2q6d8)AHehh BKK/8ͅA\3,2:S4ʹ=vfL/}4~a B"ڮUSmW]X}D¯AmmVlt\J\mi+"L}wG1+'}+V@˩oږlu> ?}vR#ZT򋑙uN ie'T3, P: ha&1@>Τc f P({S*\}6|a կ"aP+;E+ӀrB2d)]i= b*ʁJDž^(r4ˠX6ˋ { lhz/]]P| WMpٰ22B,|ZB;B}Gy `c )CrJ t,|@̒pFI-ؑt{BU0&8 '/82[;}hęOX%BϜ0^i՜~?0O2h9e[:L\P!xnI+Zx(nF rsC8±z`lB>f!"O[=G?5+A䡼)8Q2H2%fTZ;'xa*',B4R̖G(Ujs5c(, dh9Cͮ #Cx:"A`'$=bfEeͣM:vp`TP!D i92x%zƦk^'@aQ6#nb -LMX)RW|&<%O. hFy_̂q0GˑU:?tW @MM L\껣(lHv;CG9L&{, MDzI@^ ž#b` mhkoԔ/Qѧ`p.˗/;Mq`"#BH07㐁^$.tvGc5\N;~"b-g X)K14,TU Qm`2@XTH9tat켏Ʀ 9HH[{@L̞#tKe\}*`{@TSMڷ.Xbb7_2yEP5a/CqiPYo ud*/(%9xdo4,K1\^He]EtĻ@fzx2-aSX/Lp:EHLko im/aSM !UjZ<<"\ff8+S8&Enqd+vRm-]]O%b'?şrsP5QJ/Cr ONđq&Oy鈈 ap8l^*rb3a-BܻscϤ큌:(*ErJ,@Br+܅p̰ +v #f1粠 Y<Ttk? 1/F'ŀr/@d: \4p>{ 藇Iplp8l;фcL(hDP__>4܍^<@߁_)? QR367/B7Bo/3*|%\+ XC)PѣWr 껂dOv A9 f Fp*dhk@X48aC[[3I$|B&,$w uaxTt13ܸ!ĕ|KKZxv:z!) _n/w_omuAf XLzF vt(AE ˦@LR@v#Kl1>.@ 9x``yl1G$Tց'TjPVQ ) 7 `*ָcC ~p8tSB 3 HzZ18DL<@SS~ b K$G|]ic.X,c82Y؋hd& RXa_Y,EЧVip7:v`}f tc/Ua .+F xA@<P AALSAvafsC"C QXwޙҰLAH"Hۣi1:%yq[3n* d ' [-74\rze2\P8&bf3Pd<;OBeC< ;+ aR9gRtuQYXJ&G7_ _Li{W[Ҋ4ݮCO4HOO'Pdp,ZŽ|;Ow9 '3 KΘ`:gMo )о8_U^mTn?X/::T +gR ᰡQ&h”RnׄwKĐwPmbzy|k bt8jl{ :V9nu Tv`mEc#WƦ5fHz͹&n(.CjZ"X40K2||-+U3j ssEZHT8Pw H2s0 ,@ fgS&b\V˙ 8\6qք]-\0"tןufܾ~!DEe!2AbbEU`@˅'_=~: *Pr K+-M:cVZ5= +d'6?ڹ?L>{._}gF&A;AT4@}ÏY;Gm-}v?B(ˀC`( 8N2~KF++ X*zXl-Ӕ(ޕE}ט I ӦmMm2TILއؖ!@OOZ.Ƌ SU0}端p(FSػwV0sIh"n|rw|:04҃ftt03RR3#p2UVaQո?,="~y~\Ox' ӗoŴaxfY̟L3%. >ラo>5:IW_)DF)ٻͬg~# |d7Eg瞰!@"w{@>X?>e,04ˠCS5w6m|$Pydx)Τ̐,%' cx/ +scfe<4Yk: d3$-0B0B ~`xk[s5 f8rfLK ?ČuL!)!ؔ}0d<Z̍!(13(ϯ;k88Z~xЪ1nv<L Z]Fjj2EmFpH7SLnEw$nS *Kgut1bt#a']r*p0hVG<' \ J*mùr8E9QM"jjРP0 %d%L&au|ad By2HʔFm PIR2A2eDD'q!(!A(UA(VIT 'QamP.h=@˷ᵠ waΐ% !a\hcv:M?Cܮ ۭDSշ:02ҋF04AI,2EX-1TuJY^%|2)3c%~/1J}_'um& +|GӃL%~+b$Wھĝa# QUBvy$&#L (^T6gAkv\$аuѯdDFJ @,ܹo_!̟h9<:kE=V@G'kGNb,lKk~_s\xk Ѭ ٻ"qDz~,_(gi#vX-F:=zvlic VImBH8$|Ons6xRF~v MUhlHЎhl㶊_CMMTeX%*a>g' GI jfd/_Z^?yMkPqw@́98 {#KWYZ'K뗀?h o?^UIW nc+=ztYN2M\6E\Ġ  4P%8 WA'Q.7%b@+4_~9jVZ/ǑfE9T,boup$xDjkjZjihFO}Qq$еԠbnE`} ( yG1 p + Ӡ5ɠ@@ k&b{pFLHMBT UMV/ߺBl bbdNt`}V]k-: z׆ еԢZâ@CAK 3ۜRde *؇ XOg"h6лNUN>>\>;cͯ? ;;d[sailbe&?VDxvs jˡk59ޛ0r$0thhD Vac.Т <:sx [1g @H;SadW-- =.ur646U'.|5ճdmb]mȪc N۽;n[2uе֡#AMIЭCM75נNxrDSVŃm8˴%ep?%p$ Z"- (0690/~nsXgo_ZRdAl=ГS8̴v A G9~C yh&8z23q[|}5|Πq9S8-4LIIS PSA4HpCGWn5X?В-"d)P d*"iIJ92}ςN0[ﶃy 6f{@FF166w?ƽ{ceAGzX2Mr^3)8v<VAzeWIDATa˖M+T&90L%gWXGU|h\tumlEo/3 &"7p O@X>/6!j/ j8J`RVgu Lݻx^w;*>9?+~yyVF7 FNc{MNt#tlԅ>0q19~Ė?@k?&S4MygR>-U桺FƦjihB3 f" ظuo(B{Akip p+4@ƒ8"C aǦu6d8{+v\#[-.0ThKt 'О,TV)q 7ehfl6亰8mT!3,Zi b18o>0{]yTgNhϭޙv:S{gmQhug. q wEDL AB 6hB@m=U7'!&{ *ƍ 2y,B_^`BM] Ք D.Ŭ [g`3fs`+H*sh"0M[R)*8)F;%nwBӳ#p؜of>GnJsxgDR:JJըA  YJ<"/`<6e(bϱ?g?78Fp sckV Mr Ty jJfUkKQSK2՗AںR}7Е!FWbZ0kII*X{dXBj! QN| c%Yq*#*I9 6'aK"ƸH1F$h4sC$%l&E$pN[ 6u9e)E.x==ݦxH|B=}|<3b\ϖCF ! WBWF&sR!KCx,Z0QkF>g !B*G;6|HK ''JTЗkPYE9iqCc9xL_dwrɒ;3;2B v3 VJ'F_!>&6vTklM_5%eDkQ_;/<:B Cӧ'␝FSY>zUWBWF:r$bq),拟 Aʨ :|ʕK%#K<5eҠ8xQSsYKKPZflҹ6JrٗjM6]fO!F/;AٹE(b7o;Yw l2p@5ئ'=f -VAV }?*rn3"T= P*&z˭I7Ls W0Q{?g{ixyH$1HO"'' \ PQE-hh(GcSn5SPf,GA{T{_|eeXDb)8ۙ8[2SdJek _$0:{;O@?6UP5CAϜ9ݞjoL_ʛA@SNu e $\=lWXdTFѿ y+A&F;K Xx(ʀF N}$ P+n5D[kpoQS Ck Z մAe[}1&ɋ0ȸE`SMYB7DK3XGR,,cnյԊuh?ы{qo5(ҩAB]|1W.\UE"YHD#?Y-Ψƿ'Ls) .,YӾ~ HM@C0%jՕ 5:44V%[`hAku+p*ujB]^{_ t>srhщ֢j͑q3ltQ.iV;ޜbӺ;:] ~;ӁwvZkM VgA`. ٳgܵ;CP?B!.-Jz֗q۠M7b;V4Ʀ]-g@={ ?ѽi5A }F t@XA09P$rUHKBV;sU_Ƨ_(̀0;xQ}ڗ#F^2cNybH Cp-)$HvB6u*囀PcMMhn`ވ[nF=mۆ^~x0ЉGQ:ߎwӊ.ZJØ̙$Hb9}BBQ_g3q\cGө}(5QS[jAye *k"^#G 7g ~;x+ƨRu_{'. "2&!OB4)dX] DGh0P Ck-ZN[=ڌ 0aloB{G::n v~whkk P&\e"6L(,(Gl i$R|%y>kthl|?G fyaɣD] w\s]qu}/Aѿ n"U~8kJ۷ O!$ B T <IP^#'7y,h-ʅ$44Vɜ*c>Po5%m ȹL x'D#**G[LMBݞhCgT*F2a Зk+UbҗSz]_Qh7Q<B1w z @/Ud϶4iQ]Dطo'@\ DDD0p$$D#))r5dd$ALTPe@V@]0P#Q©,%|)T ]It*jo@ u7TPf"S! tٳHb !9X[/ b/x5IFr  2il+u/-]Hvs&ls߂{=8zt?N8 o8Ӿ'?; ??/qx{ 8v ؾ}+xoby3I2}hxvF͓|RXx*^4mqF`BBb iW_ a2LLj&7U81;<Ōiqˬ|aM:Ĩi_O #q,[ E>Xhԉ[Uú3v1b ̙deJuW5;7nr9owvqpټ顳^M6lXۺz]Ͳ ̘9]:ox'"^`~mv]<z}+55)43 E'0Le4r.T:F3Dп_v'gΞxBP#h7Tb!c Fvm ɞ@%|^#ʒ~U<B`8ȍy2M+ CvbA@adəDZV-bt3jΘ('Fcy1\F3ȝNE~u?A" RcWFvŸ~(%HK6T2uw_~3'ן o\T6xmlMoF-F1^gy5n='3۳+Z(~ J(XZZ* A?} ]Jb˲;;̙N|"fN 'ʝl.x;yWN;sΌdY!p/e)+if7NN&b{YI6M/qrA A/lC\"Ʊ )N!F_+=,7|^63z(酜\ 9;ķvK_oִLI.g\Taq|u_9+u\.g]&K\6Zw ɑN W[&νkrۯOAGw6IENDB`qterm-0.7.3/icons/hi16-app-qterm.png000066400000000000000000000020431332762052600171520ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  ~tIME l IDAT8=Luߟs dlnfUlZi5gYpF#x7ffvf>sc~uk=|GX DtKރk' Xwg*ۥ" ?q zӿ"ήzM_Ήe؍uV}Ms6CSsk;xPCG c$烺FRl !Ne`/ǟNF1R:8wPz\ *(6Jc7 MЮ-fvDC洰$@SC &l)Qnw6l/}E]f" UP5Z&S,[o=_~^QQ6qa8ik·wߛJWbL2$E jZ&J=X|CUl"=xIENDB`qterm-0.7.3/icons/hi22-app-qterm.png000066400000000000000000000032141332762052600171500ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  ~tIME,(z IDAT8umlSƟھq$$ y5.քB[6uMݴSԲMPiR*0Z:Ѐ-iIICb%$Nl_j#/GmېRq;,ˮg7ԎٹOr8sd/IJ ۶aοz|3,V6ƙh3#ƹLS ܾ?%q@ "0`u@8) !T"ldVl-'ݝ_9 y4]i$>oObM ej[Myib'g_hPJ~䱮]ݻ#/Y}ϝv;M2#3@ R` ).)JE<ʫ?jEE{1eslȇ6qpH\)BU*\>c :6u[`e>{Js)Jx?J݂}>^Q[j/`&"Xve))%b-H"p_UEG1(H2oyLD?1u!_ج ] bl44 FXJpb YTTG&b9x+՗رYںZYy=`F"ӣIOo蟊&^֎ kXz5,kGGjN>_*UW6 WpvJ pgOFJ@୷scnxrDWxbx`iVI ܈X |qc*|68:0ʩSGvέY2ܽx\F"KB*$(g4OqzN~2޹tb(x0|,{zݽcmjE2_83h\OQ#Oc~ ކ5-- c`p|~Æ,x=w{~y,&qSO;3NY,.dLf`?}8D2u~7_=_CZssS}oꪯ[RJ֍p$=6p't$)ET.u]JTkP4K/y\M  6^^^nC<\dIENDB`qterm-0.7.3/icons/hi32-app-qterm.png000066400000000000000000000057061332762052600171610ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs  ~tIMEx+ FIDATXÕ{t\u;F#KFO #!Sj!XBSj NY&MCB£-< PJ )&ۼ mH$1iuN@VVҞ?ܻw>k_O~ΏA%윞9iff{o'ٽ{mn_Ckm\9>/E1gy3lL0nL)|2љّ?ݸ'Oo)t &0"-5vŽ"\hbq,\T@DaGcըp033[o6cAD~weXePfb0~WS,ɴ$( tUyI6h\fL(bi>z˾p3^: | fW2Gys6ZXmkH4zE'8JsGX㆕WwoUS;޾dcɉO`1]fB.x[?/s+͚]FHEc4%' X"ؖř *0N\\o6^Pu+t 5_ `j+۸+~3ƘgFpˏ^R53Nfk²mP@1KU,ԧ\ȪU+MZ/ze+n_ ,kH6 a!^)'G~-=g̅h nUa"a , mS?+kj' ~zEQ[;d(56mzzC>|'A+˲)9^T)' zv͗YR{M]"BضX)Gd !`bdpF}yjnn~lDaNWvœeG>!|Aʎh6X`)X?37V)?@3qj˲-Uo&Uk_BAm%E wc٤ԜC28P䦳W'$K~35ڠl[ZZ>kmƳrZZeܔaY[`FD ~V7V6:O<PA?l%]:):#),'M1Ս.yH!BI ow5yB)v463giiJѱt_~آ gy!}!=ιˆ+@IdBŶ%am e4BsBU$+|ND"a! UH{ݘm$f~zKFkPR8)_u<e,MX('3 .y_ڎF@,>Ca Eq!Ja 1h*, +qB4TZNKOhsbٳ?et:J":NC JʚhIYCH;nҚg>QBqoٜQ(K͜cTE\n7^|: ,{e!DJ *dͳ#1395##ccvT>_8)˛eBE̓񊔴ŷ_f5\;3J{ x,:py9N33i>Q+527=;OX~ ܼ|(A(|2T\2v'FBP5s#"353~hz<!s.kT'3S[i^H4/Q[Ҿ]@X"p#K1C& &{,q{8xx41W}ϳLn)aR٘Ng &Nx:4\krqd|y=ٳ`^)l٬K7Y:X;SO*QUUZHXMIߗ "ԑg?Z-eǎsHӔ;fM|tc_/\u>36=w"xKk ]+N\/v|0~*1w7DuM"!b$:zfvڽͭ|W~* ~6lj xgugqy[[kM]]-XpFM!_ r4#==~}mm+'&& 2(Bvp8}[Ϭa`kEumX4*)tA`vVrtf1-1b۶48ضkɉc 3ϫJ @*ADD+J 3ʧkmЇ.L"e$X^| řOl3ԟW' ( D`wDXpr"K%Ju ]14LTkV lRi6LLÀ5xnbnn)\sF!T,l)!_@n03;)y1=>ѩy]pYєʢ% 85tI[CX5Vn5ɩ &&tu7|n|+_N څ(RBJj2? sj||ӡ)HAc=ڝu@:BcV@)۞7:[!ڭM+ڳ =Lt]jᑱ<;`KoVwwr;T!4(' t0=5'KGɓ.~Rjxի(<m"R A 5E(OC4ho*mmmnZd:;COO<}=,h)fE;1lԠ j+/'񌸈zەgS76E .l$, "bff"2@JX4FS*ߵ[6V0]Pwj|l@ܳ~otkR@/ fHLF~G wEjV#fy> cGD$n ?]tl~ǭt5=0E,C#S cAL"̄0(_Ӧ yu5"eYfGGta%~i2K`'/18 3" <=6#<92\p{n? <{r`nnOVqᷟŝ_9au " Q(Dl RŌ!_Vunx!CӋ4azggv--gJE2s!N eZ{_HZ)0\/ALP  =X1&٭ɳPKLUQiKt&ͽ{k~z:;ӯQ@%aV(~~nn|l7Z*8 ,;5l2 $r٦F8|[PY(ehl={y]=z'o!;nGŧѰf =o2S4N $YA! lps|CQ\8Z_iX`0\ϓJU?~o=.byGG'߃܈#H svx-yPb{)qD- SY0S T-W {[=ve.v!S5haT]Oz~alOOR[+ s3~O@sFPA_9 J<_R_7$8-*$[/mWlf m:;;;:Z .Xq/ Zإ<)޼n^F ̭cHhȈ!"Ld RQ}x`t7?M~t;NWrZHi>(&dD )F A}2uBN0MArm>gS'&e2 hoo`5,y0]@}1UrؗYjE9ǂ)gg,@ g6'if"ѥ] <7\ZõA='ml8g0 >0᎝M#)tI'3#>^5y RJRLM 3BB̓AZ!cV7IY d 9 Ќ7s쀡z/qF\%p:pC\=-)ր̈́uM:Pטști99J ŦS*e!J @JQSQB"Ed CZQ)Bӯo9J '#j(KވzDu#W T{yI8 2Ԑ2+z&-ڞph:4M 1ܦTj)a Xb<V 4`o +ϖ]BU{:{ ɚ&ybW&YX2G'f츾"QHDa%Ûb0X4-bC$`^Q!T*IZg@7oG22& :V /|%[X4RӡR:SOMPPR? BcMC^PI|{̰ ӇܔE4Y5Ad="ٝWi)@E^*,f@)ЙԹ-30DݩC)&n" 0Hӱ1Mƒy'J}\ICE~y8cYf*b"fe 8bVљiC(oh0( C.Kp}v0igM#mɄ+AI׋n Matӆ];쵈c\ 'd:D.هW.1p\9)l. t2 ] M䰭,YBP/Ld25 $ ,›޴A P&mЈ M!Št% MdhSHSdHP-coqa msjczzf@juF92<+U֤qX*`YC$6?vdYw6Cb?Ξր|"(Ap 8_,T,qE\=, lWG %"9:P/[@q<3=rBq,Dk|ln.WlFu>=)`{qqil$2-"~VV j-# 4wR{ ܱ>Br}=|XϜdM:&4E.8'UN{y'V)xEJ2) ˿wY^ZZ4܊LkL =p%sU+(ġ]]JI dam "(BB6WuR;}zy׶1U,,,V%.P\xeVk =ǵ[ .9䔈X6dPcu8"r1d,YDD0"e \QWGIl3\-b~F1;3{XBfT@NON:.4CTc>Νh70;67 ૥8N IK++KuGLzD$@D00W.#ǂ>vuij?3;;0B1O`nr$X,L7$bBI8xJmdXQL > \LjQ>v8d00D)^Gah<|ٮ-)T  DLgI $?b) =/ˏ| 9>rSS8|J::*] "ƒx{n~dp 0 |2_h>,| F`q*62Sx.-1H1X#A L%? /xs0DZw t1p~tڰLCySwG+-YPd;>դ 3H@ ` EuT: 䎞j#~kvoC"Ӱ:3R600x 2OGa/Z>yuo_{۶m]9 L䌡a1_C 4 vȮ@F~u*@qXYD:nM-~osх;t > um;׵nf&z466o끯w=>w繗=hjjD\YVbnusZaY,bԩ1m±j߉1uN̔*UPˆGv%˷o4}vW{*8NScDAZ׳6Xj({쉏+~0t~'4D1җ>/uwۻ-ͰR ,Z* YQ* 2ٮ몀AJ=4a)(\8N5*bxx::;@D8vr9/I bq>o};lV@J0 Wyo۶mN4fQ!CiАB6sk~^q.<:6Cò^wpogaYY"fۤ+qıc}ǟl?0 2ZYνmWg_qhjjB&`& Hq"aqP(03=E LwrM\׋_%@$mT˵|fK]\sFGƚ\ew8 zwrMz6E&aВ#QqQVQkm㍏OizzfRN\ juh,*1 ۶}GO~&jv\wg4we2UiXRHfVW 3 )w%='w]scCCåJ51ZRi+5v?',%)(VߚdJ t2q k晹 `7 {]RF"83SU"Ugz"l-#ˑfq\l&K6A`V-ޏX#,gTIr*9V33NL,2v eVQqhIՀBT^[bW-Ő޾']Q|!O&d3 @j:C?x0swπNUOQ$QٹQ&&)+LO06<(\)o3=YYK5FRlbk02l_5c6o̔kmꭐ P11XA@N5CZ{Ny}ljmNsB>/.jٔq[}SO_ΌmD2jA(" S)W820@amop*.ݲ]U³*?2щI8G($82>\Չv,Sake;6X(J&u,V&Sr}-~O;;;[J%~1 p=T{k"sc2xb >j_m囊<_!8:TB65zc F``L"kiZz!yYhP\mezO ŗ*g0Qqc}OW]}DO޳u]? ڦ*Yٹ~z?P﫸g{5:'})dCT@*iG>WM箕 qs)vl,.f2bFjMOɧ>s;{̫j}1c\Tc\)"Z*ˉAxj>>V[.Kķ4!DBeю. jIYH9,pt0ʾCv ug|n|,wz0/JT}Phe``1ܻ_ ]Ac䅉3&QY 켜әKl0<΄n]3u1#l1&T'qʉ<:+'ӗk|OѕQ{'uQLE2[I#RKvחf솕Eq݄ bDU5 <|ȳ@hfyHT<|gÑm\"~7-FP 077+ ꍯƿq*xG>+zW X^"5\eFOuo$]c%~fAe^m7?{ Uc\>G7nWͿ2l^,D{+Q9+L!.w5 VdK׋E5zG1X\\.']]z;/- 3 I_ЙQSǹmr y ('µ+{ gN""1t y9g-7_ՀT 233w]r5_!#7x//.0^*ky6*bul>']]]l߾) O߽zczAir]˯_68\@"Zn"'Mijx (Eb@LeC$γXS,t\s7kr[@;S$jo)CVvno7N`93M_$P R %^<,#IB(8: |iv2٬twweyRcXʀ [QܔJJ4ǃS9ݵ1^(*`&p/CӣE89ua( 1T%0o4X\V3`^pfdd,QT ]t3 2lZMƪq1IԖd|!a,'~ݰ:.3R,Y~6< (XU:U4G S[>M) *}5p^H!|ll c%JupMB,(Ц*o.|#qrgs#ێ8(桉jw:ZG>kc @h@0hsm,rjBuy;zl7Y׮עqHCSްa[ JW(E.>bj(ޜYyo]gSah=deC |MGΧ`%T;+uD g| ªT$4\z.%LL >vr`ɹz@PM*=ՐEL`gE~9˰so;wO6Qf#ϊK%ň7֢ V8a8\6fsjD$.l6ViA1a% 8x"[mC<xQ ?¥$u WwS;+DVivR !s9o;qhuupÇ8LfWQjO'y%c(5ڎ1 :ɑc8*%1UɪGW䅫t7am>?t{9Ty7EN|&JC6s9.uՠlbY&2-=J+iAG3?״@d-# ah4TՉTI06Hqg|Fr.&^F$sz>”iђb QVe~Ӑ_ש4-&'N(qlnﯟk4J.\zzRblẘ.$1g.X3-EuMƖ|,&n Rdq.߿1/8-M5_%Z*ql88z4e_ؐ{ll1F<?^T,PvAW9bΧn~oйz#6Z;hQ7GhZ3VoR@X̀jIN-FZEN«oc˺4 WBIJW*3Jo qm*4F1Fe2WrBNx5BP$f+ۨT*4'@>bzw:Ԉc Eὥ7:c$É{L/.0*T'?B9[)v."R"gxHT45hfbXj=a4dt563ڌԫPg{Z=tz v|i<<M|o(B2Yl;)ʥ %E.1岐ϫ&:*(]E˂`rRS|I@v ZUe~i(Ԗz8#ҨgGկ|{>RUUc2 .>qfct~(Y@lieE%ZuY/RRi|겸.H39J%h7/ڸfe2<|J'>E`(-f_3L|'q]G=ϥP(K3*MD!0&JCL$Aקg@l5Dz RԦH~ ÆT5N3tag)qCdff7|w_pΞ+ .ozn>of:P,H!_ :..4/똤O1]&oDn7J fgǎm(`cKm[IЭʴLOOC|1fKK%ٻɡ\TEy62D##cr۳6aaJ~ `,|"cB? 1#6"Z ʌTke''ر:#cry[4Jr9!::)a8⺎twwoڴꇾW2_8_9.`i~O{$^[Iujkْ(v*mڭ6ffIѠhhԨUK3==<9āpLLLJ.a★NqCZ^Kpj5<1IP+V[rGyl6cఒ:Ӷ]S?u[l|~_o/=s9r_D bԬ8aHզlRVunv8ann~d߾~ك|˧>r%tvvظ,3 #$9J>X,jZ?}\vl?^`}ڍk~˖\~s}'ϓe}s1Z%"v@٠VCq(W*S'w~" zZϳ@sYz3 #include "qtermglobal.h" #include "qterm.h" #include #include #include /* * Constructs a aboutDialog which is a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ namespace QTerm { aboutDialog::aboutDialog( QWidget* parent, Qt::WindowFlags fl ) : QDialog( parent, fl ) { QString pathLib = Global::instance()->pathLib(); ui.setupUi(this); // ui.TextBrowser->setSource(QUrl::fromLocalFile(pathLib+"credits")); QFile file(pathLib+"credits"); if ( file.open( QIODevice::ReadOnly ) ) { QTextStream stream( &file ); QString line; while ( !stream.atEnd() ) line += stream.readLine()+"\n"; // line of text excluding '\n' ui.TextBrowser->setPlainText(line); file.close(); } ui.TextLabel->setText("QTerm "+QString(QTERM_VERSION)+" (Qt "+QT_VERSION_STR+" based)"); //connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(accept())); restoreGeometry(Global::instance()->loadGeometry("About")); } /* * Destroys the object and frees any allocated resources */ aboutDialog::~aboutDialog() { // no need to delete child widgets, Qt does it all for us Global::instance()->saveGeometry("About",saveGeometry()); } } // namespace QTerm #include qterm-0.7.3/src/aboutdialog.h000066400000000000000000000013611332762052600161120ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'aboutqterm2.ui' ** ** Created: Fri Dec 20 19:01:36 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H //#include //#include "ui/ui_aboutdialog.h" #include "ui_aboutdialog.h" #include namespace QTerm { class aboutDialog : public QDialog { Q_OBJECT public: aboutDialog( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); ~aboutDialog(); private: Ui::aboutDialog ui; }; } // namespace QTerm #endif // ABOUTDIALOG_H qterm-0.7.3/src/addrdialog.cpp000066400000000000000000000641001332762052600162450ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'addrdialog.ui' ** ** Created: Sun Dec 15 20:55:21 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "addrdialog.h" #include "dommodel.h" #include "qtermparam.h" #include "qtermconfig.h" #include "qtermglobal.h" //Added by qt3to4: #include "schemedialog.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace QTerm { /* * Constructs a addrDialog which is a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ addrDialog::addrDialog(QWidget* parent, bool partial, Qt::WindowFlags fl) : QDialog(parent, fl), bPartial(partial), bgMenu(this) { ui.setupUi(this); updateComboBoxes(); QList codecList = QTextCodec::availableCodecs(); QByteArray codecName; foreach(codecName, codecList) { ui.bbscodeComboBox->addItem(QString::fromLatin1(codecName)); } updateSchemeList(); updateKeyboardProfiles(); int dpiX = qApp->desktop()->logicalDpiX(); int dpiY = qApp->desktop()->logicalDpiY(); if (dpiY < 150) resize(500,500); else resize(1000,1000); if (bPartial) { ui.nameTreeView->hide(); ui.connectPushButton->hide(); ui.closePushButton->setText(tr("Cancel")); ui.applyPushButton->setText(tr("OK")); ui.closePushButton->move(ui.closePushButton->x() - 210, ui.closePushButton->y()); ui.applyPushButton->move(ui.applyPushButton->x() - 110, ui.applyPushButton->y()); ui.resetPushButton->move(ui.resetPushButton->x() - 210, ui.resetPushButton->y()); ui.tabWidget->move(ui.tabWidget->x() - 210, ui.tabWidget->y()); setWindowTitle(tr("Setting")); restoreGeometry(Global::instance()->loadGeometry("Setting")); } else { setWindowTitle(tr("AddressBook")); QDomDocument doc = Global::instance()->addrXml(); domModel = new DomModel(doc); ui.nameTreeView->setModel(domModel); // load the default Global::instance()->loadAddress(doc, QUuid().toString(), param); updateData(false); ui.nameTreeView->setFocus(Qt::OtherFocusReason); restoreGeometry(Global::instance()->loadGeometry("AddressBook")); } connectSlots(); } /* * Destroys the object and frees any allocated resources */ addrDialog::~addrDialog() { if (bPartial) { Global::instance()->saveGeometry("Setting",saveGeometry()); } else { Global::instance()->saveGeometry("AddressBook",saveGeometry()); } } void addrDialog::updateComboBoxes() { ui.protocolComboBox->addItem(tr("Telnet")); ui.protocolComboBox->addItem(tr("SSH")); ui.hostTypeComboBox->addItem(tr("BBS")); ui.hostTypeComboBox->addItem(tr("*Nix")); ui.displaycodeComboBox->addItem(tr("No Conversion")); ui.displaycodeComboBox->addItem(tr("Simplified Chinese to Traditional Chinese")); ui.displaycodeComboBox->addItem(tr("Traditional Chinese to Simplified Chinese")); ui.cursorTypeComboBox->addItem(tr("Block")); ui.cursorTypeComboBox->addItem(tr("Underline")); ui.cursorTypeComboBox->addItem(tr("I Type")); ui.menuTypeComboBox->addItem(tr("Underline")); ui.menuTypeComboBox->addItem(tr("Reverse")); ui.menuTypeComboBox->addItem(tr("Custom Color")); ui.proxytypeComboBox->addItem(tr("None")); ui.proxytypeComboBox->addItem(tr("Wingate")); ui.proxytypeComboBox->addItem(tr("SOCKS4")); ui.proxytypeComboBox->addItem(tr("SOCKS5")); ui.proxytypeComboBox->addItem(tr("HTTP")); } QString addrDialog :: uuid() { return domModel->data(lastIndex, Qt::UserRole).toString(); } void addrDialog::updateSchemeList() { ui.schemeComboBox->clear(); schemeFileList = schemeDialog::loadSchemeList(); foreach (QString file, schemeFileList) { Config *pConf = new Config(file); ui.schemeComboBox->addItem(pConf->getItemValue("scheme", "title").toString()); delete pConf; } } void addrDialog::updateKeyboardProfiles() { QDir dir; QFileInfoList lstFile; dir.setNameFilters(QStringList("*.keytab")); #if !defined(_OS_WIN32_) && !defined(Q_OS_WIN32) dir.setPath(Global::instance()->pathCfg() + "/keyboard_profiles"); lstFile = dir.entryInfoList(); //if( lstFile.count()!=0 ) { foreach(QFileInfo fi, lstFile) { keyboardProfileList.append(fi.absoluteFilePath()); } } #endif dir.setPath(Global::instance()->pathLib() + "/keyboard_profiles"); lstFile = dir.entryInfoList(); //if(lstFile != NULL) { foreach(QFileInfo fi, lstFile) { keyboardProfileList.append(fi.absoluteFilePath()); } } foreach (QString file, keyboardProfileList) { QFileInfo fi(file); QString base = fi.baseName(); ui.keytypeComboBox->addItem(base); } } void addrDialog::onPopupTreeContextMenu(const QPoint& point) { QModelIndex index = ui.nameTreeView->indexAt(point); DomModel::ItemType type = domModel->type(index); DomModel::ItemType parentType = domModel->type(index.parent()); QMenu menu; QAction *actionFolder=0, *actionFavorite=0, *actionRemove=0, *actionSite; actionFolder = menu.addAction(tr("New Folder")); actionSite = menu.addAction(tr("New Site")); if (type != DomModel::Unknown) { actionRemove = menu.addAction(tr("Remove")); } if (type == DomModel::Site ) { actionFavorite = menu.addAction(tr("Add Favorite")); } if (type == DomModel::Favorite) { actionFavorite = menu.addAction(tr("Clear Favorite")); } QAction *actionActive = menu.exec(mapToGlobal(point),actionFolder); if (actionActive != 0) { if (actionActive == actionFolder) domModel->addFolder(index); else if (actionActive == actionFavorite) domModel->toggleFavorite(index); else if (actionActive == actionSite) domModel->addSite(index); else if (actionActive == actionRemove) domModel->removeItem(index); } } void addrDialog::onNamechange(const QModelIndex & index) { if (domModel->type(index) == DomModel::Folder) return; if (lastIndex.isValid() && isChanged()) { QMessageBox mb("QTerm", tr("Setting changed, do you want to save?"), QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape , 0, this, 0); if (mb.exec() == QMessageBox::Yes) { updateData(true); if (lastIndex.isValid()) { QString uuid = domModel->data(lastIndex,Qt::UserRole).toString(); if (!QUuid(uuid).isNull()) Global::instance()->saveAddress(domModel->document(), uuid, param); } } } lastIndex = index; QString uuid = domModel->data(index, Qt::UserRole).toString(); if (!uuid.isEmpty()) Global::instance()->loadAddress(domModel->document(), uuid, param); updateData(false); } void addrDialog::onApply() { updateData(true); if (!bPartial) { QString uuid = domModel->data(lastIndex,Qt::UserRole).toString(); if (!uuid.isEmpty()) Global::instance()->saveAddress(domModel->document(), uuid, param); Global::instance()->saveAddressXml(domModel->document()); } else done(1); } void addrDialog::onClose() { if (!bPartial) Global::instance()->saveAddressXml(domModel->document()); done(0); } void addrDialog::onConnect(const QModelIndex & index) { if (domModel->type(index) == DomModel::Folder) return; if (isChanged()) { QMessageBox mb("QTerm", tr("Setting changed, do you want to save?"), QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape , 0, this, 0); if (mb.exec() == QMessageBox::Yes) onApply(); } if (!bPartial) Global::instance()->saveAddressXml(domModel->document()); done(1); } void addrDialog::onReset() { updateData(false); } void addrDialog::onASCIIFont(const QFont & font) { strASCIIFontName = font.family(); } void addrDialog::onGeneralFont(const QFont & font) { strGeneralFontName = font.family(); } void addrDialog::onFontSize(int size) { nFontSize = size; } void addrDialog::onConfigScheme() { schemeDialog scheme(this); scheme.setScheme(strSchemeFile); if (scheme.exec() == 1) { updateSchemeList(); strSchemeFile = scheme.getScheme(); if (strSchemeFile.isEmpty()) strSchemeFile = ""; } ui.schemeComboBox->setCurrentIndex(schemeFileList.indexOf(strSchemeFile)); } void addrDialog::onScheme(int i) { if (i >=0 && i < schemeFileList.size()) strSchemeFile = schemeFileList[i]; } void addrDialog::onKeyboardProfile(int i) { if (i >= 0 && i < keyboardProfileList.size()) { strKeyboardProfile = keyboardProfileList[i]; } } void addrDialog::onProtocol(int n) { #ifndef SSH_ENABLED if (n == 1) { QMessageBox::warning(this, "QTerm", tr("SSH support is not compiled, check your OpenSSL and try to recompile QTerm")); ui.protocolComboBox->setCurrentIndex(0); ui.tabWidget->setTabEnabled(5,false); } #endif ui.portSpinBox->setValue(23 - n); if (n == 0) { ui.tabWidget->setTabEnabled(5,false); } else { ui.tabWidget->setTabEnabled(5,true); } } void addrDialog::onChooseScript() { QString path; #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) path = Global::instance()->pathLib() + "scripts"; #else path = Global::instance()->pathCfg() + "scripts"; #endif QString strFile = QFileDialog::getOpenFileName( this, tr("Choose a script file"), path, "Script Files (*.js)"); if (strFile.isNull()) return; QFileInfo file(strFile); ui.scriptLineEdit->setText(file.absoluteFilePath()); } void addrDialog::onChoosePrivateKeyFile() { QString path; QString strFile = QFileDialog::getOpenFileName( this, tr("Choose private key file"), path); if (strFile.isNull()) return; QFileInfo file(strFile); ui.sshPrivateKeyFileLineEdit->setText(file.absoluteFilePath()); } void addrDialog::onMenuColor() { QColor color = QColorDialog::getColor(clrMenu); if (color.isValid()) { clrMenu = color; } } void addrDialog::connectSlots() { connect(ui.nameTreeView, SIGNAL(clicked(QModelIndex)), this, SLOT(onNamechange(QModelIndex))); connect(ui.nameTreeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onConnect(QModelIndex))); connect(ui.nameTreeView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onPopupTreeContextMenu(QPoint))); connect(ui.applyPushButton, SIGNAL(clicked()), this, SLOT(onApply())); connect(ui.closePushButton, SIGNAL(clicked()), this, SLOT(onClose())); connect(ui.connectPushButton, SIGNAL(clicked()), this, SLOT(onConnect())); connect(ui.resetPushButton, SIGNAL(clicked()), this, SLOT(onReset())); connect(ui.schemePushButton, SIGNAL(clicked()), this, SLOT(onConfigScheme())); connect(ui.protocolComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onProtocol(int))); connect(ui.scriptPushButton, SIGNAL(clicked()), this, SLOT(onChooseScript())); connect(ui.sshPrivateKeyFilePushButton, SIGNAL(clicked()), this, SLOT(onChoosePrivateKeyFile())); connect(ui.menuColorButton, SIGNAL(clicked()), this, SLOT(onMenuColor())); connect(ui.asciiFontComboBox, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(onASCIIFont(const QFont &))); connect(ui.generalFontComboBox, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(onGeneralFont(const QFont &))); connect(ui.fontSizeSpinBox, SIGNAL(valueChanged(int)), this, SLOT(onFontSize(int))); connect(ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onScheme(int))); connect(ui.keytypeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onKeyboardProfile(int))); } bool addrDialog::isChanged() { return(param.m_mapParam["name"].toString() != ui.nameLineEdit->text() || param.m_mapParam["addr"].toString() != ui.addrLineEdit->text() || param.m_mapParam["port"].toInt() != ui.portSpinBox->value() || param.m_mapParam["hosttype"].toInt() != ui.hostTypeComboBox->currentIndex() || param.m_mapParam["autologin"].toBool() != ui.autoLoginCheckBox->isChecked() || param.m_mapParam["prelogin"].toString() != ui.preloginLineEdit->text() || param.m_mapParam["user"].toString() != ui.userLineEdit->text() || param.m_mapParam["password"].toString() != ui.passwdLineEdit->text() || param.m_mapParam["postlogin"].toString() != ui.postloginLineEdit->text() || param.m_mapParam["bbscode"].toString() != ui.bbscodeComboBox->currentText() || param.m_mapParam["displaycode"].toInt() != ui.displaycodeComboBox->currentIndex() || param.m_mapParam["autofont"].toBool() != ui.autofontCheckBox->isChecked() || param.m_mapParam["alwayshighlight"].toBool() != ui.highlightCheckBox->isChecked() || param.m_mapParam["ansicolor"].toBool() != ui.ansicolorCheckBox->isChecked() || param.m_mapParam["asciifont"].toString() != strASCIIFontName || param.m_mapParam["generalfont"].toString() != strGeneralFontName|| param.m_mapParam["fontsize"].toInt() != nFontSize || param.m_mapParam["schemefile"].toString() != strSchemeFile || param.m_mapParam["keyboardprofile"].toString() != strKeyboardProfile|| param.m_mapParam["termtype"].toString() != ui.termtypeLineEdit->text() || param.m_mapParam["column"].toInt() != ui.columnSpinBox->value() || param.m_mapParam["row"].toInt() != ui.rowSpinBox->value() || param.m_mapParam["scroll"].toInt() != ui.scrollSpinBox->value() || param.m_mapParam["cursor"].toInt() != ui.cursorTypeComboBox->currentIndex() || param.m_mapParam["escape"].toString() != ui.escapeLineEdit->text() || param.m_mapParam["proxytype"].toInt() != ui.proxytypeComboBox->currentIndex() || param.m_mapParam["proxyaddr"].toString() != ui.proxyaddrLineEdit->text() || param.m_mapParam["proxyport"].toInt() != ui.proxyportSpinBox->value() || param.m_mapParam["proxyauth"].toBool() != ui.authCheckBox->isChecked() || param.m_mapParam["proxyuser"].toString() != ui.proxyuserLineEdit->text() || param.m_mapParam["proxypassword"].toString() != ui.proxypasswdLineEdit->text() || param.m_mapParam["protocol"].toInt() != ui.protocolComboBox->currentIndex() || param.m_mapParam["maxidle"].toInt() != ui.idletimeLineEdit->text().toInt() || param.m_mapParam["antiidlestring"].toString() != ui.antiLineEdit->text() || param.m_mapParam["replykey"].toString() != ui.replykeyLineEdit->text() || param.m_mapParam["autoreply"].toString() != ui.replyLineEdit->text() || param.m_mapParam["bautoreply"].toBool() != ui.replyCheckBox->isChecked() || param.m_mapParam["reconnect"].toBool() != ui.reconnectCheckBox->isChecked() || param.m_mapParam["interval"].toInt() != ui.reconnectLineEdit->text().toInt() || // param.m_mapParam["retrytimes"].toInt() != ui.retryLineEdit->text().toInt() || param.m_mapParam["loadscript"].toBool() != ui.scriptCheckBox->isChecked() || param.m_mapParam["scriptfile"].toString() != ui.scriptLineEdit->text() || param.m_mapParam["menutype"].toInt() != ui.menuTypeComboBox->currentIndex() || param.m_mapParam["menucolor"] != clrMenu) || param.m_mapParam["sshuser"].toString() != ui.sshUserLineEdit->text() || param.m_mapParam["sshpass"].toString() != ui.sshPassLineEdit->text() || param.m_mapParam["sshprivatekeyfile"].toString() != ui.sshPrivateKeyFileLineEdit->text() || param.m_mapParam["sshpassphrase"].toString() != ui.sshPassphraseLineEdit->text() || param.m_mapParam["sshhostkey"].toString() != ui.sshHostKeyPlainTextEdit->toPlainText(); } void addrDialog::updateData(bool save) { if (save) { // from display to param param.m_mapParam["name"] = ui.nameLineEdit->text(); param.m_mapParam["addr"] = ui.addrLineEdit->text(); param.m_mapParam["port"] = ui.portSpinBox->value(); param.m_mapParam["hosttype"] = ui.hostTypeComboBox->currentIndex(); param.m_mapParam["autologin"] = ui.autoLoginCheckBox->isChecked(); param.m_mapParam["prelogin"] = ui.preloginLineEdit->text(); param.m_mapParam["user"] = ui.userLineEdit->text(); param.m_mapParam["password"] = ui.passwdLineEdit->text(); param.m_mapParam["postlogin"] = ui.postloginLineEdit->text(); param.m_mapParam["bbscode"] = ui.bbscodeComboBox->currentText(); param.m_mapParam["displaycode"] = ui.displaycodeComboBox->currentIndex(); param.m_mapParam["autofont"] = ui.autofontCheckBox->isChecked(); param.m_mapParam["alwayshighlight"] = ui.highlightCheckBox->isChecked(); param.m_mapParam["ansicolor"] = ui.ansicolorCheckBox->isChecked(); param.m_mapParam["asciifont"] = strASCIIFontName; param.m_mapParam["generalfont"] = strGeneralFontName; param.m_mapParam["fontsize"] = nFontSize; param.m_mapParam["schemefile"] = strSchemeFile; param.m_mapParam["opacity"] = ui.opacityHorizontalSlider->value(); param.m_mapParam["blinkcursor"] = ui.blinkCursorCheckBox->isChecked(); param.m_mapParam["keyboardprofile"] = strKeyboardProfile; param.m_mapParam["termtype"] = ui.termtypeLineEdit->text(); param.m_mapParam["column"] = ui.columnSpinBox->value(); param.m_mapParam["row"] = ui.rowSpinBox->value(); param.m_mapParam["scroll"] = ui.scrollSpinBox->value(); param.m_mapParam["cursor"] = ui.cursorTypeComboBox->currentIndex(); param.m_mapParam["escape"] = ui.escapeLineEdit->text(); param.m_mapParam["proxytype"] = ui.proxytypeComboBox->currentIndex(); param.m_mapParam["proxyaddr"] = ui.proxyaddrLineEdit->text(); param.m_mapParam["proxyport"] = ui.proxyportSpinBox->value(); param.m_mapParam["proxyauth"] = ui.authCheckBox->isChecked(); param.m_mapParam["proxyuser"] = ui.proxyuserLineEdit->text(); param.m_mapParam["proxypassword"] = ui.proxypasswdLineEdit->text(); param.m_mapParam["protocol"] = ui.protocolComboBox->currentIndex(); param.m_mapParam["maxidle"] = ui.idletimeLineEdit->text().toInt(); param.m_mapParam["replykey"] = ui.replykeyLineEdit->text(); if (param.m_mapParam["replykey"].toString().isNull()) qDebug("saving null"); param.m_mapParam["antiidlestring"] = ui.antiLineEdit->text(); param.m_mapParam["bautoreply"] = ui.replyCheckBox->isChecked(); param.m_mapParam["autoreply"] = ui.replyLineEdit->text(); param.m_mapParam["reconnect"] = ui.reconnectCheckBox->isChecked(); param.m_mapParam["interval"] = ui.reconnectLineEdit->text().toInt(); // param.m_mapParam["retrytimes"] = ui.retryLineEdit->text().toInt(); param.m_mapParam["loadscript"] = ui.scriptCheckBox->isChecked(); param.m_mapParam["scriptfile"] = ui.scriptLineEdit->text(); param.m_mapParam["menutype"] = ui.menuTypeComboBox->currentIndex(); param.m_mapParam["menucolor"] = clrMenu; param.m_mapParam["sshuser"] = ui.sshUserLineEdit->text(); param.m_mapParam["sshpass"] = ui.sshPassLineEdit->text(); param.m_mapParam["sshprivatekeyfile"] = ui.sshPrivateKeyFileLineEdit->text(); param.m_mapParam["sshpassphrase"] = ui.sshPassphraseLineEdit->text(); param.m_mapParam["sshhostkey"] = ui.sshHostKeyPlainTextEdit->toPlainText(); } else { // from param to display disconnect(ui.protocolComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onProtocol(int))); ui.tabWidget->setTabEnabled(5,false); QString strTmp; ui.nameLineEdit->setText(param.m_mapParam["name"].toString()); ui.addrLineEdit->setText(param.m_mapParam["addr"].toString()); ui.portSpinBox->setValue(param.m_mapParam["port"].toInt()); ui.hostTypeComboBox->setCurrentIndex(param.m_mapParam["hosttype"].toInt()); ui.autoLoginCheckBox->setChecked(param.m_mapParam["autologin"].toBool()); ui.preloginLineEdit->setEnabled(param.m_mapParam["autologin"].toBool()); ui.userLineEdit->setEnabled(param.m_mapParam["autologin"].toBool()); ui.passwdLineEdit->setEnabled(param.m_mapParam["autologin"].toBool()); ui.postloginLineEdit->setEnabled(param.m_mapParam["autologin"].toBool()); ui.preloginLineEdit->setText(param.m_mapParam["prelogin"].toString()); ui.userLineEdit->setText(param.m_mapParam["user"].toString()); ui.passwdLineEdit->setText(param.m_mapParam["password"].toString()); ui.postloginLineEdit->setText(param.m_mapParam["postlogin"].toString()); ui.bbscodeComboBox->setCurrentIndex(ui.bbscodeComboBox->findText(param.m_mapParam["bbscode"].toString())); ui.displaycodeComboBox->setCurrentIndex(param.m_mapParam["displaycode"].toInt()); ui.autofontCheckBox->setChecked(param.m_mapParam["autofont"].toBool()); ui.highlightCheckBox->setChecked(param.m_mapParam["alwayshighlight"].toBool()); ui.ansicolorCheckBox->setChecked(param.m_mapParam["ansicolor"].toBool()); // We take whatever the matched font name strASCIIFontName = param.m_mapParam["asciifont"].toString(); ui.asciiFontComboBox->setCurrentFont(QFont(strASCIIFontName)); param.m_mapParam["asciifont"] = strASCIIFontName; strGeneralFontName = param.m_mapParam["generalfont"].toString(); ui.generalFontComboBox->setCurrentFont(QFont(strGeneralFontName)); param.m_mapParam["generalfont"] = strGeneralFontName; nFontSize = param.m_mapParam["fontsize"].toInt(); ui.fontSizeSpinBox->setValue(nFontSize); strSchemeFile = param.m_mapParam["schemefile"].toString(); ui.schemeComboBox->setCurrentIndex(schemeFileList.indexOf(strSchemeFile)); ui.opacityHorizontalSlider->setValue(param.m_mapParam["opacity"].toInt()); ui.blinkCursorCheckBox->setChecked(param.m_mapParam["blinkcursor"].toBool()); strKeyboardProfile = param.m_mapParam["keyboardprofile"].toString(); ui.keytypeComboBox->setCurrentIndex(keyboardProfileList.indexOf(strKeyboardProfile)); ui.termtypeLineEdit->setText(param.m_mapParam["termtype"].toString()); ui.columnSpinBox->setValue(param.m_mapParam["column"].toInt()); ui.rowSpinBox->setValue(param.m_mapParam["row"].toInt()); ui.scrollSpinBox->setValue(param.m_mapParam["scroll"].toInt()); ui.cursorTypeComboBox->setCurrentIndex(param.m_mapParam["cursor"].toInt()); ui.escapeLineEdit->setText(param.m_mapParam["escape"].toString()); ui.proxytypeComboBox->setCurrentIndex(param.m_mapParam["proxytype"].toInt()); ui.proxyaddrLineEdit->setText(param.m_mapParam["proxyaddr"].toString()); ui.proxyportSpinBox->setValue(param.m_mapParam["proxyport"].toInt()); ui.authCheckBox->setChecked(param.m_mapParam["proxyauth"].toBool()); ui.proxyuserLineEdit->setEnabled(param.m_mapParam["proxyauth"].toBool()); ui.proxypasswdLineEdit->setEnabled(param.m_mapParam["proxyauth"].toBool()); ui.proxyuserLineEdit->setText(param.m_mapParam["proxyuser"].toString()); ui.proxypasswdLineEdit->setText(param.m_mapParam["proxypassword"].toString()); ui.protocolComboBox->setCurrentIndex(param.m_mapParam["protocol"].toInt()); if (param.m_mapParam["protocol"].toInt() == 1) { ui.tabWidget->setTabEnabled(5,true); } ui.idletimeLineEdit->setText(param.m_mapParam["maxidle"].toString()); ui.replykeyLineEdit->setText(param.m_mapParam["replykey"].toString()); ui.antiLineEdit->setText(param.m_mapParam["antiidlestring"].toString()); ui.replyCheckBox->setChecked(param.m_mapParam["bautoreply"].toBool()); ui.replyLineEdit->setEnabled(param.m_mapParam["bautoreply"].toBool()); ui.replyLineEdit->setText(param.m_mapParam["autoreply"].toString()); ui.reconnectCheckBox->setChecked(param.m_mapParam["reconnect"].toBool()); ui.reconnectLineEdit->setEnabled(param.m_mapParam["reconnect"].toBool()); // ui.retryLineEdit->setEnabled(param.m_mapParam["reconnect"].toBool()); ui.reconnectLineEdit->setText(param.m_mapParam["interval"].toString()); // ui.retryLineEdit->setText(param.m_mapParam["retrytimes"].toString()); ui.scriptCheckBox->setChecked(param.m_mapParam["loadscript"].toBool()); ui.scriptLineEdit->setEnabled(param.m_mapParam["loadscript"].toBool()); ui.scriptPushButton->setEnabled(param.m_mapParam["loadscript"].toBool()); ui.scriptLineEdit->setText(param.m_mapParam["scriptfile"].toString()); ui.menuTypeComboBox->setCurrentIndex(param.m_mapParam["menutype"].toInt()); //ui.menuGroup->setButton(param.m_nMenuType); //QRadioButton * rbMenu = qobject_cast(bgMenu.button(param.m_nMenuType)); //rbMenu->setChecked(true); clrMenu = param.m_mapParam["menucolor"].toString(); ui.sshUserLineEdit->setText(param.m_mapParam["sshuser"].toString()); ui.sshPassLineEdit->setText(param.m_mapParam["sshpass"].toString()); ui.sshPrivateKeyFileLineEdit->setText(param.m_mapParam["sshprivatekeyfile"].toString()); ui.sshPassphraseLineEdit->setText(param.m_mapParam["sshpassphrase"].toString()); ui.sshHostKeyPlainTextEdit->setPlainText(param.m_mapParam["sshhostkey"].toString()); connect(ui.protocolComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onProtocol(int))); } } } // namespace QTerm #include qterm-0.7.3/src/addrdialog.h000066400000000000000000000036001332762052600157100ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'addrdialog.ui' ** ** Created: Sun Dec 15 20:55:11 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef ADDRDIALOG_H #define ADDRDIALOG_H #include "qtermparam.h" #include "ui_addrdialog.h" #include namespace QTerm { class Config; class DomModel; class addrDialog : public QDialog { Q_OBJECT public: addrDialog(QWidget* parent = 0, bool partial = false, Qt::WindowFlags fl = 0); ~addrDialog(); Param param; void updateData(bool save); QString uuid(); protected slots: void onNamechange(const QModelIndex & index); void onApply(); void onConnect(const QModelIndex & index = QModelIndex()); void onClose(); void onReset(); void onConfigScheme(); void onScheme(int); void onKeyboardProfile(int); void onProtocol(int); void onChooseScript(); void onChoosePrivateKeyFile(); void onMenuColor(); void onASCIIFont(const QFont & font); void onGeneralFont(const QFont & font); void onFontSize(int size); void onPopupTreeContextMenu(const QPoint& point); protected: void connectSlots(); bool isChanged(); void setLabelPixmap(); void setMenuPixmap(); void updateSchemeList(); void updateComboBoxes(); void updateKeyboardProfiles(); bool bPartial; QString strASCIIFontName; QString strGeneralFontName; int nFontSize; QString strSchemeFile; QString strKeyboardProfile; QColor clrMenu; QButtonGroup bgMenu; QStringList schemeFileList; QStringList keyboardProfileList; QModelIndex lastIndex; DomModel *domModel; public: Ui::addrDialog ui; }; } // namespace QTerm #endif // ADDRDIALOG_H qterm-0.7.3/src/address.cfg000066400000000000000000000035031332762052600155550ustar00rootroot00000000000000[General] version=1.10 [bbs%20list] num=2 [bbs%200] name=NEWSMTH addr=bbs.newsmth.org port=23 hosttype=0 autologin=0 prelogin= user= password= postlogin= bbscode=GBK displaycode=0 autofont=1 alwayshighlight=0 ansicolor=1 asciifont=Monospace generalfont=Monospace fontsize=14 termtype=vt102 keytype=0 column=80 row=24 scroll=240 cursor=0 escape=^[^[[ proxytype=0 proxyauth=0 proxyaddr= proxyport=0 proxyuser= proxypassword= protocol=0 sshuser= sshpassword= maxidle=180 antiidlestring=^@ bautoreply=1 autoreply="(QTerm) Sorry, I am not around" reconnect=0 interval=2 retrytimes=-1 loadscript=1 scriptfile=smth.js menutype=2 menucolor=#004184 schemefile= replykey= [bbs%201] name=Unknown Space addr=mitbbs.com port=23 hosttype=0 autologin=0 prelogin= user= password= postlogin= bbscode=GBK displaycode=0 autofont=1 alwayshighlight=0 ansicolor=1 asciifont=Monospace generalfont=Monospace fontsize=14 termtype=vt102 keytype=0 column=80 row=24 scroll=240 cursor=0 escape=^[^[[ proxytype=0 proxyauth=0 proxyaddr= proxyport=0 proxyuser= proxypassword= protocol=0 sshuser= sshpassword= maxidle=180 antiidlestring=^@ bautoreply=1 autoreply="(QTerm) Sorry, I am not around" reconnect=0 interval=2 retrytimes=-1 loadscript=0 scriptfile= menutype=2 menucolor=#004084 schemefile= replykey= [default] name=SMTH addr=smth.org port=23 hosttype=0 autologin=0 prelogin= user= password= postlogin= bbscode=0 displaycode=0 autofont=1 alwayshighlight=0 ansicolor=1 asciifont=Monospace generalfont=Monospace fontsize=14 termtype=vt102 keytype=0 column=80 row=24 scroll=240 cursor=0 escape=^[^[[ proxytype=0 proxyauth=0 proxyaddr= proxyport=0 proxyuser= proxypassword= protocol=0 sshuser= sshpassword= maxidle=180 antiidlestring=^@ bautoreply=1 autoreply="(QTerm) Sorry, I am not around" reconnect=0 interval=2 retrytimes=-1 loadscript=0 scriptfile= menutype=2 menucolor=#004184 qterm-0.7.3/src/address.xml000066400000000000000000001245671332762052600156340ustar00rootroot00000000000000 qterm-0.7.3/src/articledialog.cpp000066400000000000000000000034201332762052600167540ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'articledialog.ui' ** ** Created: Sun Jan 5 19:46:42 2003 ** by: The User Interface Compiler ($Id$) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "articledialog.h" #include "qtermglobal.h" #include #include namespace QTerm { /* * Constructs a articleDialog as a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ articleDialog::articleDialog(QWidget* parent, Qt::WindowFlags fl) : QDialog(parent, fl) { ui.setupUi(this); connect(ui.saveButton, SIGNAL(clicked()), this, SLOT(onSave())); restoreGeometry(Global::instance()->loadGeometry("Article")); } /* * Destroys the object and frees any allocated resources */ articleDialog::~articleDialog() { // no need to delete child widgets, Qt does it all for us Global::instance()->saveGeometry("Article",saveGeometry()); } void articleDialog::onSave() { QFileDialog fileDlg; QString filename = fileDlg.getSaveFileName(); if (!filename.isNull()) { QFile f(filename); if ((f.open(QIODevice::WriteOnly))) { f.write(strArticle.toLocal8Bit()); f.close(); } else { QMessageBox mb("Access file error:", filename, QMessageBox::Warning, 0, 0, 0, this, 0); mb.exec(); } } } } // namespace QTerm #include qterm-0.7.3/src/articledialog.h000066400000000000000000000013611332762052600164230ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'articledialog.ui' ** ** Created: Sun Jan 5 19:46:28 2003 ** by: The User Interface Compiler ($Id$) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef ARTICLEDIALOG_H #define ARTICLEDIALOG_H #include "ui_articledialog.h" namespace QTerm { class articleDialog : public QDialog { Q_OBJECT public: articleDialog(QWidget* parent = 0, Qt::WindowFlags fl = 0); ~articleDialog(); QString strArticle; Ui::articleDialog ui; protected slots: void onSave(); }; } // namespace QTerm #endif // ARTICLEDIALOG_H qterm-0.7.3/src/assistantclient.cpp000066400000000000000000000120671332762052600173700ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "assistantclient.h" #include "qtermglobal.h" #include #include #include #include #include #include #include #include #include namespace QTerm { enum { debugAssistantClient = 0 }; AssistantClient::AssistantClient() : m_process(0) { } AssistantClient::~AssistantClient() { if (isRunning()) { m_process->terminate(); m_process->waitForFinished(); } delete m_process; } bool AssistantClient::showPage(const QString &path, QString *errorMessage) { QString cmd = QLatin1String("SetSource "); cmd += path; return sendCommand(cmd, errorMessage); } bool AssistantClient::activateIdentifier(const QString &identifier, QString *errorMessage) { QString cmd = QLatin1String("ActivateIdentifier "); cmd += identifier; return sendCommand(cmd, errorMessage); } bool AssistantClient::activateKeyword(const QString &keyword, QString *errorMessage) { QString cmd = QLatin1String("ActivateKeyword "); cmd += keyword; return sendCommand(cmd, errorMessage); } bool AssistantClient::sendCommand(const QString &cmd, QString *errorMessage) { if (debugAssistantClient) qDebug() << "sendCommand " << cmd; if (!ensureRunning(errorMessage)) return false; if (!m_process->isWritable() || m_process->bytesToWrite() > 0) { *errorMessage = QCoreApplication::translate("AssistantClient", "Unable to send request: Assistant is not responding."); return false; } QTextStream str(m_process); str << cmd << QLatin1Char('\0') << endl; return true; } bool AssistantClient::isRunning() const { return m_process && m_process->state() != QProcess::NotRunning; } QString AssistantClient::binary() { QString app = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator(); #if !defined(Q_OS_MAC) app += QLatin1String("assistant"); #else app += QLatin1String("Assistant.app/Contents/MacOS/Assistant"); #endif #if defined(Q_OS_WIN) app += QLatin1String(".exe"); #endif return app; } bool AssistantClient::ensureRunning(QString *errorMessage) { if (isRunning()) return true; if (!m_process) m_process = new QProcess; const QString app = binary(); if (!QFileInfo(app).isFile()) { *errorMessage = QCoreApplication::translate("AssistantClient", "The binary '%1' does not exist.").arg(app); return false; } if (debugAssistantClient) qDebug() << "Running " << app; // run QStringList args; args << QLatin1String("-enableRemoteControl") << QLatin1String("-collectionFile") << Global::instance()->pathLib() + QDir::separator() + "doc/qterm.qhc"; m_process->start(app, args); if (!m_process->waitForStarted()) { *errorMessage = QCoreApplication::translate("AssistantClient", "Unable to launch assistant (%1).").arg(app); return false; } return true; } } qterm-0.7.3/src/assistantclient.h000066400000000000000000000053661332762052600170410ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef ASSISTANTCLIENT_H #define ASSISTANTCLIENT_H #include class QProcess; class QString; namespace QTerm { class AssistantClient { AssistantClient(const AssistantClient &); AssistantClient &operator=(const AssistantClient &); public: AssistantClient(); ~AssistantClient(); bool showPage(const QString &path, QString *errorMessage); bool activateIdentifier(const QString &identifier, QString *errorMessage); bool activateKeyword(const QString &keyword, QString *errorMessage); bool isRunning() const; private: static QString binary(); bool sendCommand(const QString &cmd, QString *errorMessage); bool ensureRunning(QString *errorMessage); QProcess *m_process; }; } // namespace QTerm #endif // ASSISTANTCLIENT_H qterm-0.7.3/src/blur.cpp000066400000000000000000000034501332762052600151200ustar00rootroot00000000000000/* Shamelessly copied from the patch for konsole at: https://bugs.kde.org/show_bug.cgi?id=198175 with some obvious modifications for QTerm This file is part of Konsole, a terminal emulator for KDE. Copyright 2010 Hugo Pereira Da Costa 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. */ #include "blur.h" #include #ifdef Q_WS_X11 #include #include #include #endif namespace QTerm { //_________________________________________________________________________ void BlurHelper::updateBlurRegion( const QWidget* widget, const QRegion& region ) const { #ifdef Q_WS_X11 // Atom static Atom atom = XInternAtom( QX11Info::display(), "_KDE_NET_WM_BLUR_BEHIND_REGION", False); QVector data; foreach( const QRect& rect, region.rects() ) { data << rect.x() << rect.y() << rect.width() << rect.height(); } XChangeProperty( QX11Info::display(), widget->window()->winId(), atom, XA_CARDINAL, 32, PropModeReplace, reinterpret_cast(data.constData()), data.size() ); #endif } } qterm-0.7.3/src/blur.h000066400000000000000000000024531332762052600145670ustar00rootroot00000000000000#ifndef BlurHelper_h #define BlurHelper_h /* Shamelessly copied from the patch for konsole at: https://bugs.kde.org/show_bug.cgi?id=198175 with some obvious modifications for QTerm This file is part of Konsole, a terminal emulator for KDE. Copyright 2010 Hugo Pereira Da Costa 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. */ #include class QWidget; namespace QTerm { class BlurHelper { public: //! constructor explicit BlurHelper( void ) {} //! update blur region void updateBlurRegion( const QWidget*, const QRegion& ) const; }; } #endif qterm-0.7.3/src/charpane.cpp000066400000000000000000000077651332762052600157520ustar00rootroot00000000000000#include "charpane.h" #include "chartable.h" #include #include #include #include namespace QTerm { Header::Header(const QString &title, QWidget *parent) : QFrame(parent), m_bOpen(true) { setFrameShape(QFrame::StyledPanel); setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); QHBoxLayout *layout = new QHBoxLayout(); layout->setContentsMargins(0,0,0,0); QLabel *label = new QLabel(title); layout->addWidget(label); layout->addSpacing(1); m_buttonOpen = new QToolButton(); m_buttonOpen->setArrowType(Qt::UpArrow); layout->addWidget(m_buttonOpen); setLayout(layout); connect(m_buttonOpen, SIGNAL(clicked()), SLOT(toggleOpen())); } void Header::toggleOpen() { m_bOpen = !m_bOpen; if (m_bOpen) m_buttonOpen->setArrowType(Qt::UpArrow); else m_buttonOpen->setArrowType(Qt::DownArrow); emit toggled(m_bOpen); } CharPane::CharPane(QWidget *parent) : QWidget(parent) { m_layoutVBox = new QVBoxLayout(); m_layoutVBox->setContentsMargins(0,0,0,0); m_layoutVBox->addStretch(); setLayout(m_layoutVBox); mapSymbol["Number"] = QString::fromUtf8( "⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑" "⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛" "①②③④⑤⑥⑦⑧⑨⑩" "⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽" "㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩" "ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ" "ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ"); mapSymbol["Arrow"] = QString::fromUtf8( "↖↗↘↙→←↑↓"); mapSymbol["Mathematic"] = QString::fromUtf8( "+-×÷±∵∴∈≡∝" "∑∏∪∩∫∮∶∧∨∷" "≌≈∽≠≮≯≤≥∞∠"); mapSymbol["Table"] = QString::fromUtf8( "─━│┃┄┅┆┇┈┉┊┋" "┗┛┏┓└┘┌┐┕┙┍┑┖┚┎┒" "┣┫┠┨┝┥├┤┡┩┢┪┟┧┞┦┴┬┶┭┹┮┷┯┳┻" "┵┲┸┰┺┱┾┽┿┼" "╀╁╂╃╄╅╆╇╈╉╊╋" "═║╚╝╙╜╘╛╔╗╓╖╒╕╠╣╟╢╞╡" "╩╦╧╤╨╥╬╪╫" "╭╮╰╯╱╲╳" "▁▂▃▄▅▆▇█▉▊▋▌▍▎▏" "▐░▒▓▔▕"); mapSymbol["CJK"] = QString::fromUtf8( "〔〕()〈〉《》「」" "『』〖〗【】[]{}" "︵︶︹︺︿﹀︽︾﹁﹂" "﹃﹄︻︼︷︸‘’“”"); mapSymbol["Letter"] = QString::fromUtf8( "ΑΒΓΔΕΖΗΘΙΚ" "ΛΜΝΞΟΠΡΣΤΥ" "ΦΧΨΩαβγδεζ" "ηθικλμνξοπ" "ρστυφχψω"); mapSymbol["Symbol"] = QString::fromUtf8( "℡㎎㎏㎜㎝㎞㎡㏄〾⿰⿱" "⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻" "※√▼▽◢◣◥◤" "♂♀☉⊕〇◎〓℉℃㊣" "☆★◇◆□■△▲○●"); listSymbolName << "Table" << "Number" << "CJK" << "Letter" << "Symbol" << "Arrow" << "Mathematic"; foreach(QString symbolName, listSymbolName) { addSubPane(new CharTable(mapSymbol[symbolName]), symbolName); } } CharPane::~CharPane() { } void CharPane::addSubPane(QWidget *child, const QString &title) { Header *header = new Header(title,this); m_layoutVBox->addWidget(header); m_layoutVBox->addWidget(child); connect(header, SIGNAL(toggled(bool)), child, SLOT(setVisible(bool))); connect(child, SIGNAL(characterSelected(QString)), SLOT(characterSelected(QString))); } void CharPane::characterSelected(QString ch) { emit characterSelectedSignal(ch); } } #include "moc_charpane.cpp" qterm-0.7.3/src/charpane.h000066400000000000000000000016141332762052600154020ustar00rootroot00000000000000#ifndef CHARPANE_H #define CHARPANE_H #include #include #include #include class QToolButton; class QVBoxLayout; namespace QTerm { class Header : public QFrame { Q_OBJECT public: Header(const QString &title, QWidget *parent = 0); signals: void toggled(bool open); public slots: void toggleOpen(); private: QToolButton *m_buttonOpen; bool m_bOpen; }; class CharPane : public QWidget { Q_OBJECT public: CharPane(QWidget *parent = 0); ~CharPane(); void addSubPane(QWidget *child, const QString &title); protected slots: void characterSelected(QString ch); signals: void characterSelectedSignal(QString ch); private: QVBoxLayout *m_layoutVBox; QMap mapSymbol; QList listSymbolName; }; } #endif // CHARPANE_H qterm-0.7.3/src/chartable.cpp000066400000000000000000000052551332762052600161060ustar00rootroot00000000000000#include "chartable.h" #include #include #include #include #include namespace QTerm { CharTable :: CharTable(QString symbolStr, QWidget *parent) : QWidget(parent) { setMouseTracking(true); maxColumn = 10; square = 25; symbols = symbolStr; } void CharTable ::resizeEvent(QResizeEvent *re) { maxColumn = re->size().width()/square; setMinimumHeight((symbols.length()/maxColumn + 1)*square); } QSize CharTable :: sizeHint() const { int x = maxColumn*square; int y = (symbols.length()/maxColumn + 1)*square; return QSize(x, y); } void CharTable :: mouseMoveEvent(QMouseEvent *me) { int column = me->x()/square; int row = me->y()/square; if (hovered == QPoint(column, row)) return; QRect oldRect(hovered.x()*square, hovered.y()*square, square, square); hovered.setX(column); hovered.setY(row); QRect newRect(hovered.x()*square, hovered.y()*square, square, square); update(oldRect.united(newRect)); } void CharTable :: mouseReleaseEvent(QMouseEvent *me) { if (me->button() == Qt::LeftButton) { int n = (me->y()/square)*maxColumn + me->x()/square; if (nrect(), QBrush(Qt::white)); QRect redrawRect = pe->rect(); int beginRow = redrawRect.top()/square; int endRow = redrawRect.bottom()/square; int beginColumn = redrawRect.left()/square; int endColumn = redrawRect.right()/square; QFont font("SimSun",20); for (int row = beginRow; row <= endRow; ++row) { for (int column = beginColumn; column <= endColumn && column < maxColumn; ++column) { int n = row*maxColumn + column; QString text; if (n < symbols.length()) text = symbols.at(n); QRect textRect = QRect(column*square, row*square, square, square); if (hovered == QPoint(column, row)) { painter.fillRect(textRect, palette().highlight()); painter.setPen(palette().highlightedText().color()); } else { painter.setPen(QPen(Qt::gray)); painter.drawRect(textRect); painter.setPen(QPen(Qt::black)); } if (!text.isEmpty()) { painter.setFont(font); painter.drawText(textRect, Qt::AlignCenter, text); } } } } } #include "moc_chartable.cpp" qterm-0.7.3/src/chartable.h000066400000000000000000000011241332762052600155420ustar00rootroot00000000000000#ifndef CHARTABLE_H #define CHARTABLE_H #include #include namespace QTerm { class CharTable : public QWidget { Q_OBJECT public: CharTable (QString symbolStr, QWidget *parent = 0); QSize sizeHint() const; signals: void characterSelected(QString); protected: void resizeEvent(QResizeEvent *re); void mouseMoveEvent(QMouseEvent *me); void mouseReleaseEvent(QMouseEvent *me); void paintEvent(QPaintEvent *pe); private: QString symbols; int maxColumn; int square; QPoint hovered; }; } #endif qterm-0.7.3/src/closedialog.cpp000066400000000000000000000020561332762052600164420ustar00rootroot00000000000000// // C++ Implementation: CloseDialog // // Description: // // // Author: hooey , (C) 2009 // // Copyright: See COPYING file that comes with this distribution // // #include "closedialog.h" #include "qtermglobal.h" #include namespace QTerm { CloseDialog::CloseDialog(QWidget * parent, Qt::WindowFlags fl) : QDialog(parent, fl),m_count(30) { ui.setupUi(this); m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(changeTitle())); changeTitle(); m_timer->start(1000); restoreGeometry(Global::instance()->loadGeometry("Close")); } CloseDialog::~CloseDialog() { Global::instance()->saveGeometry("Close",saveGeometry()); } void CloseDialog::changeTitle() { m_count--; if (m_count == 0) { accept(); m_timer->stop(); return; } setWindowTitle(tr("QTerm will quit in %1 seconds").arg(m_count)); } void CloseDialog::setSiteList(const QStringList & list) { ui.siteListWidget->addItems(list); } } // namespace QTerm #include qterm-0.7.3/src/closedialog.h000066400000000000000000000011761332762052600161110ustar00rootroot00000000000000// // C++ Interface: CloseDialog // // Description: // // // Author: hooey , (C) 2009 // // Copyright: See COPYING file that comes with this distribution // // #ifndef CLOSEDIALOG_H #define CLOSEDIALOG_H #include "ui_closedialog.h" class QTimer; namespace QTerm { class CloseDialog : public QDialog { Q_OBJECT public: CloseDialog(QWidget* parent = 0, Qt::WindowFlags fl = 0); ~CloseDialog(); void setSiteList(const QStringList & list); Ui::closeDialog ui; private slots: void changeTitle(); private: QTimer * m_timer; int m_count; }; } // namespace QTerm #endif // CLOSEDIALOG_H qterm-0.7.3/src/credits000066400000000000000000000011521332762052600150250ustar00rootroot00000000000000smartfish smartfish@263.net coder for miniTerm kafa kafa@263.net coder for miniTerm Merlion vonjian@yahoo.com making cursor hwang hwangxw@fm365.com URL detection Nimrod Nimrod.bbs@smth.org copy article dialog Luba Luba.bbs@bbs.cs.nthu.edu.tw traditional chinese translation for 0.2.0 cppgx cppgx.bbs@smth.org qtermconfig maintainer of qterm-qst cyb cyber@thuee.org iplocation others(suggestion and bug report) Dominator, nukq, ihw, ghostdiy, gpliu acura, filix, MetalSlugX, hiei, fullow, Chicyu, careless, qiyu, hrothgar qterm-0.7.3/src/cursor/000077500000000000000000000000001332762052600147635ustar00rootroot00000000000000qterm-0.7.3/src/cursor/end.xpm000066400000000000000000000250261332762052600162640ustar00rootroot00000000000000/* XPM */ static char *end[] = { /* columns rows colors chars-per-pixel */ "64 64 143 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c #060606", "@ c #090909", "# c gray4", "$ c #0B0B0B", "% c #111111", "& c gray7", "* c #131313", "= c #151515", "- c gray9", "; c #191919", ": c #1B1B1B", "> c gray11", ", c #1D1D1D", "< c #1E1E1E", "1 c gray12", "2 c #222222", "3 c #232323", "4 c gray14", "5 c #252525", "6 c gray15", "7 c #272727", "8 c #282828", "9 c gray16", "0 c #2A2A2A", "q c gray17", "w c #2C2C2C", "e c #2D2D2D", "r c gray18", "t c #2F2F2F", "y c gray19", "u c #313131", "i c #323232", "p c gray20", "a c #343434", "s c gray21", "d c #373737", "f c #393939", "g c #3A3A3A", "h c gray23", "j c #3C3C3C", "k c gray24", "l c #3F3F3F", "z c gray25", "x c gray26", "c c #434343", "v c #444444", "b c gray27", "n c gray28", "m c #484848", "M c #494949", "N c #4B4B4B", "B c gray30", "V c #4E4E4E", "C c gray31", "Z c #505050", "A c #515151", "S c gray32", "D c gray33", "F c #555555", "G c #565656", "H c gray34", "J c gray35", "K c #5B5B5B", "L c gray36", "P c #5D5D5D", "I c #5F5F5F", "U c #606060", "Y c gray38", "T c #626262", "R c #646464", "E c #656565", "W c #686868", "Q c DimGray", "! c gray43", "~ c gray45", "^ c gray46", "/ c gray47", "( c #797979", ") c gray49", "_ c #7E7E7E", "` c #808080", "' c #818181", "] c #848484", "[ c gray52", "{ c #868686", "} c gray53", "| c #888888", " . c gray54", ".. c gray57", "X. c #929292", "o. c #979797", "O. c gray60", "+. c #9A9A9A", "@. c gray61", "#. c #9D9D9D", "$. c #9F9F9F", "%. c gray64", "&. c #A4A4A4", "*. c gray65", "=. c gray66", "-. c #AAAAAA", ";. c gray67", ":. c gray69", ">. c #B2B2B2", ",. c gray71", "<. c gray73", "1. c #BBBBBB", "2. c #BCBCBC", "3. c gray", "4. c #C0C0C0", "5. c gray76", "6. c #CBCBCB", "7. c #CECECE", "8. c gray81", "9. c gray82", "0. c LightGray", "q. c #D5D5D5", "w. c #D8D8D8", "e. c gray85", "r. c #DADADA", "t. c #DDDDDD", "y. c #DFDFDF", "u. c gray88", "i. c #E2E2E2", "p. c #E4E4E4", "a. c #E9E9E9", "s. c gray92", "d. c gray93", "f. c gray94", "g. c #F1F1F1", "h. c #F3F3F3", "j. c gray97", "k. c #F9F9F9", "l. c gray98", "z. c #FBFBFB", "x. c #FEFEFE", "c. c white", "v. c None", /* pixels */ "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v. v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. $ Z Z Z Z Z Z f c Z Z s + Z Z Z > Z Z Z m s 5 % v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.1. 0.c.c.u. % c.c.c.L c.c.c.c.c.c.c.6.j v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.1. 0.c.c.c.u = c.c.c.L c.c.c.c.c.c.c.c.h.% v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.r.r.@. 0.c.c.c.{ % c.c.c.L c.c.c.c.{ a.c.c.c.R v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l. 0.c.c.c.r.= c.c.c.L c.c.c.c.> %.c.c.c.^ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l. 0.c.c.c.c.j c.c.c.L c.c.c.c.2 +.c.c.c.) v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l.q q % 0.c.c.c.c.X.c.c.c.L c.c.c.c.> +.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.| 0.c.c.c.c.p.c.c.c.L + c.c.c.c.> +.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.| 0.c.c.c.c.c.c.c.c.L c.c.c.c.> +.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.u.u.( 0.c.c.d.c.c.c.c.c.L c.c.c.c.> +.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l. 0.c.c.=.l.c.c.c.c.L c.c.c.c.2 +.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l. 0.c.c.@.1.c.c.c.c.L c.c.c.c.> @.c.c.c.{ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.l. 0.c.c.@.! c.c.c.c.L c.c.c.c.> >.c.c.c.^ v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.=.=.%. 0.c.c.@.2 c.c.c.c.L + c.c.c.c.! p.c.c.c.R v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.l. 0.c.c.@. q.c.c.c.L c.c.c.c.c.c.c.c.c.m v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. 5 c.c.c.c.c.c.l. 0.c.c.@. | c.c.c.L c.c.c.c.c.c.c.c.3. v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. % ' ' ' ' ) ' ) Q ) ' V q ' ' ' w ) ' ) ' ' ( Q c v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v. v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v. v.v.v.v.v.v.", "v.v.v.v.v.v.v. > 2 5 5 5 5 q q w w u u u u s s s f f j j j c c v v m m m V V V Z H H J J J L L Y Y R R = v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v. j a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.l.Y v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v. > 8.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.f.v v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v. $ =.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.u.w v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v. ) c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.8.: v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v. Z f.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.,.$ v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v. w u.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.+. v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. = 5.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.^ v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. +.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.h.H v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. Q l.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.d.f v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. j d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.r.2 v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. > 0.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.5.% v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. $ =.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.*.+ v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. ) c.c.c.c.c.c.c.c.c.c.c.c.c.{ v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. Z h.c.c.c.c.c.c.c.c.c.l.Y v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. w y.c.c.c.c.c.c.c.f.c v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. % 1.c.c.c.c.c.y.q v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. X.c.c.c.6.= v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. Y l.>.$ v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v. 5 v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v. v.v.v.v.v.v.", "v.v.v.v.v.v. s j c j c j j c c j c j j c j c c j c j j j c j c j c j c j c j c j c j c j c j j j c c c j c j $ v.v.v.v.v.v.", "v.v.v.v.v.v. 8.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.w v.v.v.v.v.v.", "v.v.v.v.v.v. 8.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.u v.v.v.v.v.v.", "v.v.v.v.v.v. 8.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.u v.v.v.v.v.v.", "v.v.v.v.v.v. 8.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.w v.v.v.v.v.v.", "v.v.v.v.v.v. ' @.%.@.%.@.%.@.@.%.@.%.@.%.@.%.%.@.%.@.%.@.%.@.@.%.@.%.@.%.@.%.@.%.@.%.@.%.@.%.%.@.@.%.@.%.@.%.> v.v.v.v.v.v.", "v.v.v.v.v.v. v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v." }; qterm-0.7.3/src/cursor/enter.xpm000066400000000000000000000244201332762052600166300ustar00rootroot00000000000000/* XPM */ static char *enter[] = { /* columns rows colors chars-per-pixel */ "64 64 126 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c gray2", "@ c #070707", "# c gray3", "$ c #090909", "% c gray4", "& c #0B0B0B", "* c #0C0C0C", "= c gray5", "- c #0E0E0E", "; c gray6", ": c #101010", "> c #111111", ", c #131313", "< c gray8", "1 c #161616", "2 c gray9", "3 c #1B1B1B", "4 c gray11", "5 c gray12", "6 c #202020", "7 c gray14", "8 c gray17", "9 c #2D2D2D", "0 c gray19", "q c #3A3A3A", "w c #3C3C3C", "e c #3F3F3F", "r c #414141", "t c gray26", "y c gray28", "u c #484848", "i c #4C4C4C", "p c gray30", "a c #515151", "s c gray34", "d c #585858", "f c #5A5A5A", "g c #5F5F5F", "h c #606060", "j c gray38", "k c gray39", "l c #646464", "z c #656565", "x c gray40", "c c #686868", "v c DimGray", "b c #6A6A6A", "n c gray42", "m c #6D6D6D", "M c #6F6F6F", "N c #717171", "B c #727272", "V c gray45", "C c #747474", "Z c #7B7B7B", "A c #7E7E7E", "S c #808080", "D c #818181", "F c #848484", "G c gray52", "H c gray53", "J c #8B8B8B", "K c gray55", "L c gray56", "P c gray57", "I c gray59", "U c #979797", "Y c #989898", "T c gray60", "R c #9B9B9B", "E c gray61", "W c gray62", "Q c #9F9F9F", "! c #A0A0A0", "~ c #A2A2A2", "^ c gray64", "/ c #A5A5A5", "( c gray66", ") c #A9A9A9", "_ c #AAAAAA", "` c gray67", "' c #ACACAC", "] c #AFAFAF", "[ c gray69", "{ c #B1B1B1", "} c #B2B2B2", "| c #B7B7B7", " . c gray72", ".. c #B9B9B9", "X. c #BCBCBC", "o. c gray", "O. c gray75", "+. c #C0C0C0", "@. c #C1C1C1", "#. c #C3C3C3", "$. c #C6C6C6", "%. c #CACACA", "&. c #CBCBCB", "*. c gray81", "=. c #D0D0D0", "-. c LightGray", ";. c gray83", ":. c #D5D5D5", ">. c #D8D8D8", ",. c gray86", "<. c #E2E2E2", "1. c gray90", "2. c #EFEFEF", "3. c gray95", "4. c #F3F3F3", "5. c #F4F4F4", "6. c gray96", "7. c #F6F6F6", "8. c #F8F8F8", "9. c #F9F9F9", "0. c gray98", "q. c #FBFBFB", "w. c #FDFDFD", "e. c #FEFEFE", "r. c white", "t. c None", /* pixels */ "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. ; : : : : $ $ : : O ; : ; ; : : : : : : $ : : : : : O ; : ; t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.r.r.R U r.r.j 2.r.;. $.r.r.r.r.r.r.S 3 r.r.r.r.r.C X.r.r.r.5.<.j t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.r.r.R U r.r.{ 2.r.>. +.r.r.r.r.r.r.H 3 r.r.r.r.r.C +.r.r.r.r.r.r.r t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.{ S p U r.r.5.; 2.r.>. j S 1.r.r.$.A r 3 r.r.r.W S q X.r.r.` ` r.r.Z t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.j U r.r.r.d 2.r.>. &.r.r.K 3 r.r.r.e X.r.r.R z r.r.~ t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.m : $ U r.r.r.` 2.r.>. &.r.r.K 3 r.r.r.y : O X.r.r.W U r.r.A t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.r.r.N U r.r.r.5.5.r.>. &.r.r.K 3 r.r.r.r.r.p +.r.r.r.r.r.%.9 t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.r.r.C U r.r.r.r.r.r.>. %.r.r.K 3 r.r.r.r.r.p X.r.r.r.r.r.W 2 t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.W j 8 U r.r.;.r.r.r.>. &.r.r.K 3 r.r.r.S j 4 X.r.r.R U r.r.P t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.j U r.r.H r.r.r.>. &.r.r.K 3 r.r.r.e +.r.r.R b r.r.` t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.j U r.r.e 0.r.r.>. &.r.r.K 3 r.r.r.e X.r.r.R z r.r.' t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.<.-.' U r.r.0 X.r.r.>. %.r.r.K 3 r.r.r.>.-.K X.r.r.R z r.r.{ t.t.t.t.t.t.t.t.t.t.t.t.", "t.t. 5.r.r.r.r.-. U r.r.0 m r.r.>. %.r.r.K 3 r.r.r.r.r.' +.r.r.R z r.r.{ t.t.t. t.", "t.t. | +.+.+.+.W N +.+.7 6 +.+.~ R +.X.b 2 X.+.+.+.+.S K +.+.N p +.+.H t.t. t.", "t.t. t.t. W -.&.&.-.: t.", "t.t. t.t. X.r.r.r.r.3 t.", "t.t. t.t.t. X.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. X.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. X.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. X.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t.t. $ t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t.t. ; .. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t.t. $ +.3. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. X.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t.t. O ..r.2. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t.t. { r.r.2. +.r.r.r.r.2 t.", "t.t.t.t.t.t.t. O / r.r.r.5.s s s s s s s s s s s s s s s s s s s s s s s s s d s s s s s s s s s s s s s s s s ;.r.r.r.r.2 t.", "t.t.t.t.t.t. R r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.2 t.", "t.t.t.t.t. U r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.2 t.", "t.t.t.t. 4 3.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.2 t.", "t.t.t.t.t. r 5.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.2 t.", "t.t.t.t.t.t. u 0.r.r.r.0.+.X.+.+.+.X.X.+.+.+.X.+.+.+.+.+.+.X.X.+.+.+.X.+.+.+.X.+.+.+.X.+.+.+.X.+.+.+.X.+.+.+.+.+.+.+.X.: t.", "t.t.t.t.t.t.t. a 0.r.r.3. t.", "t.t.t.t.t.t.t.t. d r.r.2. t.t.", "t.t.t.t.t.t.t.t.t. j r.2. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t. N 2. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t. b t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t." }; qterm-0.7.3/src/cursor/exit.xpm000066400000000000000000000244061332762052600164700ustar00rootroot00000000000000/* XPM */ static char *exit[] = { /* columns rows colors chars-per-pixel */ "64 64 126 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c gray2", "+ c gray3", "@ c gray4", "# c #0B0B0B", "$ c #0C0C0C", "% c #0E0E0E", "& c gray6", "* c #101010", "= c gray8", "- c #161616", "; c gray9", ": c #191919", "> c gray10", ", c gray11", "< c #1E1E1E", "1 c gray12", "2 c #222222", "3 c #232323", "4 c #252525", "5 c gray15", "6 c #272727", "7 c #282828", "8 c gray16", "9 c #2C2C2C", "0 c gray18", "q c gray19", "w c #323232", "e c gray20", "r c #353535", "t c #3A3A3A", "y c gray24", "u c #3E3E3E", "i c gray26", "p c gray27", "a c #494949", "s c #4B4B4B", "d c #4C4C4C", "f c #4E4E4E", "g c gray31", "h c #515151", "j c gray33", "k c gray34", "l c #585858", "z c #5A5A5A", "x c #5D5D5D", "c c #626262", "v c #656565", "b c gray40", "n c #676767", "m c #686868", "M c #6A6A6A", "N c #6C6C6C", "B c #6D6D6D", "V c gray43", "C c #727272", "Z c gray46", "A c #767676", "S c gray47", "D c gray49", "F c #838383", "G c #848484", "H c gray52", "J c gray53", "K c #888888", "L c gray54", "P c #8B8B8B", "I c gray55", "U c gray56", "Y c #909090", "T c #939393", "R c gray58", "E c #979797", "W c gray60", "Q c #9A9A9A", "! c #9D9D9D", "~ c gray63", "^ c #A4A4A4", "/ c gray65", "( c #A7A7A7", ") c gray67", "_ c #AEAEAE", "` c #AFAFAF", "' c gray70", "] c #B7B7B7", "[ c gray73", "{ c gray", "} c gray75", "| c #C0C0C0", " . c gray76", ".. c #C3C3C3", "X. c gray78", "o. c #C8C8C8", "O. c gray79", "+. c #CBCBCB", "@. c gray80", "#. c #D0D0D0", "$. c gray85", "%. c #DADADA", "&. c #DDDDDD", "*. c #E2E2E2", "=. c #E7E7E7", "-. c gray91", ";. c #E9E9E9", ":. c #EAEAEA", ">. c #ECECEC", ",. c gray93", "<. c #EFEFEF", "1. c gray94", "2. c #F1F1F1", "3. c gray95", "4. c #F4F4F4", "5. c gray96", "6. c #F6F6F6", "7. c gray97", "8. c #F8F8F8", "9. c gray98", "0. c #FBFBFB", "q. c gray99", "w. c #FDFDFD", "e. c #FEFEFE", "r. c white", "t. c None", /* pixels */ "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. - t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. 6 @. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. 0 ;.=. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. r ,.r.=. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. u 2.r.r.=. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. p 5.r.r.r.=. t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t. f 8.r.r.r.r.=. t.", "t.t.t.t.t.t.t.t.t.t.t.t.t. k 8.r.r.r.r.r.8._ ' _ _ _ _ _ ' _ ' _ _ _ ' _ _ _ ' _ _ _ ' _ _ _ ' _ _ _ _ ' ' _ _ _ ' _ _ * t.", "t.t.t.t.t.t.t.t.t.t.t.t. c r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.- t.", "t.t.t.t.t.t.t.t.t.t.t. B r.r.r.r.r.r.r.r.r.L , , , , , , , , , , , , , , , , , , , , , , , , > , , , > , , , , , 3 2.r.- t.", "t.t.t.t.t.t.t.t.t.t. S r.r.r.r.r.r.r.r.r.r.m - 2.r.- t.", "t.t.t.t.t.t.t.t.t. G r.r.r.r.r.r.r.r.r.r.r.m - ,.r.- t.", "t.t.t.t.t.t.t.t. Y r.r.r.r.r.r.r.r.r.r.r.r.m | #.#.#.#.| z #.#.X. E #.#.w B #.#.+. 8 #.#.#.#.#.#.#.B - 2.r.- t.", "t.t.t.t.t.t.t. Q r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.r.r.2. u r.r.r.6 ;.r.r.$ L r.r.5. w r.r.r.r.r.r.r.G - ,.r.- t.", "t.t.t.t.t.t. O / r.r.r.r.r.r.r.r.r.r.r.r.r.r.m 2.r.r.5.;.$. $ 8.r.r.Z r.r.$. G r.r.8. 0 ;.;.r.r.r.2.;.S - 2.r.- t.", "t.t.t.t.t. O _ r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.Y #.r.r.$.r.r./ L r.r.8. > r.r.r.B - ,.r.- t.", "t.t.t.t. + ] r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m 2.r.r.Y Q r.r.r.r.r.C L r.r.8. > r.r.r.B - 2.r.- t.", "t.t.t. $ | r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.+.L m c r.r.r.r.r.u G r.r.8. > r.r.r.B - ,.r.- t.", "t.t. G r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.r.r.X. f r.r.r.r.r.0 L r.r.8. > r.r.r.B - 2.r.- t.", "t.t.t. / r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m 2.r.r.r.r.+. Z r.r.r.r.r.B G r.r.8. > r.r.r.B - ,.r.- t.", "t.t.t.t. O ! r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m 2.r.r.E * $ ~ r.r.r.r.r.) L r.r.8. > r.r.r.B - 2.r.- t.", "t.t.t.t.t. E r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.Y @.r.r.| r.r.;. G r.r.8. > r.r.r.B - ,.r.- t.", "t.t.t.t.t.t. G r.r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.I 5.r.r.B r.r.r.6 L r.r.8. > r.r.r.B - 2.r.- t.", "t.t.t.t.t.t.t.O D r.r.r.r.r.r.r.r.r.r.r.r.r.m ,.r.r.r.8.8.8 3 r.r.r.i +.r.r.v G r.r.8. > r.r.r.B - ,.r.- t.", "t.t.t.t.t.t.t.t. C r.r.r.r.r.r.r.r.r.r.r.r.m 2.r.r.r.r.r.8 f r.r.r., Y r.r./ G r.r.8. > r.r.r.B - 2.r.- t.", "t.t.t.t.t.t.t.t.t. v r.r.r.r.r.r.r.r.r.r.r.m ' | | | | | , k | | [ a | | / v | | [ - } } | h - ,.r.- t.", "t.t.t.t.t.t.t.t.t.t. x r.r.r.r.r.r.r.r.r.r.v > ,.r.- t.", "t.t.t.t.t.t.t.t.t.t.t. h 8.r.r.r.r.r.r.r.r.m $ ,.r.- t.", "t.t.t.t.t.t.t.t.t.t.t.t. f 5.r.r.r.r.r.r.r.| L I I L L L I L I L I I L I L L I L L I L I L L L I L I L I L I L L I 8.r.- t.", "t.t.t.t.t.t.t.t.t.t.t.t.t. i 5.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.- t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t. t 2.r.r.r.r.;.> > - - - - - > - - > - > - - - > - > - > - - - > - > - - - > - - - > - > - t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. w ,.r.r.r.=. t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. 8 ;.r.r.=. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. 6 *.r.=. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. , &.;. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. > } t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. $ t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t. t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t." }; qterm-0.7.3/src/cursor/hand.xpm000066400000000000000000000255531332762052600164350ustar00rootroot00000000000000/* XPM */ static char *hand[] = { /* columns rows colors chars-per-pixel */ "64 64 164 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c gray2", "@ c #060606", "# c #070707", "$ c gray3", "% c #090909", "& c gray4", "* c #0B0B0B", "= c gray5", "- c #0E0E0E", "; c #101010", ": c gray7", "> c #131313", ", c gray8", "< c #151515", "1 c #161616", "2 c gray9", "3 c #181818", "4 c #191919", "5 c #1B1B1B", "6 c #1D1D1D", "7 c gray12", "8 c gray13", "9 c #232323", "0 c #252525", "q c #272727", "w c gray16", "e c #2A2A2A", "r c gray17", "t c #2D2D2D", "y c #2F2F2F", "u c #313131", "i c gray20", "p c #343434", "a c #353535", "s c #373737", "d c gray22", "f c #3A3A3A", "g c gray23", "h c #3C3C3C", "j c #3E3E3E", "k c #3F3F3F", "l c #434343", "z c #444444", "x c gray27", "c c #464646", "v c gray28", "b c gray29", "n c #4C4C4C", "m c gray30", "M c #515151", "N c #555555", "B c #565656", "V c gray35", "C c #5A5A5A", "Z c gray36", "A c #5D5D5D", "S c gray37", "D c #606060", "F c #626262", "G c #646464", "H c #656565", "J c gray40", "K c #676767", "L c gray42", "P c #6C6C6C", "I c #6D6D6D", "U c gray43", "Y c #6F6F6F", "T c gray44", "R c #727272", "E c gray45", "W c #747474", "Q c #767676", "! c #777777", "~ c #797979", "^ c gray48", "/ c #7C7C7C", "( c gray49", ") c #7E7E7E", "_ c #808080", "` c #818181", "' c gray51", "] c #838383", "[ c #848484", "{ c #868686", "} c #898989", "| c gray55", " . c gray56", ".. c #909090", "X. c #939393", "o. c gray58", "O. c gray59", "+. c #979797", "@. c #9A9A9A", "#. c #9F9F9F", "$. c #A0A0A0", "%. c #A4A4A4", "&. c gray65", "*. c #AAAAAA", "=. c #AFAFAF", "-. c gray69", ";. c #B1B1B1", ":. c #B2B2B2", ">. c #B6B6B6", ",. c #B9B9B9", "<. c gray73", "1. c #BBBBBB", "2. c #BCBCBC", "3. c #C0C0C0", "4. c gray76", "5. c #C3C3C3", "6. c gray78", "7. c #C8C8C8", "8. c gray79", "9. c #CACACA", "0. c #CBCBCB", "q. c gray80", "w. c #CDCDCD", "e. c #CECECE", "r. c #D0D0D0", "t. c #D2D2D2", "y. c LightGray", "u. c #D5D5D5", "i. c #D8D8D8", "p. c gray85", "a. c #DADADA", "s. c gray86", "d. c gainsboro", "f. c #DDDDDD", "g. c gray87", "h. c #DFDFDF", "j. c gray88", "k. c #E1E1E1", "l. c #E2E2E2", "z. c gray89", "x. c #E4E4E4", "c. c gray90", "v. c #E6E6E6", "b. c #E7E7E7", "n. c gray91", "m. c #E9E9E9", "M. c #EAEAEA", "N. c gray92", "B. c #ECECEC", "V. c gray93", "C. c #EEEEEE", "Z. c #EFEFEF", "A. c gray94", "S. c gray95", "D. c #F3F3F3", "F. c #F6F6F6", "G. c #F8F8F8", "H. c #F9F9F9", "J. c #FBFBFB", "K. c gray99", "L. c #FDFDFD", "P. c #FEFEFE", "I. c white", "U. c None", /* pixels */ "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.O l ! i U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. $ -.I.I.I.{ U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. = q.I.I.I.I.I.E U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. q I.I.I.I.I.I.-. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 8 I.I.I.I.I.I.,. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 6 I.I.I.I.I.I.5. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 5 I.I.I.I.I.I.q. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 2 I.I.I.I.I.I.u. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. > I.I.I.I.I.I.j. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. = I.I.I.I.I.I.x. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. $ I.I.I.I.I.I.D. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. O I.I.I.I.I.I.H. U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. O I.I.I.I.I.I.I.O U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. I.I.I.I.I.I.I.= p ^ =.{ x O U. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. I.I.I.I.I.I.I.5 F.I.I.I.I.w t S m $ U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. H.I.I.I.I.I.I.8 O I.I.I.I.I.f G I.I.I.F... U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. F.I.I.I.I.I.I.t 2 I.I.I.I.I.m { I.I.I.I.q. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. D.I.I.I.I.I.I.p w I.I.I.I.I.S @.I.I.I.I.p. U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. C.I.I.I.I.I.I.j f I.I.I.I.I.I =.I.I.I.I.x. f @.#.S = U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. N.I.I.I.I.I.I.x m I.I.I.I.I.( 6.I.I.I.I.D. I I.I.I.F.C U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. x.I.I.I.I.I.I.M S I.I.I.I.I. . f.I.I.I.I.H. ( I.I.I.I. . U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. x.I.I.I.I.I.I.C E I.I.I.I.I.$. D.I.I.I.I.I.$ } I.I.I.I.*. U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U. U.U.U.U.U. j.I.I.I.I.I.I.G ' I.I.I.I.I.-. $ I.I.I.I.I.I.2 o.I.I.I.I.8. U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. $ 5 5 U.U.U.U. f.I.I.I.I.I.I.I o.I.I.I.I.I.5. 6 I.I.I.I.I.I.8 &.I.I.I.I.x. U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. x D.I.I.H.,.> U.U. p.I.I.I.I.I.I.! &.I.I.I.I.I.t. p I.I.I.I.I.I.i -.I.I.I.I.I.O U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. .I.I.I.I.I.f.q U. u.I.I.I.I.I.I.,.E u.I.I.I.I.I.x.q G I.I.I.I.I.I.f 5.I.I.I.I.I.q U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. ( I.I.I.I.I.I.C.x t.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.b 8.I.I.I.I.I.j U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. b I.I.I.I.I.I.I.H.G q.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.S = f.I.I.I.I.I.b U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U. O C.I.I.I.I.I.I.I.I. . q.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.N U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U. C I.I.I.I.I.I.I.I.I.D 6.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.D U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U. ..I.I.I.I.I.I.I.I.E 5.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.L U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U. O 8.I.I.I.I.I.I.I.E 5.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.! U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. 6 C.I.I.I.I.I.I.^ ,.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.' U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. m I.I.I.I.I.I.o.i 8.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.' U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U. } I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.L U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U. 6.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.N U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U. 5 N.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.j U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U. l I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.w U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ' I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.> U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ,.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.t. U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 2 x.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.! U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. j H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.5 U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ! I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.>. U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. -.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.C U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. > j.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.C.O U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. p H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.' U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. I I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.C.> U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. -.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.' U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ^ I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.w U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. E I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.6 U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. G I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.2 U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. S I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.$ U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. x p.p.p.p.f.f.j.f.j.j.j.j.x.x.x.N.x.x.N.N.N.N.C.C.D.O U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U." }; qterm-0.7.3/src/cursor/home.xpm000066400000000000000000000254621332762052600164520ustar00rootroot00000000000000/* XPM */ static char *home[] = { /* columns rows colors chars-per-pixel */ "64 64 161 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c gray2", "+ c #060606", "@ c #070707", "# c gray3", "$ c #090909", "% c #0B0B0B", "& c #0C0C0C", "* c gray5", "= c #0E0E0E", "- c gray6", "; c #101010", ": c #111111", "> c gray7", ", c gray8", "< c #161616", "1 c #181818", "2 c #191919", "3 c gray10", "4 c #1B1B1B", "5 c gray11", "6 c #1D1D1D", "7 c gray12", "8 c #202020", "9 c gray13", "0 c #222222", "q c gray14", "w c gray15", "e c #272727", "r c #282828", "t c #2A2A2A", "y c gray17", "u c #2D2D2D", "i c #2F2F2F", "p c #313131", "a c #323232", "s c gray20", "d c #343434", "f c gray21", "g c gray22", "h c #393939", "j c #3A3A3A", "k c #3C3C3C", "l c #3F3F3F", "z c gray25", "x c #414141", "c c gray26", "v c #484848", "b c #494949", "n c #4C4C4C", "m c gray30", "M c #4E4E4E", "N c #505050", "B c #515151", "V c #555555", "C c #565656", "Z c #5A5A5A", "A c #5B5B5B", "S c gray36", "D c #5D5D5D", "F c gray37", "G c #5F5F5F", "H c #606060", "J c gray38", "K c #626262", "L c gray39", "P c #676767", "I c #686868", "U c DimGray", "Y c #6F6F6F", "T c #747474", "R c #767676", "E c #777777", "W c gray47", "Q c #797979", "! c gray48", "~ c #7B7B7B", "^ c #7C7C7C", "/ c gray49", "( c #7E7E7E", ") c gray50", "_ c #808080", "` c #848484", "' c gray53", "] c #888888", "[ c #8B8B8B", "{ c #8E8E8E", "} c gray56", "| c #909090", " . c gray57", ".. c #929292", "X. c #939393", "o. c gray58", "O. c #959595", "+. c #9A9A9A", "@. c gray61", "#. c #9D9D9D", "$. c #A0A0A0", "%. c gray63", "&. c #A4A4A4", "*. c #A5A5A5", "=. c gray65", "-. c gray66", ";. c #ACACAC", ":. c #AEAEAE", ">. c #AFAFAF", ",. c #B1B1B1", "<. c #B6B6B6", "1. c #B7B7B7", "2. c gray72", "3. c #B9B9B9", "4. c gray73", "5. c #BBBBBB", "6. c #BCBCBC", "7. c gray74", "8. c gray", "9. c gray75", "0. c #C1C1C1", "q. c gray76", "w. c gray77", "e. c #C5C5C5", "r. c gray78", "t. c #C8C8C8", "y. c gray79", "u. c #CBCBCB", "i. c gray80", "p. c gray81", "a. c #D2D2D2", "s. c #D8D8D8", "d. c gainsboro", "f. c #DDDDDD", "g. c gray87", "h. c #DFDFDF", "j. c gray88", "k. c #E4E4E4", "l. c gray90", "z. c #E7E7E7", "x. c gray91", "c. c gray92", "v. c #ECECEC", "b. c gray93", "n. c #EEEEEE", "m. c #EFEFEF", "M. c gray94", "N. c gray95", "B. c #F3F3F3", "V. c gray96", "C. c #F6F6F6", "Z. c gray97", "A. c #F8F8F8", "S. c #F9F9F9", "D. c gray98", "F. c #FBFBFB", "G. c gray99", "H. c #FDFDFD", "J. c #FEFEFE", "K. c white", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L. L.L.L.L.L.L.", "L.L.L.L.L.L. L.L.L.L.L.L.", "L.L.L.L.L.L. ' K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.' L.L.L.L.L.L.", "L.L.L.L.L.L. ' K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.' L.L.L.L.L.L.", "L.L.L.L.L.L. ' K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.' L.L.L.L.L.L.", "L.L.L.L.L.L. ' K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.' L.L.L.L.L.L.", "L.L.L.L.L.L. R h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.j.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.R L.L.L.L.L.L.", "L.L.L.L.L.L. L.L.L.L.L.L.", "L.L.L.L.L.L. L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. Z L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. : <.K.<.* L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. r s.K.K.K.i.3 L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. n N.K.K.K.K.K.z.p L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. R A.K.K.K.K.K.K.K.N.n L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. O =.K.K.K.K.K.K.K.K.K.K.A.I L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. 3 u.K.K.K.K.K.K.K.K.K.K.K.K.K.[ L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. g z.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.:.# L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. L A.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.e.< L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. O ..K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.h.e L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. : 7.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.b.l L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. r h.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.A.Z L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L. n N.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.^ L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L. Q K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.#.O L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L. # =.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.4.* L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L. 3 u.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.a.5 L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L. g z.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.z.p L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L. H A.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.N.n L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L. ^ N.V.V.V.A.A.A.A.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.L L.L.L.L.L.L.L.L.", "L.L.L.L.L.L. O O O # # # * * : : < < < 3 3 5 8 8 8 e e r r u u u p p f f O L.L.L.L.L.L.L.", "L.L.L.L.L.L. O L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. l N N N 5 8 N N N g 3 Z { { F 3 g N N N M p 8 N N N N M 8 N N N N N N r L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 7.K.K.K.H I K.K.K.<. M b.K.K.K.K.c.n 4.K.K.K.K.4. ^ K.K.K.K.V. L K.K.K.K.K.K.^ L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. 8 K.K.K.K.K.K.K.A.3 4.K.K.K.K.h. +.K.K.K.K.V. H K.K.K.K.K.K.^ L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. ' K.K.K.[ O.K.K.K.^ 4.K.K.K.K.K.O 7.K.K.K.K.A. L K.K.K.V.s.s.I L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. :.K.K.K.F L K.K.K.=. 4.K.K.K.K.K.e h.K.K.K.K.V. L K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. 4.K.K.K.V H K.K.K.:. <.K.K.K.K.K.N A.K.K.K.K.V. H K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.u.u.K.K.K.<. 0.K.K.K.V H K.K.K.4. 4.K.K.b.K.K...K.K.c.K.K.V. L K.K.K.e.r r # L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.K.K.K.K.K.<. u.K.K.K.V H K.K.K.7. 4.K.K.h.c.K.s.K.K.e.K.K.V. L K.K.K.K.K.K.M L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.K.K.K.K.K.<. u.K.K.K.V H K.K.K.7. <.K.K.h.e.K.K.K.K.=.K.K.A. H K.K.K.K.K.K.M L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.c.b.K.K.K.<. u.K.K.K.V H K.K.K.7. 4.K.K.h.%.K.K.K.h.%.K.K.V. L K.K.K.V.j.j.c L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. e.K.K.K.V H K.K.K.4. 4.K.K.h.Q K.K.K.4.%.K.K.V. L K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. 4.K.K.K.V H K.K.K.:. <.K.K.h.V K.K.K.+.%.K.K.A. H K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. ,.K.K.K.F I K.K.K.=. 4.K.K.h.p K.K.K.Q %.K.K.A. L K.K.K.4. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. O.K.K.K.R ^ K.K.K.[ 4.K.K.h.# K.K.K.V %.K.K.V. L K.K.K.c.-.-.Q L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.F I K.K.K.<. p K.K.K.A.A.K.K.K.r 4.K.K.h. z.K.K.p %.K.K.V. H K.K.K.K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. 0.K.K.K.H I K.K.K.<. ^ K.K.K.K.K.K.R 4.K.K.s. 7.K.K.: %.K.K.A. L K.K.K.K.K.K.7. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. H _ _ _ u f _ _ _ F c ..0.7...c Z _ _ Y N _ ^ N _ _ Q p _ _ _ _ _ _ F L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L. L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; qterm-0.7.3/src/cursor/mac_16x16/000077500000000000000000000000001332762052600163705ustar00rootroot00000000000000qterm-0.7.3/src/cursor/mac_16x16/end.xpm000066400000000000000000000006271332762052600176710ustar00rootroot00000000000000/* XPM */ static char *end[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", "................", "..############..", "..#aaaaaaaaaa#..", "...#aaaaaaaa#...", "....#aaaaaa#....", ".....#aaaa#.....", "......#aa#......", ".......##.......", "..############..", "..#aaaaaaaaaa#..", "..############..", "................", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/enter.xpm000066400000000000000000000006311332762052600202330ustar00rootroot00000000000000/* XPM */ static char *enter[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", "................", "................", "............###.", "............#a#.", "....#.......#a#.", "...##.......#a#.", "..#a#########a#.", ".#aaaaaaaaaaaa#.", "..#a###########.", "...##...........", "....#...........", "................", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/exit.xpm000066400000000000000000000006301332762052600200660ustar00rootroot00000000000000/* XPM */ static char *exit[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", "................", "......#.........", ".....##.........", "....#a#.........", "...#aa#########.", "..#aaa..aaaaaa#.", ".#aaaaaaaaaaaa#.", "..#aaaaaaaaaaa#.", "...#aa#########.", "....#a#.........", ".....##.........", "......#.........", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/hand.xpm000066400000000000000000000006301332762052600200270ustar00rootroot00000000000000/* XPM */ static char *hand[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "......#.........", ".....#a#........", ".....#a#........", ".....#a###......", ".....#a#a###....", ".....#a#a#a###..", ".##..#a#a#a#.###", ".#a###aaaaaa.#a#", ".#aaa#aaaaaa..a#", "..#aaaaaaaaaaa##", "...#a.aaaaaaaa#.", "...##aaaaaaaa##.", "....##aaaaaaa#..", ".....#aaaaaaa#..", ".....#########..", "................"}; qterm-0.7.3/src/cursor/mac_16x16/home.xpm000066400000000000000000000006301332762052600200450ustar00rootroot00000000000000/* XPM */ static char *home[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", "................", "..############..", "..#aaaaaaaaaa#..", "..############..", ".......##.......", "......#aa#......", ".....#aaa.#.....", "....#aaaaaa#....", "...#aaaaaaaa#...", "..#aaaaaaaaaa#..", "..############..", "................", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/next.xpm000066400000000000000000000006301332762052600200730ustar00rootroot00000000000000/* XPM */ static char *next[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", ".....#####......", ".....#aaa#......", ".....#aaa#......", ".....#aaa#......", ".#####aaa#####..", ".#aaaaaaaaaaa#..", "..#aaaaaaaaa#...", "...#aaaaaaa#....", "....#aaaaa#.....", ".....#aaa#......", "......#a#.......", ".......#........", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/pagedown.xpm000066400000000000000000000006341332762052600207250ustar00rootroot00000000000000/* XPM */ static char *pagedown[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", "..###########...", "...#aaaaaaa#....", "....#aaaaa#.....", ".....#aaa#......", "......#a#.......", ".......#........", "..###########...", "...#aaaaaaa#....", "....#aaaaa#.....", ".....#aaa#......", "......#a#.......", ".......#........", "................", "................"}; qterm-0.7.3/src/cursor/mac_16x16/pageup.xpm000066400000000000000000000006321332762052600204000ustar00rootroot00000000000000/* XPM */ static char *pageup[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", ".......#........", "......#a#.......", ".....#aaa#......", "....#aaaaa#.....", "...#aaaaaaa#....", "..#aaaaaaaaa#...", ".#############..", "......#a#.......", ".....#aaa#......", "....#aaaaa#.....", "...#aaaaaaa#....", "..#aaaaaaaaa#...", ".#############..", "................"}; qterm-0.7.3/src/cursor/mac_16x16/prev.xpm000066400000000000000000000006301332762052600200710ustar00rootroot00000000000000/* XPM */ static char *prev[]={ "16 16 3 1", ". c None", "# c #000000", "a c #ffffff", "................", "................", ".......#........", "......#a#.......", ".....#aaa#......", "....#aaaaa#.....", "...#aaaaaaa#....", "..#aaaaaaaaa#...", ".#.aaaaaaaaaa#..", ".#####aaa#####..", ".....#aaa#......", ".....#aaa#......", ".....#aaa#......", ".....#####......", "................", "................"}; qterm-0.7.3/src/cursor/next.xpm000066400000000000000000000250701332762052600164730ustar00rootroot00000000000000/* XPM */ static char *next[] = { /* columns rows colors chars-per-pixel */ "64 64 145 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c gray2", "@ c #060606", "# c #0B0B0B", "$ c #0C0C0C", "% c gray5", "& c #0E0E0E", "* c gray6", "= c #101010", "- c gray7", "; c gray8", ": c #151515", "> c gray9", ", c #181818", "< c gray10", "1 c gray11", "2 c #1D1D1D", "3 c gray12", "4 c gray13", "5 c #222222", "6 c gray15", "7 c #272727", "8 c #282828", "9 c #2A2A2A", "0 c #2C2C2C", "q c #2F2F2F", "w c #323232", "e c gray20", "r c #343434", "t c #353535", "y c #373737", "u c gray22", "i c #393939", "p c gray24", "a c #414141", "s c #444444", "d c gray27", "f c #464646", "g c gray28", "h c #484848", "j c #494949", "k c gray31", "l c #505050", "z c #515151", "x c #535353", "c c #555555", "v c gray34", "b c #585858", "n c gray35", "m c #5B5B5B", "M c #5D5D5D", "N c gray37", "B c #5F5F5F", "V c #646464", "C c #656565", "Z c gray40", "A c #686868", "S c gray42", "D c #6D6D6D", "F c gray43", "G c #6F6F6F", "H c #727272", "J c gray45", "K c #747474", "L c gray46", "P c #797979", "I c gray48", "U c gray49", "Y c gray50", "T c #808080", "R c #818181", "E c #838383", "W c gray53", "Q c #888888", "! c gray54", "~ c #8D8D8D", "^ c gray57", "/ c gray59", "( c #979797", ") c gray61", "_ c #9F9F9F", "` c #A2A2A2", "' c gray64", "] c #A5A5A5", "[ c gray66", "{ c #A9A9A9", "} c #AAAAAA", "| c gray67", " . c gray68", ".. c #AEAEAE", "X. c #AFAFAF", "o. c gray69", "O. c gray70", "+. c #B4B4B4", "@. c #B7B7B7", "#. c #B9B9B9", "$. c gray73", "%. c #BBBBBB", "&. c gray74", "*. c gray75", "=. c gray76", "-. c #C3C3C3", ";. c gray78", ":. c #C8C8C8", ">. c gray79", ",. c #CACACA", "<. c #CBCBCB", "1. c #CDCDCD", "2. c #D0D0D0", "3. c LightGray", "4. c gray83", "5. c #D5D5D5", "6. c gray84", "7. c #D7D7D7", "8. c #D8D8D8", "9. c #DADADA", "0. c gray86", "q. c gainsboro", "w. c #DDDDDD", "e. c #DFDFDF", "r. c gray88", "t. c #E2E2E2", "y. c #E4E4E4", "u. c gray90", "i. c #E9E9E9", "p. c #EAEAEA", "a. c gray92", "s. c gray93", "d. c #EEEEEE", "f. c #EFEFEF", "g. c #F1F1F1", "h. c #F3F3F3", "j. c gray96", "k. c gray97", "l. c #F9F9F9", "z. c gray98", "x. c gray99", "c. c #FDFDFD", "v. c #FEFEFE", "b. c white", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. w l l a h l l 0 a l l l l l l O ; l k k u r l k a 8 l l l l l l l l 5 n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.; r.b.b.~ 2.b.b.b.b.b.b.& 5 b.b.b.2. :.b.b.X. ! b.b.b.b.b.b.b.b.G n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.V r.b.b.~ 2.b.b.b.b.b.b.& i.b.b.b.& k.b.b.I ! b.b.b.b.b.b.b.b.H n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.@. r.b.b.~ 2.b.b.b.y.8.8.& o.b.b.b.A b.b.b.f H 7.8.b.b.b.b.8.8.M n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.z.= r.b.b.~ 2.b.b.b.l Y b.b.b.1.b.b.b.= , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.b.M r.b.b.~ 2.b.b.b.l h b.b.b.b.b.b.8. , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.b.o.r.b.b.~ 2.b.b.b.A 8 5 & b.b.b.b.b.b.} , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.b.k.s.b.b.~ 2.b.b.b.b.b.e. e.b.b.b.b.b.I , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.b.b.b.b.b.b.~ 2.b.b.b.b.b.e. g.b.b.b.b.b.) , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.s.b.b.b.b.b.~ 2.b.b.b.i.r.=. 2 b.b.b.b.b.b.e. , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1.7.b.b.b.b.~ 2.b.b.b.k h b.b.b.b.b.b.b., , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1.! b.b.b.b.~ 2.b.b.b.k K b.b.b.&.b.b.b.v , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1.p b.b.b.b.~ 2.b.b.b.k ` b.b.b.V b.b.b.( , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1.O s.b.b.b.~ 2.b.b.b.=.] } r :.b.b.b.7 y.b.b.7. , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1. ` b.b.b.~ 2.b.b.b.b.b.b.k k.b.b.b.O X.b.b.b.; , b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. ` b.b.1. v b.b.b.~ 2.b.b.b.b.b.b.k 5 b.b.b.8. K b.b.b.l ; b.b.b.b. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. l R R V & Y R R f A R Y R R R R 7 5 R Y R M 7 R R R a & R R Y Y n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. w f f h f h f f f f h f h f h O n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. } b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. X.b.b.b.b.b.b.b.b.b.b.b.b.b.b.; n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. @.b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. @.b.b.b.b.b.b.b.b.b.b.b.b.b.b.; n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. &.b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. =.b.b.b.b.b.b.b.b.b.b.b.b.b.b.; n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. ;.b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. :.b.b.b.b.b.b.b.b.b.b.b.b.b.b.; n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. 2.b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n. 7.b.b.b.b.b.b.b.b.b.b.b.b.b.b.; n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n. 7.b.b.b.b.b.b.b.b.b.b.b.b.b.b., n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n. a i.g.g.s.s.g.s.g.s.s.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.g.s.g.g.s.s.g.s.g.s.e.5 n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n. V b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.k.u n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n. K b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.z.h n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n. W b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. ) b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.G n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. O X.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.R O n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. O =.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b./ n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. = 1.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.} n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. ; 8.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.$.O n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. 2 y.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.:.# n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. 0 g.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.7.= n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. u k.b.b.b.b.b.b.b.b.b.b.b.b.b.b.r.2 n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. h z.b.b.b.b.b.b.b.b.b.b.b.b.s.8 n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. b b.b.b.b.b.b.b.b.b.b.b.g.r n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. G b.b.b.b.b.b.b.b.b.z.a n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. W b.b.b.b.b.b.b.b.v n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. / b.b.b.b.b.b.V n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. } b.b.b.b.Y n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. O $.b.b.^ n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. & 1.] n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. = O n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n. n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; qterm-0.7.3/src/cursor/pagedown.xpm000066400000000000000000000262231332762052600173220ustar00rootroot00000000000000/* XPM */ static char *pagedown[] = { /* columns rows colors chars-per-pixel */ "64 64 183 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c gray2", "@ c #060606", "# c #070707", "$ c gray3", "% c #0B0B0B", "& c #0C0C0C", "* c gray5", "= c #101010", "- c #111111", "; c gray7", ": c #131313", "> c #161616", ", c gray9", "< c #181818", "1 c #191919", "2 c gray10", "3 c #1B1B1B", "4 c #1E1E1E", "5 c gray12", "6 c #202020", "7 c gray13", "8 c #222222", "9 c #232323", "0 c #272727", "q c #282828", "w c gray16", "e c #2A2A2A", "r c gray17", "t c #2C2C2C", "y c gray18", "u c #313131", "i c #323232", "p c gray20", "a c #343434", "s c #353535", "d c #373737", "f c gray22", "g c #3A3A3A", "h c #3C3C3C", "j c gray24", "k c #3E3E3E", "l c #3F3F3F", "z c gray25", "x c #414141", "c c #434343", "v c gray27", "b c #464646", "n c gray28", "m c #494949", "M c #4B4B4B", "N c #4C4C4C", "B c #4E4E4E", "V c gray32", "C c #555555", "Z c #585858", "A c gray35", "S c #5D5D5D", "D c gray37", "F c #606060", "G c gray38", "H c #626262", "J c gray39", "K c #646464", "L c #656565", "P c gray40", "I c #676767", "U c #686868", "Y c #6C6C6C", "T c #6D6D6D", "R c gray43", "E c gray44", "W c #727272", "Q c #747474", "! c gray46", "~ c #767676", "^ c #777777", "/ c gray47", "( c #797979", ") c gray48", "_ c #7C7C7C", "` c gray50", "' c #808080", "] c #818181", "[ c #838383", "{ c #848484", "} c gray52", "| c #868686", " . c gray53", ".. c #888888", "X. c #898989", "o. c gray54", "O. c #8D8D8D", "+. c gray56", "@. c #929292", "#. c gray58", "$. c #959595", "%. c #979797", "&. c gray60", "*. c #9A9A9A", "=. c gray62", "-. c #A0A0A0", ";. c gray64", ":. c #A5A5A5", ">. c #A7A7A7", ",. c #A9A9A9", "<. c gray67", "1. c gray68", "2. c #AEAEAE", "3. c #AFAFAF", "4. c gray69", "5. c #B1B1B1", "6. c #B2B2B2", "7. c #B4B4B4", "8. c #B7B7B7", "9. c #B9B9B9", "0. c #BBBBBB", "q. c gray74", "w. c gray", "e. c gray75", "r. c #C0C0C0", "t. c gray76", "y. c #C3C3C3", "u. c gray77", "i. c #C5C5C5", "p. c gray78", "a. c #C8C8C8", "s. c gray79", "d. c #CACACA", "f. c #CBCBCB", "g. c gray80", "h. c #CDCDCD", "j. c #CECECE", "k. c #D0D0D0", "l. c gray82", "z. c #D2D2D2", "x. c LightGray", "c. c gray83", "v. c #D5D5D5", "b. c gray84", "n. c #D7D7D7", "m. c #D8D8D8", "M. c gray86", "N. c gainsboro", "B. c #DDDDDD", "V. c gray87", "C. c #DFDFDF", "Z. c #E1E1E1", "A. c #E2E2E2", "S. c gray89", "D. c #E4E4E4", "F. c gray90", "G. c #E6E6E6", "H. c #E7E7E7", "J. c gray91", "K. c #E9E9E9", "L. c #EAEAEA", "P. c gray92", "I. c #ECECEC", "U. c gray93", "Y. c #EEEEEE", "T. c #EFEFEF", "R. c gray94", "E. c #F1F1F1", "W. c gray95", "Q. c #F3F3F3", "!. c #F4F4F4", "~. c gray96", "^. c #F6F6F6", "/. c gray97", "(. c #F8F8F8", "). c #F9F9F9", "_. c gray98", "`. c #FBFBFB", "'. c gray99", "]. c #FDFDFD", "[. c #FEFEFE", "{. c white", "}. c None", /* pixels */ "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}. }.", "}.}. y z l p > p z z z O * V A < p z z z r < l l p 0 O p U A > r z l p z z y z f 6 z y s l 4 }.", "}.}. 0.{.{.{.{./ A.{.{.{.r l `.{.{.{.G u.{.{.{.>.G {.{.{.{.G.s X.{.{.{.Y.s O.{.{.O n.{.{.- r.{.n.X.{.P. x.{.T }.", "}.}. 0.{.^.0.{.Y.O {.{.{.{.V x.{.n.4.{.`. s.{.`.u.] G {.{.2.`.{.2.< {.{.;.P.{.4.T {.{.> Q.{.{.r A.{.8.X.{.{.l x.{.T }.", "}.}. 0.{.P.s {.{.0 {.{.G.{./ Y.{.,./ {.{.4 u.{.B. G {.{.n A.{.r.f {.{.L u.{.n.V {.{.s {.{.{.z {.{.&.X.{.{.@.x.{.T }.", "}.}. 0.{.P.n {.{.n {.{.4.{.=. `.{.,.l X.X.< s.{.P.z 6 G {.{.n A.{.h.l {.{.G u.{.B.s {.{.L {.{.{.W {.{.` X.{.{.A.x.{.T }.", "}.}. 0.{.{.^.{.B.U {.^.} {.u. {.{.,.~ ] ` > s.{.{.{.@.G {.{.n A.{.h.n {.{.G u.{.G.> {.{.@.{.`.{.&.{.{.S X.{.{.{.`.{.T }.", "}.}. 0.{.{.B.8.z X.{.n.T {.P. {.{.,.Y.{.{.p s.{.^.4.G G {.{.n A.{.h.n {.{.G u.{.A. `.{.r.{.q.{.r.{.{.z X.{.Y.{.{.{.T }.", "}.}. 0.{.P. ,.{.P.u.{.{.- {.{.,.T {.{.y u.{.B. G {.{.n A.{.h.l {.{.G u.{.B. M.{.Q.{.~ {.P.{.{.6 O.{.4.Q.{.{.T }.", "}.}. 0.{.Y. h.{.{.{.{.{.s Q.{.2.T {.{.p s.{.A.- * G {.{.n Q.{.u.f {.{.U h.{.n. q.{.{.{.s Q.{.{.{.O X.{.2.,.{.{.T }.", "}.}. 0.{.Y. Y.{.s.C {.{.S u.{.P.x.{.{.p s.{.{.{.n.G {.{.G.{.{.2.* Q.{.u.^.{.&. ;.{.{.{.- h.{.{.P. X.{.2.S {.{.T }.", "}.}. 0.{.P. - {.{.,.r {.{.] p G.{.A.q.{.p u.{.{.{.n.G {.{.{.^.n.s B Y.{.{.u.< ] {.{.Y. >.{.{.s. X.{.2.> {.{.T }.", "}.}. r O 0 > }.", "}.}. }.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}. }.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}. r } } X.X.} X.} } X.X.} } X.} } X.} X.X.} X.X.} X.} X.} } } } ` $ }.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. &.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.B }.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. >.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.A }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. O 4.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.L }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. $ r.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.~ }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. $ s.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.} }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. - x.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.$. }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. < B.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.;. }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 6 G.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.4.O }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. r P.{.{.{.{.{.{.{.{.{.{.{.{.{.q.$ }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. p Q.{.{.{.{.{.{.{.{.{.{.{.u.* }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. l ^.{.{.{.{.{.{.{.{.{.x.- }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. m `.{.{.{.{.{.{.{.B.> }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. V {.{.{.{.{.{.A.4 }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. L {.{.{.{.P.0 }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. W {.{.Y.p }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. ] ^.f }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}. }.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}. - r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r O }.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. - n.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.$. }.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. < B.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.,.O }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 6 P.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.8.O }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. r Y.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.r.O }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. s Q.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.h.* }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. z ^.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.x.- }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. m `.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.B.< }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. A {.{.{.{.{.{.{.{.{.{.{.{.{.{.{.{.P.6 }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. L {.{.{.{.{.{.{.{.{.{.{.{.{.{.Y.r }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. ~ {.{.{.{.{.{.{.{.{.{.{.{.Q.p }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. } {.{.{.{.{.{.{.{.{.{.^.l }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. $.{.{.{.{.{.{.{.{.`.m }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.O ;.{.{.{.{.{.{.{.A }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 4.{.{.{.{.{.G }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. $ q.{.{.{.~ }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. * s.{.] }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. - ~ }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. }.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.", "}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}." }; qterm-0.7.3/src/cursor/pageup.xpm000066400000000000000000000255351332762052600170040ustar00rootroot00000000000000/* XPM */ static char *pageup[] = { /* columns rows colors chars-per-pixel */ "64 64 164 2 ", " c black", ". c #010101", "X c #020202", "o c gray1", "O c #040404", "+ c gray2", "@ c #060606", "# c gray3", "$ c gray4", "% c #0B0B0B", "& c #0C0C0C", "* c #0E0E0E", "= c gray6", "- c #101010", "; c #131313", ": c gray8", "> c #151515", ", c #161616", "< c gray9", "1 c #181818", "2 c #1B1B1B", "3 c #1D1D1D", "4 c #1E1E1E", "5 c #202020", "6 c gray13", "7 c #232323", "8 c gray14", "9 c gray15", "0 c #272727", "q c #282828", "w c gray16", "e c #2C2C2C", "r c gray18", "t c gray19", "y c #313131", "u c #323232", "i c gray21", "p c #373737", "a c #393939", "s c #3A3A3A", "d c gray23", "f c #3C3C3C", "g c #3E3E3E", "h c #3F3F3F", "j c gray25", "k c #414141", "l c #444444", "z c #464646", "x c gray28", "c c gray29", "v c gray30", "b c #505050", "n c gray32", "m c #535353", "M c gray33", "N c #555555", "B c #565656", "V c #585858", "C c gray35", "Z c #5A5A5A", "A c #5D5D5D", "S c #5F5F5F", "D c gray38", "F c gray39", "G c #646464", "H c gray40", "J c #676767", "K c #686868", "L c gray42", "P c #6F6F6F", "I c gray44", "U c #717171", "Y c gray45", "T c gray46", "R c #797979", "E c gray48", "W c #7C7C7C", "Q c gray49", "! c gray50", "~ c gray51", "^ c #848484", "/ c gray53", "( c #888888", ") c #898989", "_ c gray55", "` c gray56", "' c gray57", "] c #929292", "[ c #939393", "{ c #959595", "} c gray59", "| c #979797", " . c gray60", ".. c #9B9B9B", "X. c #9D9D9D", "o. c gray62", "O. c #9F9F9F", "+. c #A0A0A0", "@. c gray63", "#. c gray64", "$. c #A4A4A4", "%. c #A5A5A5", "&. c gray65", "*. c gray67", "=. c #ACACAC", "-. c #AEAEAE", ";. c #AFAFAF", ":. c gray69", ">. c #B1B1B1", ",. c gray71", "<. c gray72", "1. c gray73", "2. c #BBBBBB", "3. c gray74", "4. c gray", "5. c gray75", "6. c #C0C0C0", "7. c #C5C5C5", "8. c #C6C6C6", "9. c gray78", "0. c #C8C8C8", "q. c #CDCDCD", "w. c #CECECE", "e. c #D0D0D0", "r. c gray82", "t. c #D2D2D2", "y. c LightGray", "u. c gray83", "i. c #D5D5D5", "p. c gray84", "a. c #D7D7D7", "s. c #D8D8D8", "d. c #DADADA", "f. c gray86", "g. c gainsboro", "h. c gray87", "j. c gray88", "k. c #E1E1E1", "l. c #E2E2E2", "z. c gray89", "x. c gray90", "c. c #E7E7E7", "v. c gray91", "b. c #E9E9E9", "n. c #EAEAEA", "m. c gray93", "M. c #EFEFEF", "N. c gray94", "B. c #F1F1F1", "V. c gray95", "C. c #F3F3F3", "Z. c #F4F4F4", "A. c gray96", "S. c #F6F6F6", "D. c gray97", "F. c #F8F8F8", "G. c #F9F9F9", "H. c gray98", "J. c #FBFBFB", "K. c gray99", "L. c #FDFDFD", "P. c #FEFEFE", "I. c white", "U. c None", /* pixels */ "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. % q U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. O 1.b.q U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. O -.I.I.j.3 U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. $.I.I.I.I.g.> U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. [ I.I.I.I.I.I.t.- U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ^ I.I.I.I.I.I.I.I.0.% U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. T I.I.I.I.I.I.I.I.I.I.3.O U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. K I.I.I.I.I.I.I.I.I.I.I.I.>.O U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. Z I.I.I.I.I.I.I.I.I.I.I.I.I.I.$. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. v G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I. . U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. k A.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.) U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. p V.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.R U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. e m.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 7 c.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.S U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 2 j.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.n U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. > a.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.k U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. * w.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.A.d U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U. f P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P S U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. n ) O U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. S I.I.*. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. n I.I.I.I.o. U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. z G.I.I.I.I.I.` U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. d A.I.I.I.I.I.I.I.~ O U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. t m.I.I.I.I.I.I.I.I.I.P U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 9 b.I.I.I.I.I.I.I.I.I.I.I.D U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. 3 j.I.I.I.I.I.I.I.I.I.I.I.I.I.n U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. > d.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.c U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. * t.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.A.d U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. % 8.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.V.t U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. O 3.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.b.q U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. -.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.j.3 U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. +.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.g.> U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.O | I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.t.- U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U. ^ I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.0.% U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U. z 8.8.8.8.0.8.0.8.8.0.8.8.0.8.8.0.8.8.0.8.0.8.8.8.0.8.8.0.8.8.^ U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. * 7 U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.A.g.H >.I.I.I.c % ,.A.I.c.n o.I.I.I.t.k I.I.H t.I.a.3 I.I.I.b.-.> U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.j.I.G.- t.I.I.I.Y [ I.A.7.I.V.> +.I.I.I.t.k I.I.H t.I.a.7 I.I.b.G.I.Q U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.e I.I.9 V.I.V.I.| 3.I.d.B I.I.k o.I.I.- O k I.I.H t.I.a.3 I.I.^ $.I. . U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.q I.I.f I.I.3.I.3. t.I.t.f 0.8.z o.I.I.% k I.I.H t.I.a.3 I.I.^ o.I.o. U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.8.I.I.k I.I.) I.j. a.I.t.t k k > o.I.I.I.,.k I.I.H t.I.a.3 I.I.d.V.I.~ U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.I.G. .Z I.I.n I.I.* a.I.t.7.I.I.Z o.I.I.m.-.k I.I.H w.I.a.3 I.I.I.I.g.q U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.t O Q I.A.) I.I.e a.I.t.H I.I.Z +.I.I.% f I.I.H t.I.a.7 I.I.| - U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.> .I.I.I.I.I.B w.I.t.f I.I.Z +.I.I.O p I.I.K t.I.t.3 I.I.) U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.> 3.I.V.Y I.I.Q -.I.V.| I.I.Z o.I.I.t.t.3 I.I.$.m.I.,.7 I.I.^ U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. [ I.I.> g.I.d.O I.I.$.d A.I.I.a.I.Z o.I.I.I.I. ` I.I.I.V.d 3 I.I.) U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. 9 k f O f k t f k e 3 D k > k > q k k f k e D S 3 % f k 7 U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U. U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U." }; qterm-0.7.3/src/cursor/prev.xpm000066400000000000000000000252051332762052600164710ustar00rootroot00000000000000/* XPM */ static char *prev[] = { /* columns rows colors chars-per-pixel */ "64 64 150 2 ", " c black", ". c #010101", "X c gray1", "o c #040404", "O c gray2", "+ c #070707", "@ c gray4", "# c #0B0B0B", "$ c #0C0C0C", "% c #0E0E0E", "& c #101010", "* c #111111", "= c #131313", "- c gray8", "; c #151515", ": c #161616", "> c gray9", ", c #181818", "< c gray10", "1 c #1B1B1B", "2 c gray11", "3 c #1E1E1E", "4 c gray12", "5 c #202020", "6 c #232323", "7 c #252525", "8 c gray15", "9 c #272727", "0 c #282828", "q c gray16", "w c #2A2A2A", "e c #2C2C2C", "r c #2D2D2D", "t c gray18", "y c #2F2F2F", "u c gray19", "i c #323232", "p c gray20", "a c #353535", "s c gray21", "d c #373737", "f c #3A3A3A", "g c gray23", "h c #3C3C3C", "j c gray24", "k c #3E3E3E", "l c #3F3F3F", "z c gray25", "x c #414141", "c c gray26", "v c #434343", "b c #444444", "n c #464646", "m c #484848", "M c #494949", "N c gray29", "B c #4E4E4E", "V c gray31", "C c #505050", "Z c gray32", "A c #535353", "S c gray34", "D c gray35", "F c gray37", "G c #5F5F5F", "H c gray39", "J c #646464", "K c #656565", "L c #6A6A6A", "P c gray44", "I c #717171", "U c gray46", "Y c #767676", "T c #777777", "R c #797979", "E c gray48", "W c #7C7C7C", "Q c #7E7E7E", "! c #808080", "~ c #818181", "^ c gray51", "/ c #848484", "( c gray53", ") c #888888", "_ c #898989", "` c gray55", "' c #8E8E8E", "] c gray57", "[ c #939393", "{ c gray59", "} c #979797", "| c #989898", " . c #9B9B9B", ".. c #9D9D9D", "X. c gray62", "o. c #9F9F9F", "O. c #A0A0A0", "+. c #A2A2A2", "@. c gray64", "#. c gray65", "$. c gray66", "%. c #AAAAAA", "&. c gray69", "*. c #B1B1B1", "=. c gray70", "-. c gray71", ";. c #B7B7B7", ":. c gray72", ">. c #B9B9B9", ",. c gray75", "<. c #C1C1C1", "1. c gray77", "2. c #C6C6C6", "3. c gray78", "4. c #C8C8C8", "5. c gray79", "6. c #CBCBCB", "7. c gray81", "8. c gray82", "9. c gray83", "0. c #D5D5D5", "q. c gray84", "w. c #D7D7D7", "e. c #D8D8D8", "r. c gray85", "t. c gray86", "y. c gainsboro", "u. c #DFDFDF", "i. c gray88", "p. c gray89", "a. c #E4E4E4", "s. c #E6E6E6", "d. c #E7E7E7", "f. c #EAEAEA", "g. c gray92", "h. c #ECECEC", "j. c #EFEFEF", "k. c gray94", "l. c #F1F1F1", "z. c gray95", "x. c #F4F4F4", "c. c gray96", "v. c gray97", "b. c #F8F8F8", "n. c #F9F9F9", "m. c gray98", "M. c gray99", "N. c #FDFDFD", "B. c white", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . 7 . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . N b.J . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . f c.B.B.Z . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . e j.B.B.B.c.z . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. 6 s.B.B.B.B.B.z.i . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. - t.B.B.B.B.B.B.B.f.7 . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. % 7.B.B.B.B.B.B.B.B.B.u.< . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. + <.B.B.B.B.B.B.B.B.B.B.B.q.* . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . &.B.B.B.B.B.B.B.B.B.B.B.B.B.3.@ . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . o.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.;.+ . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . ` B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.@.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . T B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.] . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . H B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.W . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . Z B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.L . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . z b.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.S . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . i z.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.b.n . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . 7 f.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.c.a . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.. < u.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.j.7 . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.. * q.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.i.< . V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.. @ 4.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.q.- . V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.. . ] q.q.q.q.q.q.q.q.q.i.B.B.B.B.B.B.B.B.B.B.B.B.B.B.c.q.q.q.q.q.q.t.q.q.q.+.. . V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.. . . . . . . . . . . . . i B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . . . . . . . . . . . . . V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.. . . . . . . . . . . . . . e B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. 7 B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. 6 B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. 3 B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. < B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. - B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. * B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. @ B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. + B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . B.B.B.B.B.B.B.B.B.B.B.B.B.B.,.. . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . e i e i e i e e i e i e e e 7 . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.. . . . . . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . N V V V N e - . . . . . n Z V N j 0 3 . . . . . + Z V V Z V Z j . . a V Z V i . < Z V V V . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.B.B.B.$.- . . . i.B.B.B.B.B.B.>.< . . . - B.B.B.B.B.B.3.. . | B.B.B.;.. L B.B.B.s.. . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.B.B.B.B.` . . . u.B.B.B.B.B.B.B.q.. . . < B.B.B.B.B.B.3.. . L B.B.B.q.. ~ B.B.B.3.. . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.| u.B.B.8.. . . i.B.B.B.o.s.B.B.B.0 . . < B.B.B.B.t.q.@.. . N B.B.B.j.. | B.B.B.+.. . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a _ B.B.s.. . . i.B.B.B.j ` B.B.B.z . . - B.B.B.B.+ . . . . 6 B.B.B.B.% &.B.B.B.W . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a R B.B.c.. . . u.B.B.B.j _ B.B.B.a . . - B.B.B.B.+ . . . . . b.B.B.B.7 3.B.B.B.F . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a { B.B.z.. . . i.B.B.B.F 3.B.B.B.@ . . < B.B.B.B.e 0 - . . . q.B.B.B.n t.B.B.B.j . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.&.z.B.B.8.. . . i.B.B.B.B.B.B.b.| . . . - B.B.B.B.B.B.| . . . &.B.B.B.D z.B.B.B.< . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.B.B.B.B.o.. . . u.B.B.B.B.B.B.o.* . . . < B.B.B.B.B.B.{ . . . _ B.B.B.T B.B.B.c.. . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.B.B.f.@.% . . . i.B.B.B.o.s.B.B.i.@ . . < B.B.B.B.u.u./ . . . H B.B.B.o.B.B.B.q.. . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.V - . . . . . . i.B.B.B.j | B.B.B.f . . - B.B.B.B.+ . . . . . j B.B.B.4.B.B.B.;.. . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a . . . . . . . u.B.B.B.z ~ B.B.B.n . . - B.B.B.B.+ . . . . . - B.B.B.c.B.B.B.] . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a . . . . . . . i.B.B.B.j ~ B.B.B.V . . < B.B.B.B.+ . . . . . . j.B.B.B.B.B.B.P . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a . . . . . . . u.B.B.B.z ~ B.B.B.V . . - B.B.B.B.$.$.$.+ . . . 4.B.B.B.B.B.B.V . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a . . . . . . . i.B.B.B.z W B.B.B.V . . < B.B.B.B.B.B.B.+ . . . +.B.B.B.B.B.B.e . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . f.B.B.B.a . . . . . . . i.B.B.B.j ~ B.B.B.V . . < B.B.B.B.B.B.B.+ . . . W B.B.B.B.B.B.@ . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . T W ~ W < . . . . . . . L ~ ~ W 6 z ~ ~ W 7 . . @ W ~ ~ W ~ ~ ~ . . . . e ~ ~ W ~ W R . . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; qterm-0.7.3/src/dbus.cpp000066400000000000000000000135071332762052600151150ustar00rootroot00000000000000// // C++ Implementation: DBus // // Description: // // // Author: hooey , (C) 2008 // // Copyright: See COPYING file that comes with this distribution // // #include "dbus.h" #include "imageconverter.h" #include #include namespace QTerm { DBus * DBus::m_instance = 0; static const QString dbusServiceName = "org.freedesktop.Notifications"; static const QString dbusInterfaceName = "org.freedesktop.Notifications"; static const QString dbusPath = "/org/freedesktop/Notifications"; DBus * DBus::instance() { static QMutex mutex; if (!m_instance) { mutex.lock(); if (!m_instance) m_instance = new DBus; mutex.unlock(); } return m_instance; } DBus::DBus() :m_notificationAvailable(false),m_idList(),m_serverCapabilities() { m_idList.clear(); QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); m_notificationAvailable = interface && interface->isServiceRegistered(dbusServiceName); if( m_notificationAvailable ) { qDebug() << "using" << dbusServiceName << "for popups"; createConnection(); } // to catch register/unregister events from service in runtime connect(interface, SIGNAL(serviceOwnerChanged(const QString&, const QString&, const QString&)), this, SLOT(slotServiceOwnerChanged(const QString&, const QString&, const QString&))); } void DBus::createConnection() { bool connected = QDBusConnection::sessionBus().connect(QString(), // from any service dbusPath, dbusInterfaceName, "ActionInvoked", this, SLOT(slotNotificationActionInvoked(uint,const QString&))); if (!connected) { qDebug() << "warning: failed to connect to ActionInvoked dbus signal"; } connected = QDBusConnection::sessionBus().connect(QString(), // from any service dbusPath, dbusInterfaceName, "NotificationClosed", this, SLOT(slotNotificationClosed(uint,uint))); if (!connected) { qDebug() << "warning: failed to connect to NotificationClosed dbus signal"; } checkCapabilities(); } void DBus::checkCapabilities() { QDBusMessage message = QDBusMessage::createMethodCall( dbusServiceName, dbusPath, dbusInterfaceName, "GetCapabilities" ); QDBusReply replyMsg = QDBusConnection::sessionBus().call(message); m_serverCapabilities = replyMsg.value(); } void DBus::slotServiceOwnerChanged( const QString & serviceName, const QString & oldOwner, const QString & newOwner ) { if(serviceName == dbusServiceName) { if(oldOwner.isEmpty()) { m_idList.clear(); m_notificationAvailable = true; qDebug() << dbusServiceName << " was registered on bus, now using it to show popups"; // connect to action invocation signals createConnection(); } if(newOwner.isEmpty()) { m_idList.clear(); m_notificationAvailable = false; qDebug() << dbusServiceName << " was unregistered from bus, using passive popups from now on"; } } } bool DBus::sendNotification(const QString & summary, const QString & body, const QImage & image, QList actions) { QDBusMessage message = QDBusMessage::createMethodCall( dbusServiceName, dbusPath, dbusInterfaceName, "Notify" ); uint id = 0; QList args; args.append("QTerm"); args.append(id); // If I send 0 directly, this will be an int32 instead of uin32, resulting an unknown method error. // args.append(QString()); args.append("qterm"); // Icon name args.append(summary); // Title args.append(body); // Text QStringList actionList; if (m_serverCapabilities.contains("actions")) { foreach (DBus::Action action, actions) { if (action==DBus::Show_QTerm) { actionList.append(QString::number(DBus::Show_QTerm)); actionList.append("Show QTerm"); } } } args.append(actionList); QVariantMap map; if (!image.isNull()) map["image_data"] = ImageConverter::variantForImage(image); args.append(map); args.append(-1);//-1 means: notification server decides message.setArguments(args); QDBusMessage replyMsg = QDBusConnection::sessionBus().call(message); if(replyMsg.type() == QDBusMessage::ReplyMessage) { if (!replyMsg.arguments().isEmpty()) { uint dbus_id = replyMsg.arguments().at(0).toUInt(); m_idList.append(dbus_id); } else { qDebug() << "error: received reply with no arguments"; } } else if (replyMsg.type() == QDBusMessage::ErrorMessage) { qDebug() << "error: failed to send dbus message"; } else { qDebug() << "unexpected reply type"; } //TODO: handle errors return true; } void DBus::slotNotificationActionInvoked(uint id, const QString action) { if (m_idList.contains(id)) { if (action.toInt() == DBus::Show_QTerm) { closeNotification(id); emit showQTerm(); } } } void DBus::slotNotificationClosed(uint id, uint reason) { if (m_idList.contains(id)) m_idList.removeAll(id); } void DBus::closeNotification(uint id) { if (m_idList.contains(id)) { m_idList.removeAll(id); QDBusMessage m = QDBusMessage::createMethodCall( dbusServiceName, dbusPath, dbusInterfaceName, "CloseNotification" ); QList args; args.append(id); m.setArguments( args ); bool queued = QDBusConnection::sessionBus().send(m); if (!queued) { qDebug() << "warning: failed to queue dbus message"; } } } bool DBus::notificationAvailable() const { return m_notificationAvailable; } } // namespace QTerm #include qterm-0.7.3/src/dbus.h000066400000000000000000000023431332762052600145560ustar00rootroot00000000000000// // C++ Interface: DBus // // Description: // // // Author: hooey , (C) 2008 // // Copyright: See COPYING file that comes with this distribution // // #ifndef DBUS_H #define DBUS_H #include "qtermparam.h" #include #include #include #include #include namespace QTerm { class DBus: public QObject { Q_OBJECT public: enum Action { Show_QTerm }; static DBus * instance(); bool notificationAvailable() const; bool sendNotification(const QString & summary, const QString & body, const QImage & image=QImage(), QList actions = QList() ); signals: void showQTerm(); private slots: void slotServiceOwnerChanged(const QString & serviceName, const QString & oldOwner, const QString & newOwner); void slotNotificationActionInvoked(uint id, const QString action); void slotNotificationClosed(uint id, uint reason); private: DBus(); void createConnection(); void closeNotification(uint id); void checkCapabilities(); static DBus * m_instance; bool m_notificationAvailable; QList m_idList; QStringList m_serverCapabilities; }; } #endif // DBUS_H qterm-0.7.3/src/doc/000077500000000000000000000000001332762052600142135ustar00rootroot00000000000000qterm-0.7.3/src/doc/CMakeLists.txt000066400000000000000000000026621332762052600167610ustar00rootroot00000000000000CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/src/pic/qterm.png ${CMAKE_CURRENT_BINARY_DIR}/qterm.png COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/qterm.qhp.in ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhp) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/index.html.in ${CMAKE_CURRENT_BINARY_DIR}/index.html) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Script.html ${CMAKE_CURRENT_BINARY_DIR}/Script.html COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/about.txt ${CMAKE_CURRENT_BINARY_DIR}/about.txt COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/doc.css ${CMAKE_CURRENT_BINARY_DIR}/doc.css COPYONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/qterm.qhcp ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhcp COPYONLY) if (QT5) ADD_CUSTOM_COMMAND( OUTPUT qterm.qhc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhcp DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhp COMMAND Qt5::qcollectiongenerator ARGS qterm.qhcp -o qterm.qhc COMMENT "Compiling Qt help collection project qterm.qhcp" ) else(QT5) ADD_CUSTOM_COMMAND( OUTPUT qterm.qhc DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhcp DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhp COMMAND ${QT_QCOLLECTIONGENERATOR_EXECUTABLE} ARGS qterm.qhcp -o qterm.qhc COMMENT "Compiling Qt help collection project qterm.qhcp" ) endif(QT5) ADD_CUSTOM_TARGET(help_target DEPENDS qterm.qhc) if (NOT APPLE) INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/qterm.qhc DESTINATION share/qterm/doc ) endif () qterm-0.7.3/src/doc/Script.html000066400000000000000000000244741332762052600163600ustar00rootroot00000000000000 Script - QTerm Documents
Script

Introduction

Starting from the version 0.5.6, QTerm supports scripts with QtScript. With the greatest and latest script support in QTerm, you can:

  • Do boring and repeating operation automatically.
  • Change the default behavior of QTerm with system scripts.
  • Try new functions with script (In order to do this you might want to have Qt bindings for QtScript installed, they can be downloaded from http://labs.trolltech.com/page/Projects/QtScript/Generator)

How to Use

You can run simple scripts using Script->Run, for example, save the following code

for (var i = 0; i < 10; i++)
    QTerm.sendString("q");

to a script file, run it in QTerm will send 10 q's to the server.

To use the system control script. Open the address book, in the very end of the General tab. First enable the Load Control Script checkbox, then choose your system script.

How to Debug

If you want to develop serious/complicate scripts for QTerm, it is very helpful to have QScriptEngineDebugger enable. This feature is introduced in Qt 4.5, make sure your qt is new enough. Then you can run cmake with -DQTERM_ENABLE_SCRIPT_DEBUGGER=ON, for example:

cmake .. -DQTERM_ENABLE_SCRIPT_DEBUGGER=ON

Then do the usual make, make install to install QTerm

After you enable the debugger. It will pop up every time the script engine catches a exception. You can also call the debugger any time by Script->Debug.

How to Write a Script

Here is a list of functions you can call in the scripts, they are all in the "QTerm" object, so for example if you want to call "version()" you should call "QTerm.version()" instead.

QString version()

   Return the version of QTerm.

int caretX()

int caretY()

   Return the x or y coordinate of the current position of caret.

int columns()

int rows()

   Return the number of columns or rows of the current window.

int charX(int x, int y)

int charY(int x, int y)

   Given the graphical coordinate in the current window, convert it to the
   text coordinate.

int posX()

int posY()

   Return the x or y coordinate of the mouse.

QString getUrl()

QString getIP()

   Return the URL or IP address under the mouse pointer, if no url is
   detected an empty string will be returned.

bool isConnected()

   Check if the current window is conneced to a BBS server.

void reconnect()

   Reconnect to the BBS server, do nothing if the current window is already
   connected.

void disconnect()

   Disconnect from the current BBS server.

void buzz()

   Shake QTerm.

void sendString(const QString & string)

   Send string to the BBS server.

void sendParsedString(const QString & string)

   Send parsed string to the BBS server. you can use '^M' to represent the
   return key for example.

void osdMessage(const QString & message, int icon = 1, int duration = 0)

   Show message in the osd, icon = 0, 1, 2, 3 means No/Info/Warning/Error
   icon. Duration is in the unit of ms, 0 means forever.

void showMessage(const QString & message, int duration = -1)

   Show message in the notification area or system tray. duration is not
   really useful for now.

void cancelZmodem()

   Cancel the current zmodem transfer.

void setZmodemFileList(const QStringList & fileList)

   Set the list of files you want to upload with zmodem. call it before your
   start zmodem to avoid the file selection dialog.

QScriptValue getLine(int line)

   Get the object represent the 'line' line text.

QScriptValue window()

   Return the current window object.

bool addPopupMenu(QString id, QString menuTitle, QString icon = "QTerm")

   Add a menu item to the popup menu, you can access to the new action with
   QTerm.id property if the method succeed. menuTitle is the text displayed
   in the menu. currently icon parameter has no effect. Return true if
   succeed, otherwise it will return false.

bool addUrlMenu(QString id, QString menuTitle, QString icon = "QTerm")

   Add a menu item to the url popup menu, you can access to the new action
   with QTerm.id property if the method succeed. menuTitle is the text
   displayed in the menu. currently icon parameter has no effect. Return true
   if succeed, otherwise it will return false.

void addPopupSeparator()

void addUrlSeparator()

   Add separators to the popup/url menu so they will look nicer.

void loadScript(const QString & filename)

   Load external javascript files, QTerm will search the file under the
   "scripts" directory under the local path (e.g.SHOME/.qterm) first and then
   search the global path (e.g. /usr/share)

void globalPath()

   Return the global data path, for example, if you installed QTerm to /usr,
   then it will return /usr/share.

void localPath()

   Return the local data path, $HOME/.qterm under Linux.

QString getSelectedText(bool rect = false, bool color = false, const QString & escape = "")

   Return the current selected region. rect should always be false currently.
   color indicate if you want the copy the attribute of the text, escape is
   only useful when color is true, indicate how you want to represent the
   escape sequence.

void openUrl(const QString & url)

   Open the url using the http browser specified in QTerm.

void loadExtension(const QString & extension)

   Load extension, if you want to use the classes in Qt bindings, you
   need to load them first.

How to Write a System Script

In order to change the behavior of QTerm. You can reimplement the following functions in the system script, again all the functions are members of 'QTerm' object, for example init() should be understand as QTerm.init():

There is a property which is important for this usage: QTerm.accepted. It should be set to true if you do not want the native QTerm code to handle the event any further, otherwise it should set to false.

init()

   This function is called every time the system script is loaded. You can
   show messages or initiate some variables here.

setCursorType(x,y)

   Determine what kind of mouse cursor should be shown in the current
   context, if mouse release events is not handle by the script this function
   also determine how the mouse release will be handled.

setPageState()

   Determine the current state of the BBS page, useful for further determine
   the mouse behavior

isLineClickable(x,y)

   Determine if the current line under mouse cursor is clickable, x and y is
   the mouse text coordinate.

getClickableString(x,y)

   Determine if the string under mouse cursor is clickable, x and y is the
   mouse text coordinate, the string should be returned and will be
   highlighted by QTerm.

onMouseEvent(type, button, buttons, modifiers, pt_x, pt_y)

   Handle the mouse event, type, button, buttons, modifiers follow the
   definition in QMouseEvent, pt_x and pt_y is the graphical coordinate of the
   mouse pointer.

onKeyPressEvent(key, modifiers, text)

   Handle the key press event, the definition of the arguments again follows
   QKeyEvent.

onWheelEvent(delta, buttons, modifiers, orientation, pt_x, pt_y)

   Handle the mouse wheel event, the definition of delta, button, modifiers,
   and orientation follow QWheelEvent. pt_x and pt_y is the graphical
   coordinate of the mouse pointer.

onNewData()

   The function will be called every time QTerm gets new data, you can
   manipulate the received data a little bit.

antiIdle()

   Determine how the anti idle event should be handled.

autoReply()

   Determine how to reply the incoming message. Useful for those who want to
   write BBS robots.

checkUrl()

   Determine if there is a URL under the mouse pointer, return the URL if
   found, otherwise return a empty string.

checkIP()

   Determine if there is a IP address under the mouse pointer, return the URL
   if found, otherwise return a empty string.

onTelnetState(int state)

   Handle telnet events

onZmodemState(int type, int value, const QString& msg)

   Handle zmodem events

endOfArticle()

   Implement this to check the end of articles for downloading articles

There is also a signal: scriptEvent(const QString& type) which can be used by the script to emit and handle signals

qterm-0.7.3/src/doc/about.txt000066400000000000000000000000461332762052600160660ustar00rootroot00000000000000QTerm is a BBS client written in Qt. qterm-0.7.3/src/doc/doc.css000066400000000000000000000012361332762052600154740ustar00rootroot00000000000000body { border: 1px solid #000000; background: #EEF3F5; margin: 0px; padding: 0px; } div.Heading { padding-top: 5px; padding-bottom: 5px; padding-left: 5px; background: #adc4d2; font-weight: bold; font-size: 24pt; border-bottom: 1px solid #000000; } span.HeadingSmallText { font-weight: bold; font-size: 12pt; } div.LongHelp { margin: 20px; font-style: italic; } div.Description { border-top: 1px solid; } table.PropertiesTable { } tr.PropertiesTableHeading { background: #85a8bc; } div.toc { background: #DDDDDD; border: 1px solid #000000; margin: 2em 2em; padding: 1em; width: 30em; } qterm-0.7.3/src/doc/index.html.in000066400000000000000000000022151332762052600166150ustar00rootroot00000000000000 Main - QTerm Documents
QTerm @QTERM_VERSION_MAJOR@.@QTERM_VERSION_MINOR@.@QTERM_VERSION_RELEASE@

QTerm is a BBS client written in Qt, thus running on multiple platforms, e.g. Linux, Windows, Mac OS X.

qterm-0.7.3/src/doc/qterm.png000066400000000000000000000526751332762052600160700ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx}p}ǿ涣,cKiQuڤ&k$k.ڮI.˥e ~g٘p6`,Xؖ-#ɖ%K,YeYe#d[!^C!4dl@w~^IAts/A s 1˾vawȹwtw9]&˲m]鷿3ur?S_ l+#k0L15.bP(S#LN4c|b C]~{Xkmik{_ `jԕ] AH"dFP1GICB w4mM{Lf͛]_OF%'a!ET+A04ƕLÙgje&}LL 3~X`+3 WP -AZU?A8cp/O]&|LN4y<0"0>}.zXmz͵gNF{(@;0o>!ƙFzq/czxߍw! p>#F { FrX .zVlvZ](,{nD* *k\3~X @X:tX:Z±t:a wVw34C@6ZW*QYY]{} j(ĥaFzXtEGILA 1& j f04X,V= xv34 K1SIf+J/>n<6N3V4zJ>صq㚿B<,L!x_ҤQ -: sZUѤ^U*jjOQPa INވDl&a-deIۃLCQ./!NULzU5sZUahf7`wp{ 8v38͠A}=. 6{U5^}/E=S:嵷 lbh1Q5AyFqa 䒝 ғOXڵDE-#*z&Mjގȿ&T^M')"6bh{oXERr)dfn!'w\**TUF%m=65&k݀a׉A]#M͵9ZғK!ozk' PqC\ddEYFWO]}'RV^ ;زUBBbW Z1q8&oEkOb҈^IZvm%?/r㇨VVР:FSM92'ػXKZYYҪ !iwi[>{E**e`_v&)_ʨegZ [[HЅ sҬjgN'Kzx.K>^+JGyC>Q~Z2«E~^.C|/%Ynaveؙ6#"ɈH#1l_TN,JKe Q NM[%q;o^/lXm̙2 XY xbs$ll䉄ff'y1wJ >:VJ62NWبDքɬjp iz ҏ~{BBa83? jV8ގ^c%j%> @ x_MOף5 Su,L3DZ;IMd#,F-bm[/XZ*MJ&saQM&qCJQMi7M$W6lq7nɴMAQa8b$&h(&GFt# DFͯFTaZm}s\Mh٫e\J)0b0lf]^6 1mC kOс?vbIG6B ܗ\Gh9N,|d?,ky*/} <0 sQʁΆDVq6l=%X,۔FCS--n{uu45RɮZ J YA-"k nI"WWJِ%oR$RY+(fm&cV5ͮyul> H"?nd{ݎj\.;Mͻ.:v4a4p-xWWs"*/  Dɓ^,e䒾4H!Ռl#lny+'ՙ /BvK1,NAx, فDVq猼?`،f*y`"8p5b*Wuy9,LjƉ3" 5L]ˏ?gS<XTE$$DL,$j^w[9)r᳭V]w{Egax$ƊDTqߤdh,n©69qSZwY2ez9{yBD?[\hstwp(:[6~ s1- -GgaLv`9Bz3,Ǚ[t&bλJ"dkRUUJn .W -{Tfj3[%[ٰaioK"ܧ$~j?e۫$Z ed,#9y6/!![1󊾃MGt+|ZqJZ +9{kzHͪ7Pm-A:Nr٩ݎٲMisx駒D"ﵖXY̚u٤,L-M$-@*y!M!H÷:x>F&tf|-$Y*df)◝6K㰪.PGkk=kuи{•>'ټ<ŵ"2ZDyΫm]}92STRtg$jHYkiMV]ׁ 6]I@AQ;`Pt5nD4[Xm W]-)ZtqM &ci*w}DyA\;.&ԩ ?wORx&P|X3!04'q;ͰLB$_ͯeY3{k<;,7P|#M\2,B 7F_+.PDROh9)F#F&ԽE]kajevZ22Sر׊H_.pka?]G7% \NPl"-!cWtK `n L3T{#J{*?B!'*ef,;q)naeM@vk9[6 qiOHWC}.௖KpTw""g_㑠\tN2t?!zTA!a; :5nfxE<. LCw9T2< +" rd .D&daIס}tpCA7Om&Jjshx3DdMpw_p&r VOAd/2@`c% լOH`.a7~uMwO;= [5 k-Xԏhxyԋe","0]S6lmT>TҿTB=3g'!2nfZ%MƘ?n "+^O6E"dj.;ٵ#=v}ģv;J/e}IDB"2Bo @Ngo9©+3QYYm'yhAѕ|+)AOrτtծmxQYΠ>hiȻ5rhGHO;]x!ps҈х1m'E$\DjOe3}-"r}o7ݯjŤ$d*-'dK/Se?ID{QF>L|+]L# 0S(38v q3,€oZ%ȴx=+9ϡíx7`a8}Rf%ƠapG.*#ko>ùYa' Akxlco9Vę H0TZ< z(N]Mwd|Gk !~a4%M=ǻ=I>ހDi&rr34 z\+]Ӝ:Cס}8m-60?LcDЭ(woD1C5y3E{FsU/ZzqO qox E~@d9)A"]=G;8 h]{7b`0lau'1jԋ"+"՞E䧢+a@~w{>q-86*M%bR܇wQQ_YLӓPDcbd2'ct' mb'hb(h\XJ]e¾+""VED%*Q) bEGBOWwcH6D6:OKj Ƈk4]*;VCuAx94Qss%4]Ӝ1qBئP3ƿ_ C^4>C$kNT8FJݷ ۆ*ssAjo IDATX ηjVճM$|p,kt#C6@k`ܸYBˆ-B!bO|R2q6d8)AHehh BKK/8ͅA\3,2:S4ʹ=vfL/}4~a B"ڮUSmW]X}D¯AmmVlt\J\mi+"L}wG1+'}+V@˩oږlu> ?}vR#ZT򋑙uN ie'T3, P: ha&1@>Τc f P({S*\}6|a կ"aP+;E+ӀrB2d)]i= b*ʁJDž^(r4ˠX6ˋ { lhz/]]P| WMpٰ22B,|ZB;B}Gy `c )CrJ t,|@̒pFI-ؑt{BU0&8 '/82[;}hęOX%BϜ0^i՜~?0O2h9e[:L\P!xnI+Zx(nF rsC8±z`lB>f!"O[=G?5+A䡼)8Q2H2%fTZ;'xa*',B4R̖G(Ujs5c(, dh9Cͮ #Cx:"A`'$=bfEeͣM:vp`TP!D i92x%zƦk^'@aQ6#nb -LMX)RW|&<%O. hFy_̂q0GˑU:?tW @MM L\껣(lHv;CG9L&{, MDzI@^ ž#b` mhkoԔ/Qѧ`p.˗/;Mq`"#BH07㐁^$.tvGc5\N;~"b-g X)K14,TU Qm`2@XTH9tat켏Ʀ 9HH[{@L̞#tKe\}*`{@TSMڷ.Xbb7_2yEP5a/CqiPYo ud*/(%9xdo4,K1\^He]EtĻ@fzx2-aSX/Lp:EHLko im/aSM !UjZ<<"\ff8+S8&Enqd+vRm-]]O%b'?şrsP5QJ/Cr ONđq&Oy鈈 ap8l^*rb3a-BܻscϤ큌:(*ErJ,@Br+܅p̰ +v #f1粠 Y<Ttk? 1/F'ŀr/@d: \4p>{ 藇Iplp8l;фcL(hDP__>4܍^<@߁_)? QR367/B7Bo/3*|%\+ XC)PѣWr 껂dOv A9 f Fp*dhk@X48aC[[3I$|B&,$w uaxTt13ܸ!ĕ|KKZxv:z!) _n/w_omuAf XLzF vt(AE ˦@LR@v#Kl1>.@ 9x``yl1G$Tց'TjPVQ ) 7 `*ָcC ~p8tSB 3 HzZ18DL<@SS~ b K$G|]ic.X,c82Y؋hd& RXa_Y,EЧVip7:v`}f tc/Ua .+F xA@<P AALSAvafsC"C QXwޙҰLAH"Hۣi1:%yq[3n* d ' [-74\rze2\P8&bf3Pd<;OBeC< ;+ aR9gRtuQYXJ&G7_ _Li{W[Ҋ4ݮCO4HOO'Pdp,ZŽ|;Ow9 '3 KΘ`:gMo )о8_U^mTn?X/::T +gR ᰡQ&h”RnׄwKĐwPmbzy|k bt8jl{ :V9nu Tv`mEc#WƦ5fHz͹&n(.CjZ"X40K2||-+U3j ssEZHT8Pw H2s0 ,@ fgS&b\V˙ 8\6qք]-\0"tןufܾ~!DEe!2AbbEU`@˅'_=~: *Pr K+-M:cVZ5= +d'6?ڹ?L>{._}gF&A;AT4@}ÏY;Gm-}v?B(ˀC`( 8N2~KF++ X*zXl-Ӕ(ޕE}ט I ӦmMm2TILއؖ!@OOZ.Ƌ SU0}端p(FSػwV0sIh"n|rw|:04҃ftt03RR3#p2UVaQո?,="~y~\Ox' ӗoŴaxfY̟L3%. >ラo>5:IW_)DF)ٻͬg~# |d7Eg瞰!@"w{@>X?>e,04ˠCS5w6m|$Pydx)Τ̐,%' cx/ +scfe<4Yk: d3$-0B0B ~`xk[s5 f8rfLK ?ČuL!)!ؔ}0d<Z̍!(13(ϯ;k88Z~xЪ1nv<L Z]Fjj2EmFpH7SLnEw$nS *Kgut1bt#a']r*p0hVG<' \ J*mùr8E9QM"jjРP0 %d%L&au|ad By2HʔFm PIR2A2eDD'q!(!A(UA(VIT 'QamP.h=@˷ᵠ waΐ% !a\hcv:M?Cܮ ۭDSշ:02ҋF04AI,2EX-1TuJY^%|2)3c%~/1J}_'um& +|GӃL%~+b$Wھĝa# QUBvy$&#L (^T6gAkv\$аuѯdDFJ @,ܹo_!̟h9<:kE=V@G'kGNb,lKk~_s\xk Ѭ ٻ"qDz~,_(gi#vX-F:=zvlic VImBH8$|Ons6xRF~v MUhlHЎhl㶊_CMMTeX%*a>g' GI jfd/_Z^?yMkPqw@́98 {#KWYZ'K뗀?h o?^UIW nc+=ztYN2M\6E\Ġ  4P%8 WA'Q.7%b@+4_~9jVZ/ǑfE9T,boup$xDjkjZjihFO}Qq$еԠbnE`} ( yG1 p + Ӡ5ɠ@@ k&b{pFLHMBT UMV/ߺBl bbdNt`}V]k-: z׆ еԢZâ@CAK 3ۜRde *؇ XOg"h6лNUN>>\>;cͯ? ;;d[sailbe&?VDxvs jˡk59ޛ0r$0thhD Vac.Т <:sx [1g @H;SadW-- =.ur646U'.|5ճdmb]mȪc N۽;n[2uе֡#AMIЭCM75נNxrDSVŃm8˴%ep?%p$ Z"- (0690/~nsXgo_ZRdAl=ГS8̴v A G9~C yh&8z23q[|}5|Πq9S8-4LIIS PSA4HpCGWn5X?В-"d)P d*"iIJ92}ςN0[ﶃy 6f{@FF166w?ƽ{ceAGzX2Mr^3)8v<VAzeWIDATa˖M+T&90L%gWXGU|h\tumlEo/3 &"7p O@X>/6!j/ j8J`RVgu Lݻx^w;*>9?+~yyVF7 FNc{MNt#tlԅ>0q19~Ė?@k?&S4MygR>-U桺FƦjihB3 f" ظuo(B{Akip p+4@ƒ8"C aǦu6d8{+v\#[-.0ThKt 'О,TV)q 7ehfl6亰8mT!3,Zi b18o>0{]yTgNhϭޙv:S{gmQhug. q wEDL AB 6hB@m=U7'!&{ *ƍ 2y,B_^`BM] Ք D.Ŭ [g`3fs`+H*sh"0M[R)*8)F;%nwBӳ#p؜of>GnJsxgDR:JJըA  YJ<"/`<6e(bϱ?g?78Fp sckV Mr Ty jJfUkKQSK2՗AںR}7Е!FWbZ0kII*X{dXBj! QN| c%Yq*#*I9 6'aK"ƸH1F$h4sC$%l&E$pN[ 6u9e)E.x==ݦxH|B=}|<3b\ϖCF ! WBWF&sR!KCx,Z0QkF>g !B*G;6|HK ''JTЗkPYE9iqCc9xL_dwrɒ;3;2B v3 VJ'F_!>&6vTklM_5%eDkQ_;/<:B Cӧ'␝FSY>zUWBWF:r$bq),拟 Aʨ :|ʕK%#K<5eҠ8xQSsYKKPZflҹ6JrٗjM6]fO!F/;AٹE(b7o;Yw l2p@5ئ'=f -VAV }?*rn3"T= P*&z˭I7Ls W0Q{?g{ixyH$1HO"'' \ PQE-hh(GcSn5SPf,GA{T{_|eeXDb)8ۙ8[2SdJek _$0:{;O@?6UP5CAϜ9ݞjoL_ʛA@SNu e $\=lWXdTFѿ y+A&F;K Xx(ʀF N}$ P+n5D[kpoQS Ck Z մAe[}1&ɋ0ȸE`SMYB7DK3XGR,,cnյԊuh?ы{qo5(ҩAB]|1W.\UE"YHD#?Y-Ψƿ'Ls) .,YӾ~ HM@C0%jՕ 5:44V%[`hAku+p*ujB]^{_ t>srhщ֢j͑q3ltQ.iV;ޜbӺ;:] ~;ӁwvZkM VgA`. ٳgܵ;CP?B!.-Jz֗q۠M7b;V4Ʀ]-g@={ ?ѽi5A }F t@XA09P$rUHKBV;sU_Ƨ_(̀0;xQ}ڗ#F^2cNybH Cp-)$HvB6u*囀PcMMhn`ވ[nF=mۆ^~x0ЉGQ:ߎwӊ.ZJØ̙$Hb9}BBQ_g3q\cGө}(5QS[jAye *k"^#G 7g ~;x+ƨRu_{'. "2&!OB4)dX] DGh0P Ck-ZN[=ڌ 0aloB{G::n v~whkk P&\e"6L(,(Gl i$R|%y>kthl|?G fyaɣD] w\s]qu}/Aѿ n"U~8kJ۷ O!$ B T <IP^#'7y,h-ʅ$44Vɜ*c>Po5%m ȹL x'D#**G[LMBݞhCgT*F2a Зk+UbҗSz]_Qh7Q<B1w z @/Ud϶4iQ]Dطo'@\ DDD0p$$D#))r5dd$ALTPe@V@]0P#Q©,%|)T ]It*jo@ u7TPf"S! tٳHb !9X[/ b/x5IFr  2il+u/-]Hvs&ls߂{=8zt?N8 o8Ӿ'?; ??/qx{ 8v ؾ}+xoby3I2}hxvF͓|RXx*^4mqF`BBb iW_ a2LLj&7U81;<Ōiqˬ|aM:Ĩi_O #q,[ E>Xhԉ[Uú3v1b ̙deJuW5;7nr9owvqpټ顳^M6lXۺz]Ͳ ̘9]:ox'"^`~mv]<z}+55)43 E'0Le4r.T:F3Dп_v'gΞxBP#h7Tb!c Fvm ɞ@%|^#ʒ~U<B`8ȍy2M+ CvbA@adəDZV-bt3jΘ('Fcy1\F3ȝNE~u?A" RcWFvŸ~(%HK6T2uw_~3'ן o\T6xmlMoF-F1^gy5n='3۳+Z(~ J(XZZ* A?} ]Jb˲;;̙N|"fN 'ʝl.x;yWN;sΌdY!p/e)+if7NN&b{YI6M/qrA A/lC\"Ʊ )N!F_+=,7|^63z(酜\ 9;ķvK_oִLI.g\Taq|u_9+u\.g]&K\6Zw ɑN W[&νkrۯOAGw6IENDB`qterm-0.7.3/src/doc/qterm.qhcp000066400000000000000000000013661332762052600162260ustar00rootroot00000000000000 QTerm Help qthelp://org.qterm/doc/index.html qterm.png About QTerm about.txt qterm.png qterm.qhp qterm.qch qterm.qch qterm-0.7.3/src/doc/qterm.qhp.in000066400000000000000000000014311332762052600164610ustar00rootroot00000000000000 org.qterm doc
QTerm @QTERM_VERSION_MAJOR@.@QTERM_VERSION_MINOR@.@QTERM_VERSION_RELEASE@ doc.css *.html *.png qterm-0.7.3/src/dommodel.cpp000066400000000000000000000346331332762052600157630ustar00rootroot00000000000000#include "dommodel.h" #include #include #include #include #include #include namespace QTerm { DomItem::DomItem(QDomElement element, DomItem *parent) { domElement = element; parentItem = parent; // Populate child items QDomNodeList nodeList = domElement.childNodes(); for (int i=0; i=0 && ichildItems.count()) return; QDomNode node = domElement.childNodes().item(i); if (node.isNull()) domElement.appendChild(item->element()); else domElement.insertBefore(item->element(),node); item->reparent(this); childItems.insert(i, item); } void DomItem::removeChild(int i) { if (i<0 || i>=childItems.count()) return; QDomNode node = domElement.childNodes().item(i); domElement.removeChild(node); delete childItems.takeAt(i); } int DomItem::row() { if (parentItem) return parentItem->childItems.indexOf(this); return 0; } DomModel::DomModel(QDomDocument document, QObject *parent) : QAbstractItemModel(parent), domDocument(document) { rootItem = new DomItem(document.documentElement()); } DomModel::~DomModel() { delete rootItem; } int DomModel::columnCount(const QModelIndex &/*parent*/) const { return 1; } QVariant DomModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); DomItem *item = static_cast(index.internalPointer()); switch (role) { case Qt::UserRole: if (item->isFolder()) { return item->name(); } else { return item->uuid(); } break; case Qt::DisplayRole: return item->name(); break; case Qt::DecorationRole: switch (type(index)) { case Folder: return QVariant(QIcon(":/pic/folder.png")); case Favorite: return QVariant(QIcon(":/pic/tabpad_favorite.png")); case Site: return QVariant(QIcon(":/pic/tabpad.png")); default: return QVariant(); } default: return QVariant(); } } Qt::ItemFlags DomModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); DomItem *item = static_cast(index.internalPointer()); ItemType itemType = type(index); defaultFlags |= Qt::ItemIsDragEnabled; if (itemType == Folder) return Qt::ItemIsDropEnabled | Qt::ItemIsEditable | defaultFlags; else if (itemType == Site || itemType == Favorite) return defaultFlags; else return Qt::ItemIsDropEnabled | defaultFlags; } QVariant DomModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return tr("Name"); return QVariant(); } QModelIndex DomModel::index(int row, int column, const QModelIndex &parent) const { if (!hasIndex(row, column, parent)) return QModelIndex(); DomItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); DomItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } QModelIndex DomModel::parent(const QModelIndex &child) const { if (!child.isValid()) return QModelIndex(); DomItem *childItem = static_cast(child.internalPointer()); DomItem *parentItem = childItem->parent(); if (!parentItem || parentItem == rootItem) return QModelIndex(); return createIndex(parentItem->row(), 0, parentItem); } DomModel::ItemType DomModel::type(const QModelIndex &index) const { if (!index.isValid()) return Unknown; DomItem *item = static_cast(index.internalPointer()); if (item->isFolder()) return Folder; else if (item->isSiteReference()) { QString uuid = data(index, Qt::UserRole).toString(); // get favor attributes QDomNodeList siteList = domDocument.elementsByTagName("site"); for (int i=0; i 0) return 0; DomItem *parentItem; int sitesCount = 0; // This is the number of site elements of root item if (!parent.isValid()) { parentItem = rootItem; sitesCount = domDocument.elementsByTagName("site").count(); } else parentItem = static_cast(parent.internalPointer()); return parentItem->element().childNodes().count() - sitesCount; } bool DomModel::removeRows(int row, int count, const QModelIndex &parent) { DomItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); if (row < 0 || row >= rowCount(parent)) return false; beginRemoveRows(parent, row, row+count-1); for (int n=0; nremoveChild(row); endRemoveRows(); return true; } bool DomModel::insertRow(int row, const QModelIndex &parent, DomItem *item) { DomItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); if (row < 0 || row > rowCount(parent)) row = rowCount(parent); beginInsertRows(parent, row, row); parentItem->insertChild(row, item); endInsertRows(); return true; } bool DomModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid()) return false; DomItem *item = static_cast(index.internalPointer()); switch (role) { case Qt::EditRole: item->setName(value.toString()); break; case Qt::UserRole: if (item->isFolder()) item->setName(value.toString()); else if (item->isSiteReference()) item->setUuid(value.toString()); break; default: return false; } emit dataChanged(index, index); return true; } bool DomModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { if (action == Qt::IgnoreAction) return true; if (!data->hasFormat("text/plain")) return false; // Find out after which row to insert int beginRow; if (row != -1) // given beginRow = row; else if (parent.isValid()) // 1st of parent item beginRow = 0; else // last of the root item beginRow = rowCount(QModelIndex()); DomItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); // Extract dropped items QByteArray encodedData = data->data("text/plain"); QDataStream stream(&encodedData, QIODevice::ReadOnly); QList newItems; while (!stream.atEnd()) { quintptr p; stream >> p; newItems << static_cast((void *)p); } int count = newItems.count(); switch(action) { case Qt::MoveAction: // return false here will cause items disappear //if (parentItem == rootItem) // return false; for (int i=0; ielement().cloneNode().toElement(); DomItem *newItem = new DomItem(node); insertRow(beginRow, parent, newItem); } break; default: return false; } return true; } QMimeData *DomModel::mimeData(const QModelIndexList &indexes) const { QByteArray encodedData; QDataStream stream(&encodedData, QIODevice::WriteOnly); foreach (QModelIndex index, indexes) { if (index.isValid()) stream << quintptr(index.internalPointer()); } QMimeData *mimeData = new QMimeData(); mimeData->setData("text/plain", encodedData); return mimeData; } QStringList DomModel::mimeTypes() const { QStringList types; types << "text/plain"; return types; } Qt::DropActions DomModel::supportedDropActions() const { return Qt::MoveAction; } void DomModel::addFolder(const QModelIndex &index) { // New folder is either subfolder or sibyling QModelIndex parentIndex; int row; if (type(index) == Folder) { parentIndex = index; row = -1; } else { parentIndex = index.parent(); row = index.row(); } // Create folder element QDomElement folder = domDocument.createElement("folder"); folder.setAttribute("name", "New Folder"); // Create and insert DomItem *item = new DomItem(folder); insertRow(row, parentIndex, item); } void DomModel::toggleFavorite(const QModelIndex &index) { QString uuid = data(index, Qt::UserRole).toString(); if (QUuid(uuid).isNull()) return; // toggle favor attributes QDomNodeList siteList = domDocument.elementsByTagName("site"); for (int i=0; i qterm-0.7.3/src/dommodel.h000066400000000000000000000050541332762052600154230ustar00rootroot00000000000000#ifndef DOMMODEL_H #define DOMMODEL_H #include #include #include #include #include #include namespace QTerm { class DomItem { public: DomItem(QDomElement element, DomItem *parent = 0); ~DomItem(); DomItem *child(int i); void insertChild(int i, DomItem *item); void removeChild(int i); void reparent(DomItem *parent); DomItem *parent(); QDomElement element() const; int row(); QString name(); bool setName(const QString& name); QString uuid(); bool setUuid(const QString& uuid); bool isFolder(); bool isSite(); bool isSiteReference(); private: QDomElement domElement; QList childItems; DomItem *parentItem; }; class DomModel : public QAbstractItemModel { Q_OBJECT public: enum ItemType {Unknown, Folder, Site, Favorite}; DomModel(QDomDocument document, QObject *parent = 0); ~DomModel(); QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &child) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; bool removeRows(int row, int count, const QModelIndex &parent); bool insertRow(int row, const QModelIndex &parent, DomItem *item); bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); QMimeData *mimeData(const QModelIndexList &indexes) const; QStringList mimeTypes() const; Qt::DropActions supportedDropActions() const; ItemType type(const QModelIndex & index) const; void addSite(const QModelIndex &position); void addFolder(const QModelIndex &position); void toggleFavorite(const QModelIndex &position); void removeItem(const QModelIndex &index); QDomDocument document() { return domDocument; } private: QDomDocument domDocument; DomItem *rootItem; }; } // namespace QTerm #endif //DOMMODEL_H qterm-0.7.3/src/hostinfo.cpp000066400000000000000000000123621332762052600160070ustar00rootroot00000000000000#include "hostinfo.h" #include #include #include namespace QTerm { HostInfo::HostInfo(const QString & hostName, quint16 port, QObject * parent) :QObject(parent), m_hostName(hostName), m_port(port), m_termType(), m_column(80), m_row(24), m_type(Telnet) { } HostInfo::HostInfo() :m_hostName(), m_port(0) { } HostInfo::~HostInfo() { } void HostInfo::setHostName(const QString & hostName) { m_hostName = hostName; } void HostInfo::setPort(quint16 port) { m_port = port; } const QString & HostInfo::hostName() { return m_hostName; } quint16 HostInfo::port() { return m_port; } HostInfo::Type HostInfo::type() { return m_type; } void HostInfo::setType(HostInfo::Type type) { m_type = type; } const QString & HostInfo::termType() { return m_termType; } void HostInfo::setTermInfo(const QString & termType, int column, int row) { m_termType = termType; m_column = column; m_row = row; } TelnetInfo::TelnetInfo(const QString & hostName, quint16 port, QObject * parent) :HostInfo(hostName, port, parent) { setType(Telnet); } TelnetInfo::~TelnetInfo() { } SSHInfo::SSHInfo(const QString & hostName, quint16 port, QObject * parent) :HostInfo(hostName, port, parent), m_userName(), m_password(), m_publicKeyFile(), m_privateKeyFile(), m_passphrase(), m_hostKey(), m_autoCompletion() { setType(SSH); } SSHInfo::~SSHInfo() { } void SSHInfo::setUserName(const QString & userName) { m_userName = userName; } void SSHInfo::setPassword(const QString & password) { m_password = password; } void SSHInfo::setPassphrase(const QString & passphrase) { m_passphrase = passphrase; } void SSHInfo::setPrivateKeyFile(const QString & filename) { m_privateKeyFile = filename; } const QString & SSHInfo::privateKeyFile() { return m_privateKeyFile; } void SSHInfo::setHostKey(const QString & hostKey) { m_hostKey= hostKey; } void SSHInfo::setAutoCompletion(const Completion & autoCompletion) { m_autoCompletion = autoCompletion; } const QString & SSHInfo::userName(bool * ok) { if (m_userName.isEmpty()) { QString username = QInputDialog::getText(0, "QTerm", "Username: ", QLineEdit::Normal, "", ok); m_userName = username; } else if (ok != 0) { *ok = true; } return m_userName; } const QString & SSHInfo::password(bool * ok) { if (m_password.isEmpty()) { QString password = QInputDialog::getText(0, "QTerm", "Password: ", QLineEdit::Password, "", ok); m_password = password; } else if (ok != 0) { *ok = true; } return m_password; } const QString & SSHInfo::passphrase() { return m_passphrase; } int SSHInfo::passphraseCallback(char *buf, int size, int rwflag, void *u) { if (buf == NULL) { return 0; } memset(buf, '\0', size); QString passphrase = QString::fromUtf8((const char *) u); if (passphrase.isEmpty()) { passphrase = QInputDialog::getText(0, "QTerm", "Passphrase for the private key: ", QLineEdit::Password, "", NULL); } int len = strlen(passphrase.toUtf8().data()); if (len > size){ len = size; } memcpy(buf, passphrase.toUtf8().data(), len); return len; } const QString & SSHInfo::answer(const QString & prompt, QueryType type, bool * ok) { if (!m_autoCompletion.contains(prompt)||m_autoCompletion[prompt].isEmpty()) { QString input; if (type == Normal) { input = QInputDialog::getText(0, "QTerm", prompt, QLineEdit::Normal, "", ok); } else { input = QInputDialog::getText(0, "QTerm", prompt, QLineEdit::Password, "", ok); } m_autoCompletion[prompt] = input; } else if (ok != 0) { *ok = true; } return m_autoCompletion[prompt]; } bool SSHInfo::checkHostKey(const QByteArray & hostKey) { if (hostKey.toBase64() == m_hostKey) { return true; } else if (m_hostKey.isEmpty()) { QMessageBox::StandardButton rb = QMessageBox::question(static_cast(parent()), tr("New Host Key"), tr("No host key is found for the server. Do you want to add the host key and continue?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if(rb == QMessageBox::Yes) { m_hostKey = hostKey.toBase64(); emit(hostKeyChanged(m_hostKey)); return true; } } else { QMessageBox::StandardButton rb = QMessageBox::critical(static_cast(parent()), tr("Host Key Mismatch"), tr("HOST KEY DOES NOT MATCH! THIS COULD BE A MITM ATTACK! DO YOU REALLY WANT TO CONTINUE? IF YOU DO NOT KNOW WHAT YOU ARE DOING, CHOOSE NO!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if(rb == QMessageBox::Yes) { QMessageBox::StandardButton rb2 = QMessageBox::question(static_cast(parent()), tr("Update Host Key"), tr("Are you sure you want to update the host key?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if(rb2 == QMessageBox::Yes) { m_hostKey = hostKey.toBase64(); emit(hostKeyChanged(m_hostKey)); return true; } } } return false; } void SSHInfo::reset() { m_userName = ""; m_password = ""; m_autoCompletion.clear(); } } // namespace QTerm #include "moc_hostinfo.cpp" qterm-0.7.3/src/hostinfo.h000066400000000000000000000043461332762052600154570ustar00rootroot00000000000000#ifndef HOSTINFO_H #define HOSTINFO_H #include #include #include namespace QTerm { typedef QMap Completion; class HostInfo : public QObject { public: enum Type { Telnet, SSH }; HostInfo(const QString & hostName, quint16 port, QObject * parent = 0); HostInfo(); virtual ~HostInfo(); void setHostName(const QString & hostName); void setPort(quint16 port); const QString & hostName(); quint16 port(); Type type(); const QString & termType(); int termColumn() { return m_column; } int termRow() { return m_row; } void setTermInfo(const QString & termType, int column, int row); protected: void setType(Type type); private: QString m_hostName; quint16 m_port; QString m_termType; int m_column; int m_row; Type m_type; }; class TelnetInfo : public HostInfo { public: TelnetInfo(const QString & hostName, quint16 port, QObject * parent = 0); ~TelnetInfo(); }; class SSHInfo : public HostInfo { Q_OBJECT public: enum QueryType { Normal, Password }; SSHInfo(const QString & hostName, quint16 port, QObject * parent = 0); SSHInfo(); virtual ~SSHInfo(); void setUserName(const QString & userName); void setPassword(const QString & password); void setPassphrase(const QString & passphrase); void setPrivateKeyFile(const QString & filename); void setHostKey(const QString & hostKey); void setAutoCompletion(const Completion & autoCompletion); const QString & userName(bool * ok = 0); const QString & password(bool * ok = 0); const QString & passphrase(); const QString & privateKeyFile(); bool checkHostKey(const QByteArray & hostKey); const QString & answer(const QString & prompt, QueryType type = Normal, bool * ok = 0); void reset(); static int passphraseCallback(char *buf, int size, int rwflag, void *u); signals: void hostKeyChanged(const QString & hostKey); private: QString m_userName; QString m_password; QString m_publicKeyFile; QString m_privateKeyFile; QString m_passphrase; QString m_hostKey; Completion m_autoCompletion; }; } // namespace QTerm #endif // HOSTINFO_H qterm-0.7.3/src/imageconverter.cpp000066400000000000000000000056771332762052600172030ustar00rootroot00000000000000/* Copyright (C) 2009 by Aurélien Gâteau 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. */ #include "imageconverter.h" #include #include #include namespace ImageConverter { /** * A structure representing an image which can be marshalled to fit the * notification spec. */ struct SpecImage { int width, height, rowStride; bool hasAlpha; int bitsPerSample, channels; QByteArray data; }; QDBusArgument &operator<<(QDBusArgument &argument, const SpecImage &image) { argument.beginStructure(); argument << image.width << image.height << image.rowStride << image.hasAlpha; argument << image.bitsPerSample << image.channels << image.data; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, SpecImage &image) { argument.beginStructure(); argument >> image.width >> image.height >> image.rowStride >> image.hasAlpha; argument >> image.bitsPerSample >> image.channels >> image.data; argument.endStructure(); return argument; } } // namespace // This must be before the QVariant::fromValue below (#211726) Q_DECLARE_METATYPE(ImageConverter::SpecImage) namespace ImageConverter { QVariant variantForImage(const QImage &_image) { qDBusRegisterMetaType(); QImage image = _image.convertToFormat(QImage::Format_ARGB32); int rowStride = image.width() * 4; // Notification spec stores pixels in R,G,B,A order, regardless of // endianess // Qt represents pixels as 32 bit unsigned int. So the order depend on // endianess: // - In big endian the order is A,R,G,B // - In little endian the order is B,G,R,A QByteArray data; data.resize(rowStride * image.height()); char* dst = data.data(); for (int y=0; y 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. */ #ifndef IMAGECONVERTER_H #define IMAGECONVERTER_H class QVariant; class QImage; namespace ImageConverter { /** * Returns a variant representing an image using the format describe in the * galago spec */ QVariant variantForImage(const QImage &image); } // namespace #endif /* IMAGECONVERTER_H */ qterm-0.7.3/src/imagelistviewer.cpp000066400000000000000000000105661332762052600173620ustar00rootroot00000000000000#include "imagelistviewer.h" #include "qtermglobal.h" #include #include #include #include #include #include #include namespace QTerm { ImageFileModel::ImageFileModel(const QString& path, QObject *parent) : QFileSystemModel(parent) { setFilter(QDir::Files); setNameFilters(QStringList() << "*.jpg" << "*.jpeg" << "*.gif" << "*.mng" << "*.png" << "*.bmp"); setRootPath(path); } int ImageFileModel::columnCount(const QModelIndex &parent) const { return 1; } QVariant ImageFileModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); switch (role) { case Qt::ToolTipRole: return QString(tr("Name: %1\nType: %2\nSize: %3 KB")) .arg(fileName(index)) .arg(type(index)) .arg(size(index)/1024); case Qt::DisplayRole: return filePath(index); default: return QVariant(); } } ImageDelegate::ImageDelegate(QObject *parent) : QStyledItemDelegate(parent) { } QSize ImageDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const { QString fullFilename = qvariant_cast(index.model()->data(index)); QFileInfo fi(fullFilename); QString thumbFilename = genThumb(fi.absolutePath(), fi.fileName()); QImage image(thumbFilename); return image.size(); } QString ImageDelegate::genThumb(const QString & path, const QString & filename) const { // check thumbview file existence const QString file = QString( "shadow_cache_%1_%2.png" ).arg(filename).arg( thumbSize ); const QString folder = path+"/shadow-cache/"; QDir dir; if (dir.exists(folder+file)) return folder + file; // scale original and shadow images QImage original(path+"/"+filename); original = original.scaled(thumbSize, thumbSize, Qt::KeepAspectRatio); QImage shadow(":/pic/shadow.png"); uint shadowSize; if (original.width() > original.height()) shadowSize = static_cast(original.width()/100.0*6.0); else shadowSize = static_cast(original.height()/100.0*6.0); shadow = shadow.scaled( original.width() + shadowSize, original.height() + shadowSize); // create thumbview file QImage target(shadow); QPainter painter(&target); painter.drawImage(0, 0, original); target.save( folder + file, "PNG" ); return folder + file; } void ImageDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { // get the thumbview image QString fullFilename = qvariant_cast(index.model()->data(index)); QFileInfo fi(fullFilename); QString thumbFilename = genThumb(fi.absolutePath(), fi.fileName()); QImage image(thumbFilename); // prepare painter->save(); QRect displayRect(option.rect); displayRect.translate((displayRect.width()-image.width())/2, 0); // draw selection highlight if (option.state & QStyle::State_Selected) painter->fillRect(option.rect, option.palette.highlight()); // draw image painter->drawImage(displayRect.topLeft(), image); // finish painter->restore(); } const QString ImageListViewer::thumbDir("shadow-cache/"); ImageListViewer::ImageListViewer(QWidget * parent) :QListView(parent) { QString path = Global::instance()->m_pref.strPoolPath; d_model = new ImageFileModel(path); setModel(d_model); setRootIndex(d_model->index(path)); d_delegate = new ImageDelegate(); setItemDelegate(d_delegate); //connect(this, SIGNAL(activated(const QModelIndex&)), this, SLOT(viewImage(const QModelIndex&))); } ImageListViewer::~ImageListViewer() { delete d_model; delete d_delegate; } void ImageListViewer::imageChanged(const QString &filename) { setCurrentIndex(d_model->index(filename)); } void ImageListViewer::viewImage(const QModelIndex &index) { if (!index.isValid()) return; QString filename = qvariant_cast(index.model()->data(index)); emit selectedFileChanged(filename); } void ImageListViewer::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { viewImage(current); QListView::currentChanged(current, previous); } } // namespace QTerm #include qterm-0.7.3/src/imagelistviewer.h000066400000000000000000000033161332762052600170220ustar00rootroot00000000000000#ifndef IMAGELISTVIEWER_H #define IMAGELISTVIEWER_H #include #include #include #include #include #include #include class QString; class QPushButton; class QVBoxLayout; class QHBoxLayout; namespace QTerm { class ImageFileModel : public QFileSystemModel { Q_OBJECT public: ImageFileModel(const QString& path, QObject *parent=0); int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; }; class ImageDelegate : public QStyledItemDelegate { Q_OBJECT public: ImageDelegate(QObject *parent=0); QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const; QString genThumb(const QString & path, const QString & filename) const; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; private: static const int thumbSize = 100; }; class ImageListViewer : public QListView { Q_OBJECT public: ImageListViewer(QWidget * parent=0); ~ImageListViewer(); QSize sizeHint() const { return QSize(150,150); } static void genThumb(const QString &, const QString &, const QString &); public slots: void viewImage(const QModelIndex&); void imageChanged(const QString &); protected slots: virtual void currentChanged(const QModelIndex & current, const QModelIndex & previous); signals: void selectedFileChanged(const QString &); private: static const int thumbSize = 100; static const QString thumbDir; ImageFileModel *d_model; ImageDelegate *d_delegate; }; } // namespace QTerm #endif qterm-0.7.3/src/imageviewer.cpp000066400000000000000000000040101332762052600164510ustar00rootroot00000000000000#include "imageviewer.h" #include "qtermcanvas.h" #include #include #include #include #include #include #include namespace QTerm { Image::Image(const QString & path, QWidget * parent) :QWidget(parent), d_index(0) { ui.setupUi(this); d_extensionShown = true; /* ui.d_browser->setText("Hide Browser"); connect(ui.d_next, SIGNAL(clicked()), this, SLOT(next())); connect(ui.d_previous, SIGNAL(clicked()), this, SLOT(previous())); connect(ui.d_browser, SIGNAL(clicked()), this, SLOT(browser())); */ connect(ui.d_list, SIGNAL(selectedFileChanged(const QString&)), this, SLOT(onChange(const QString&))); connect(this, SIGNAL(changeImage(const QString&)), ui.d_list, SLOT(imageChanged(const QString&))); } Image::~Image() { } void Image::next() { /* if (d_list->isEmpty()) return; if (d_index < d_list->count() - 1) { ++d_index; emit changeImage(d_list->at(d_index)); } */ } void Image::previous() { /* if (d_list->isEmpty()) return; if (d_index <= 0) return; --d_index; emit changeImage(d_list->at(d_index)); */ } void Image::browser() { /* if (d_list->isEmpty()) return; */ d_extensionShown = !d_extensionShown; ui.d_list->setVisible(d_extensionShown); /* if (d_extensionShown) ui.d_browser->setText(tr("Hide &Browser")); else ui.d_browser->setText(tr("Show &Browser")); */ } void Image::onChange(const QString & filename) { /* int position = d_list->indexOf(filename); if (position != -1) d_index = position; ui.d_previous->setEnabled(true); ui.d_next->setEnabled(true); if (d_index == 0) ui.d_previous->setEnabled(false); if (d_index == d_list->count() - 1) ui.d_next->setEnabled(false); ui.d_canvas->loadImage(d_path+filename); */ ui.d_canvas->loadImage(filename); } } // namespace QTerm #include qterm-0.7.3/src/imageviewer.h000066400000000000000000000012601332762052600161220ustar00rootroot00000000000000#ifndef IMAGEVIERWER_H #define IMAGEVIERWER_H #include "ui_imageviewer.h" #include #include #include #include class QString; class QPushButton; class QVBoxLayout; class QHBoxLayout; namespace QTerm { class Canvas; class ImageListViewer; class Image : public QWidget { Q_OBJECT public: Image(const QString &, QWidget * parent=0); ~Image(); public slots: void next(); void previous(); void browser(); void onChange(const QString &); signals: void changeImage(const QString &); private: Ui::QTermImage ui; int d_index; bool d_extensionShown; }; } // namespace QTerm #endif qterm-0.7.3/src/keyboard_profiles/000077500000000000000000000000001332762052600171515ustar00rootroot00000000000000qterm-0.7.3/src/keyboard_profiles/CMakeLists.txt000066400000000000000000000003501332762052600217070ustar00rootroot00000000000000file(GLOB keyboardFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.keytab") file(COPY ${keyboardFiles} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) if (NOT APPLE) install(FILES ${keyboardFiles} DESTINATION share/qterm/keyboard_profiles) endif () qterm-0.7.3/src/keyboard_profiles/README.KeyTab000066400000000000000000000044151332762052600212130ustar00rootroot00000000000000[README.KeyTab] The keytabs offered in the Options/Keyboard menu are taken from from configurations files with a *.keytab pattern either located in $KDEDIR/share/apps/konsole or ~/.kde/share/apps/konsole. Keytabs allow to configure the behavior of konsole on keyboard events, especially for functions keys. Please have a look into the README.keyboard file, too. The syntax is that each entry has the form : "key" Keyname { ("+"|"-") Modename } ":" (String|Operation) Keynames are those defined in with the "Qt::Key_" prefix removed. Mode names are: - Shift : Shift Key pressed - Alt : Alt Key pressed - Control : Control Key pressed ( The VT100 emulation has modes that can affect the sequences emitted by certain keys. These modes are under control of the client program. - Newline : effects Return and Enter key. - Application : effects Up and Down key. - Ansi : effects Up and Down key (This is for VT52, really). Since sending a state to a program that has set the state itself is positivly wrong and obsolete design, better forget about this nasty detail. I may well remove this "feature" in a future clean up round. ) A "+" preceeding a Modename means the Key is pressed. A "-" preceeding a Modename means the Key is not pressed. If no mode is given it means don't care. Note that the combination of Key and Modes (set/reset) has to be unique. This means, that key A + Shift : "A" key A : "a" will not accept the small letter "a" rule as expected, one has to add a "- Shift" to the last clause. Use the stdout/stderr dianostics of konsole when modifying keytabs to find problems like this. Operations are - scrollUpLine : scroll up one line in the history log - scrollUpPage : scroll up one page in the history log - scrollDownLine : scroll down one line in the history log - scrollDownPage : scroll down one page in the history log - emitClipboard : "paste" the current clipboard - emitSelection : "paste" the current selection Strings have the syntax of C strings, one may use the following escapes: - \E - escape - \\ - backslash - \" - double quote - \t - tab - \r - return - \n - newline - \b - backspace - \xHH - where HH are two hex digits qterm-0.7.3/src/keyboard_profiles/apple.keytab000066400000000000000000000071751332762052600214650ustar00rootroot00000000000000# [linux.keytab] Konsole Keyboard Table (Linux console keys) # # -------------------------------------------------------------- # NOT TESTED, MAY NEED SOME CLEANUPS keyboard "Apple console" # -------------------------------------------------------------- # # This configuration table allows to customize the # meaning of the keys. # # The syntax is that each entry has the form : # # "key" Keyname { ("+"|"-") Modename } ":" (String|Operation) # # Keynames are those defined in with the # "Qt::Key_" removed. (We'd better insert the list here) # # Mode names are : # # - Shift # - Alt # - Control # # The VT100 emulation has two modes that can affect the # sequences emitted by certain keys. These modes are # under control of the client program. # # - Newline : effects Return and Enter key. # - Application : effects Up and Down key. # # - Ansi : effects Up and Down key (This is for VT52, really). # # Operations are # # - scrollUpLine # - scrollUpPage # - scrollDownLine # - scrollDownPage # # - emitSelection # # If the key is not found here, the text of the # key event as provided by QT is emitted, possibly # preceeded by ESC if the Alt key is pressed. # # -------------------------------------------------------------- key Escape : "\E" key Tab : "\t" # VT100 can add an extra \n after return. # The NewLine mode is set by an escape sequence. key Return-NewLine : "\r" key Return+NewLine : "\r\n" # Some desperately try to save the ^H. key Backspace : "\x7f" key Delete : "\E[3~" # These codes are for the VT52 mode of VT100 # The Ansi mode (i.e. VT100 mode) is set by # an escape sequence key Up -Shift-Ansi : "\EA" key Down -Shift-Ansi : "\EB" key Right-Shift-Ansi : "\EC" key Left -Shift-Ansi : "\ED" # VT100 emits a mode bit together # with the arrow keys.The AppCuKeys # mode is set by an escape sequence. key Up -Shift+Ansi+AppCuKeys : "\EOA" key Down -Shift+Ansi+AppCuKeys : "\EOB" key Right-Shift+Ansi+AppCuKeys : "\EOC" key Left -Shift+Ansi+AppCuKeys : "\EOD" key Up -Shift+Ansi-AppCuKeys : "\E[A" key Down -Shift+Ansi-AppCuKeys : "\E[B" key Right-Shift+Ansi-AppCuKeys : "\E[C" key Left -Shift+Ansi-AppCuKeys : "\E[D" # linux functions keys F1-F5 differ from xterm key F1 : "\E[[A" key F2 : "\E[[B" key F3 : "\E[[C" key F4 : "\E[[D" key F5 : "\E[[E" key F6 : "\E[17~" key F7 : "\E[18~" key F8 : "\E[19~" key F9 : "\E[20~" key F10 : "\E[21~" key F11 : "\E[23~" key F12 : "\E[24~" key Home : "\E[1~" key End : "\E[4~" key Prior -Shift : "\E[5~" key Next -Shift : "\E[6~" key Insert-Shift : "\E[2~" # Keypad-Enter. See comment on Return above. key Enter+NewLine : "\r\n" key Enter-NewLine : "\r" key Space+Meta : "\x00" key A +Meta : "\x01" key B +Meta : "\x02" key C +Meta : "\x03" key D +Meta : "\x04" key E +Meta : "\x05" key F +Meta : "\x06" key G +Meta : "\x07" key H +Meta : "\x08" key I +Meta : "\x09" key J +Meta : "\x0A" key K +Meta : "\x0B" key L +Meta : "\x0C" key M +Meta : "\x0D" key N +Meta : "\x0E" key O +Meta : "\x0F" key P +Meta : "\x10" key Q +Meta : "\x11" key R +Meta : "\x12" key S +Meta : "\x13" key T +Meta : "\x14" key U +Meta : "\x15" key V +Meta : "\x16" key W +Meta : "\x17" key X +Meta : "\x18" key Y +Meta : "\x19" key Z +Meta : "\x1A" # some of keys are used by konsole. key Up +Shift : scrollLineUp key Prior +Shift : scrollPageUp key Down +Shift : scrollLineDown key Next +Shift : scrollPageDown key ScrollLock : scrollLock #---------------------------------------------------------- # Following other strings as emitted by konsole. qterm-0.7.3/src/keyboard_profiles/default.keytab000066400000000000000000000117321332762052600220020ustar00rootroot00000000000000# [README.default.Keytab] Default Keyboard Table # # To customize your keyboard, copy this file to something # ending with .keytab and change it to meet you needs. # Please read the README.KeyTab and the README.keyboard # in this case. # # -------------------------------------------------------------- keyboard "Default (XFree 4)" # -------------------------------------------------------------- # # Note that this particular table is a "risc" version made to # ease customization without bothering with obsolete details. # See VT100.keytab for the more hairy stuff. # # -------------------------------------------------------------- # common keys key Escape : "\E" key Tab -Shift : "\t" key Tab +Shift+Ansi : "\E[Z" key Tab +Shift-Ansi : "\t" key Backtab +Ansi : "\E[Z" key Backtab -Ansi : "\t" key Return-Shift-NewLine : "\r" key Return-Shift+NewLine : "\r\n" key Return+Shift : "\EOM" # Backspace and Delete codes are preserving CTRL-H. key Backspace : "\x7f" # Arrow keys in VT52 mode # shift up/down are reserved for scrolling. # shift left/right are reserved for switching between tabs (this is hardcoded). key Up -Shift-Ansi : "\EA" key Down -Shift-Ansi : "\EB" key Right-Shift-Ansi : "\EC" key Left -Shift-Ansi : "\ED" # Arrow keys in ANSI mode with Application - and Normal Cursor Mode) key Up -Shift-AnyMod+Ansi+AppCuKeys : "\EOA" key Down -Shift-AnyMod+Ansi+AppCuKeys : "\EOB" key Right -Shift-AnyMod+Ansi+AppCuKeys : "\EOC" key Left -Shift-AnyMod+Ansi+AppCuKeys : "\EOD" key Up -Shift-AnyMod+Ansi-AppCuKeys : "\E[A" key Down -Shift-AnyMod+Ansi-AppCuKeys : "\E[B" key Right -Shift-AnyMod+Ansi-AppCuKeys : "\E[C" key Left -Shift-AnyMod+Ansi-AppCuKeys : "\E[D" key Up -Shift+AnyMod+Ansi : "\E[1;*A" key Down -Shift+AnyMod+Ansi : "\E[1;*B" key Right -Shift+AnyMod+Ansi : "\E[1;*C" key Left -Shift+AnyMod+Ansi : "\E[1;*D" # Keypad keys with NumLock ON # (see "Numeric Keypad" section at http://www.nw.com/nw/WWW/products/wizcon/vt100.html ) # # Not enabled for now because it breaks the keypad in Vim. # #key 0 +KeyPad+AppKeyPad : "\EOp" #key 1 +KeyPad+AppKeyPad : "\EOq" #key 2 +KeyPad+AppKeyPad : "\EOr" #key 3 +KeyPad+AppKeyPad : "\EOs" #key 4 +KeyPad+AppKeyPad : "\EOt" #key 5 +KeyPad+AppKeyPad : "\EOu" #key 6 +KeyPad+AppKeyPad : "\EOv" #key 7 +KeyPad+AppKeyPad : "\EOw" #key 8 +KeyPad+AppKeyPad : "\EOx" #key 9 +KeyPad+AppKeyPad : "\EOy" #key + +KeyPad+AppKeyPad : "\EOl" #key - +KeyPad+AppKeyPad : "\EOm" #key . +KeyPad+AppKeyPad : "\EOn" #key * +KeyPad+AppKeyPad : "\EOM" #key Enter +KeyPad+AppKeyPad : "\r" # Keypad keys with NumLock Off key Up -Shift+Ansi+AppCuKeys+KeyPad : "\EOA" key Down -Shift+Ansi+AppCuKeys+KeyPad : "\EOB" key Right -Shift+Ansi+AppCuKeys+KeyPad : "\EOC" key Left -Shift+Ansi+AppCuKeys+KeyPad : "\EOD" key Up -Shift+Ansi-AppCuKeys+KeyPad : "\E[A" key Down -Shift+Ansi-AppCuKeys+KeyPad : "\E[B" key Right -Shift+Ansi-AppCuKeys+KeyPad : "\E[C" key Left -Shift+Ansi-AppCuKeys+KeyPad : "\E[D" key Home +AppCuKeys+KeyPad : "\EOH" key End +AppCuKeys+KeyPad : "\EOF" key Home -AppCuKeys+KeyPad : "\E[H" key End -AppCuKeys+KeyPad : "\E[F" key Insert +KeyPad : "\E[2~" key Delete +KeyPad : "\E[3~" key Prior -Shift+KeyPad : "\E[5~" key Next -Shift+KeyPad : "\E[6~" # other grey PC keys key Enter+NewLine : "\r\n" key Enter-NewLine : "\r" key Home -AnyMod-AppCuKeys : "\E[H" key End -AnyMod-AppCuKeys : "\E[F" key Home -AnyMod+AppCuKeys : "\EOH" key End -AnyMod+AppCuKeys : "\EOF" key Home +AnyMod : "\E[1;*H" key End +AnyMod : "\E[1;*F" key Insert -AnyMod : "\E[2~" key Delete -AnyMod : "\E[3~" key Insert +AnyMod : "\E[2;*~" key Delete +AnyMod : "\E[3;*~" key Prior -Shift-AnyMod : "\E[5~" key Next -Shift-AnyMod : "\E[6~" key Prior -Shift+AnyMod : "\E[5;*~" key Next -Shift+AnyMod : "\E[6;*~" # Function keys key F1 -AnyMod : "\EOP" key F2 -AnyMod : "\EOQ" key F3 -AnyMod : "\EOR" key F4 -AnyMod : "\EOS" key F5 -AnyMod : "\E[15~" key F6 -AnyMod : "\E[17~" key F7 -AnyMod : "\E[18~" key F8 -AnyMod : "\E[19~" key F9 -AnyMod : "\E[20~" key F10 -AnyMod : "\E[21~" key F11 -AnyMod : "\E[23~" key F12 -AnyMod : "\E[24~" key F1 +AnyMod : "\EO*P" key F2 +AnyMod : "\EO*Q" key F3 +AnyMod : "\EO*R" key F4 +AnyMod : "\EO*S" key F5 +AnyMod : "\E[15;*~" key F6 +AnyMod : "\E[17;*~" key F7 +AnyMod : "\E[18;*~" key F8 +AnyMod : "\E[19;*~" key F9 +AnyMod : "\E[20;*~" key F10 +AnyMod : "\E[21;*~" key F11 +AnyMod : "\E[23;*~" key F12 +AnyMod : "\E[24;*~" # Work around dead keys key Space +Control : "\x00" # Some keys are used by konsole to cause operations. # The scroll* operations refer to the history buffer. key Up +Shift-AppScreen : scrollLineUp key Prior +Shift-AppScreen : scrollPageUp key Down +Shift-AppScreen : scrollLineDown key Next +Shift-AppScreen : scrollPageDown key ScrollLock : scrollLock qterm-0.7.3/src/keyboard_profiles/linux.keytab000066400000000000000000000062241332762052600215150ustar00rootroot00000000000000# [linux.keytab] Konsole Keyboard Table (Linux console keys) # # -------------------------------------------------------------- # NOT TESTED, MAY NEED SOME CLEANUPS keyboard "Linux console" # -------------------------------------------------------------- # # This configuration table allows to customize the # meaning of the keys. # # The syntax is that each entry has the form : # # "key" Keyname { ("+"|"-") Modename } ":" (String|Operation) # # Keynames are those defined in with the # "Qt::Key_" removed. (We'd better insert the list here) # # Mode names are : # # - Shift # - Alt # - Control # # The VT100 emulation has two modes that can affect the # sequences emitted by certain keys. These modes are # under control of the client program. # # - Newline : effects Return and Enter key. # - Application : effects Up and Down key. # # - Ansi : effects Up and Down key (This is for VT52, really). # # Operations are # # - scrollUpLine # - scrollUpPage # - scrollDownLine # - scrollDownPage # # - emitSelection # # If the key is not found here, the text of the # key event as provided by QT is emitted, possibly # preceeded by ESC if the Alt key is pressed. # # -------------------------------------------------------------- key Escape : "\E" key Tab : "\t" # VT100 can add an extra \n after return. # The NewLine mode is set by an escape sequence. key Return-NewLine : "\r" key Return+NewLine : "\r\n" # Some desperately try to save the ^H. key Backspace : "\x7f" key Delete : "\E[3~" # These codes are for the VT52 mode of VT100 # The Ansi mode (i.e. VT100 mode) is set by # an escape sequence key Up -Shift-Ansi : "\EA" key Down -Shift-Ansi : "\EB" key Right-Shift-Ansi : "\EC" key Left -Shift-Ansi : "\ED" # VT100 emits a mode bit together # with the arrow keys.The AppCuKeys # mode is set by an escape sequence. key Up -Shift+Ansi+AppCuKeys : "\EOA" key Down -Shift+Ansi+AppCuKeys : "\EOB" key Right-Shift+Ansi+AppCuKeys : "\EOC" key Left -Shift+Ansi+AppCuKeys : "\EOD" key Up -Shift+Ansi-AppCuKeys : "\E[A" key Down -Shift+Ansi-AppCuKeys : "\E[B" key Right-Shift+Ansi-AppCuKeys : "\E[C" key Left -Shift+Ansi-AppCuKeys : "\E[D" # linux functions keys F1-F5 differ from xterm key F1 : "\E[[A" key F2 : "\E[[B" key F3 : "\E[[C" key F4 : "\E[[D" key F5 : "\E[[E" key F6 : "\E[17~" key F7 : "\E[18~" key F8 : "\E[19~" key F9 : "\E[20~" key F10 : "\E[21~" key F11 : "\E[23~" key F12 : "\E[24~" key Home : "\E[1~" key End : "\E[4~" key Prior -Shift : "\E[5~" key Next -Shift : "\E[6~" key Insert-Shift : "\E[2~" # Keypad-Enter. See comment on Return above. key Enter+NewLine : "\r\n" key Enter-NewLine : "\r" key Space +Control : "\x00" # some of keys are used by konsole. key Up +Shift : scrollLineUp key Prior +Shift : scrollPageUp key Down +Shift : scrollLineDown key Next +Shift : scrollPageDown key ScrollLock : scrollLock #---------------------------------------------------------- # keypad characters as offered by Qt # cannot be recognized as such. #---------------------------------------------------------- # Following other strings as emitted by konsole. qterm-0.7.3/src/keyboard_profiles/solaris.keytab000066400000000000000000000050601332762052600220270ustar00rootroot00000000000000# [solaris.keytab] Konsole Keyboard Table # keyboard "Solaris console" # -------------------------------------------------------------- # # This configuration table allows to customize the # meaning of the keys. # # The syntax is that each entry has the form : # # "key" Keyname { ("+"|"-") Modename } ":" (String|Operation) # # Keynames are those defined in with the # "Qt::Key_" removed. (We'd better insert the list here) # # Mode names are : # # - Shift # - Alt # - Control # # The VT100 emulation has two modes that can affect the # sequences emitted by certain keys. These modes are # under control of the client program. # # # - Newline : effects Return and Enter key. # - Application : effects Up and Down key. # # - Ansi : effects Up and Down key (This is for VT52, really). # # Operations are # # - scrollUpLine # - scrollUpPage # - scrollDownLine # - scrollDownPage # # - emitSelection # # If the key is not found here, the text of the # key event as provided by QT is emitted, possibly # preceeded by ESC if the Alt key is pressed. # # -------------------------------------------------------------- key Escape : "\E" key Tab : "\t" key Return-Alt : "\r" key Return+Alt : "\E\r" # Backspace and Delete codes are preserving CTRL-H. key Backspace : "\x08" #key Delete : "\x7F" # cursor keys key Up -Shift : "\EOA" key Down -Shift : "\EOB" key Right -Shift : "\EOC" key Left -Shift : "\EOD" # other grey PC keys key Enter : "\r" key Home : "\E[1~" key Insert-Shift : "\E[2~" key Delete : "\E[3~" key End : "\E[4~" key Prior -Shift : "\E[5~" key Next -Shift : "\E[6~" # function keys key F1 : "\E[11~" key F2 : "\E[12~" key F3 : "\E[13~" key F4 : "\E[14~" key F5 : "\E[15~" key F6 : "\E[17~" key F7 : "\E[18~" key F8 : "\E[19~" key F9 : "\E[20~" key F10 : "\E[21~" key F11 : "\E[23~" key F12 : "\E[24~" # Work around dead keys key Space +Control : "\x00" # Some keys are used by konsole to cause operations. # The scroll* operations refer to the history buffer. #key Left +Shift : prevSession #key Right +Shift : nextSession key Up +Shift : scrollLineUp key Prior +Shift : scrollPageUp key Down +Shift : scrollLineDown key Next +Shift : scrollPageDown #key Insert+Shift : emitSelection # keypad characters are not offered differently by Qt. qterm-0.7.3/src/keyboard_profiles/vt420pc.keytab000066400000000000000000000105451332762052600215610ustar00rootroot00000000000000# # NOTE: This keyboard binding is not installed because it # apparently doesn't work with actual VT420 systems # (see BUG:170220) # # [vt420pc.keytab] Konsole Keyboard Table (VT420pc keys) # adapted by ferdinand gassauer f.gassauer@aon.at # Nov 2000 # ################################################################ # # The escape sequences emmited by the # keys Shift+F1 to Shift+F12 might not fit your needs # ################# IMPORTANT NOTICE ############################# # the key bindings (Kcontrol -> look and feel -> keybindgs) # overrule the settings in this file. The key bindings might be # changed by the user WITHOUT notification of the maintainer of # the keytab file. Konsole will not work as expected by # the maintainer of the keytab file. ################################################################ # # -------------------------------------------------------------- keyboard "DEC VT420 Terminal" # -------------------------------------------------------------- # # This configuration table allows to customize the # meaning of the keys. # # The syntax is that each entry has the form : # # "key" Keyname { ("+"|"-") Modename } ":" (String|Operation) # # Keynames are those defined in with the # "Qt::Key_" removed. (We'd better insert the list here) # # Mode names are : # # - Shift # - Alt # - Control # # The VT100 emulation has two modes that can affect the # sequences emitted by certain keys. These modes are # under control of the client program. # # - Newline : effects Return and Enter key. # - Application : effects Up and Down key. # # - Ansi : effects Up and Down key (This is for VT52, really). # # Operations are # # - scrollUpLine # - scrollUpPage # - scrollDownLine # - scrollDownPage # # - emitSelection # # If the key is not found here, the text of the # key event as provided by QT is emitted, possibly # preceeded by ESC if the Alt key is pressed. # # -------------------------------------------------------------- key Escape : "\E" key Tab : "\t" key Backtab: "\E[Z" # VT100 can add an extra \n after return. # The NewLine mode is set by an escape sequence. key Return-NewLine : "\r" key Return+NewLine : "\r\n" # Some desperately try to save the ^H. # may be not everyone wants this key Backspace : "\x08" # Control H key Delete : "\x7f" # These codes are for the VT420pc # The Ansi mode (i.e. VT100 mode) is set by # an escape sequence key Up -Shift-Ansi : "\EA" key Down -Shift-Ansi : "\EB" key Right-Shift-Ansi : "\EC" key Left -Shift-Ansi : "\ED" # VT100 emits a mode bit together # with the arrow keys.The AppCuKeys # mode is set by an escape sequence. key Up -Shift+Ansi+AppCuKeys : "\EOA" key Down -Shift+Ansi+AppCuKeys : "\EOB" key Right-Shift+Ansi+AppCuKeys : "\EOC" key Left -Shift+Ansi+AppCuKeys : "\EOD" key Up -Shift+Ansi-AppCuKeys : "\E[A" key Down -Shift+Ansi-AppCuKeys : "\E[B" key Right-Shift+Ansi-AppCuKeys : "\E[C" key Left -Shift+Ansi-AppCuKeys : "\E[D" # function keys key F1 -Shift : "\E[11~" key F2 -Shift : "\E[12~" key F3 -Shift : "\E[13~" key F4 -Shift : "\E[14~" key F5 -Shift : "\E[15~" key F6 -Shift : "\E[17~" key F7 -Shift : "\E[18~" key F8 -Shift : "\E[19~" key F9 -Shift : "\E[20~" key F10-Shift : "\E[21~" key F11-Shift : "\E[23~" key F12-Shift : "\E[24~" # # Shift F1-F12 # key F1 +Shift : "\E[11;2~" key F2 +Shift : "\E[12;2~" key F3 +Shift : "\E[13;2~" key F4 +Shift : "\E[14;2~" key F5 +Shift : "\E[15;2~" key F6 +Shift : "\E[17;2~" key F7 +Shift : "\E[18;2~" key F8 +Shift : "\E[19;2~" key F9 +Shift : "\E[20;2~" key F10+Shift : "\E[21;2~" key F11+Shift : "\E[23;2~" key F12+Shift : "\E[24;2~" key Home : "\E[H" key End : "\E[F" key Prior -Shift : "\E[5~" key Next -Shift : "\E[6~" key Insert-Shift : "\E[2~" # Keypad-Enter. See comment on Return above. key Enter+NewLine : "\r\n" key Enter-NewLine : "\r" key Space +Control : "\x00" # some of keys are used by konsole. key Up +Shift : scrollLineUp key Prior +Shift : scrollPageUp key Down +Shift : scrollLineDown key Next +Shift : scrollPageDown key ScrollLock : scrollLock #---------------------------------------------------------- # keypad characters as offered by Qt # cannot be recognized as such. #---------------------------------------------------------- # Following other strings as emitted by konsole. qterm-0.7.3/src/keyboardtranslator.cpp000066400000000000000000000520201332762052600200630ustar00rootroot00000000000000/* Modified by Ran Lu for QTerm. This source file is part of Konsole, a terminal emulator. Copyright 2007-2008 by Robert Knight 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. */ // Own #include "keyboardtranslator.h" // System #include #include // Qt #include #include #include #include #include #include #include #include namespace QTerm { // each line of the keyboard translation file is one of: // // - keyboard "name" // - key KeySequence : "characters" // - key KeySequence : CommandName // // KeySequence begins with the name of the key ( taken from the Qt::Key enum ) // and is followed by the keyboard modifiers and state flags ( with + or - in front // of each modifier or flag to indicate whether it is required ). All keyboard modifiers // and flags are optional, if a particular modifier or state is not specified it is // assumed not to be a part of the sequence. The key sequence may contain whitespace // // eg: "key Up+Shift : scrollLineUp" // "key Next-Shift : "\E[6~" // // (lines containing only whitespace are ignored, parseLine assumes that comments have // already been removed) // KeyboardTranslatorReader::KeyboardTranslatorReader( QIODevice* source ) : _source(source) , _hasNext(false) { // read input until we find the description while ( _description.isEmpty() && !source->atEnd() ) { QList tokens = tokenize( QString(source->readLine()) ); if ( !tokens.isEmpty() && tokens.first().type == Token::TitleKeyword ) _description = tokens[1].text.toUtf8(); } // read first entry (if any) readNext(); } void KeyboardTranslatorReader::readNext() { // find next entry while ( !_source->atEnd() ) { const QList& tokens = tokenize( QString(_source->readLine()) ); if ( !tokens.isEmpty() && tokens.first().type == Token::KeyKeyword ) { KeyboardTranslator::States flags = KeyboardTranslator::NoState; KeyboardTranslator::States flagMask = KeyboardTranslator::NoState; Qt::KeyboardModifiers modifiers = Qt::NoModifier; Qt::KeyboardModifiers modifierMask = Qt::NoModifier; int keyCode = Qt::Key_unknown; decodeSequence(tokens[1].text.toLower(), keyCode, modifiers, modifierMask, flags, flagMask); KeyboardTranslator::Command command = KeyboardTranslator::NoCommand; QByteArray text; // get text or command if ( tokens[2].type == Token::OutputText ) { text = tokens[2].text.toLocal8Bit(); } else if ( tokens[2].type == Token::Command ) { // identify command if (!parseAsCommand(tokens[2].text,command)) qWarning() << "Command" << tokens[2].text << "not understood."; } KeyboardTranslator::Entry newEntry; newEntry.setKeyCode( keyCode ); newEntry.setState( flags ); newEntry.setStateMask( flagMask ); newEntry.setModifiers( modifiers ); newEntry.setModifierMask( modifierMask ); newEntry.setText( text ); newEntry.setCommand( command ); _nextEntry = newEntry; _hasNext = true; return; } } _hasNext = false; } bool KeyboardTranslatorReader::parseAsCommand(const QString& text,KeyboardTranslator::Command& command) { if ( text.compare("erase",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::EraseCommand; else if ( text.compare("scrollpageup",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::ScrollPageUpCommand; else if ( text.compare("scrollpagedown",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::ScrollPageDownCommand; else if ( text.compare("scrolllineup",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::ScrollLineUpCommand; else if ( text.compare("scrolllinedown",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::ScrollLineDownCommand; else if ( text.compare("scrolllock",Qt::CaseInsensitive) == 0 ) command = KeyboardTranslator::ScrollLockCommand; else return false; return true; } bool KeyboardTranslatorReader::decodeSequence(const QString& text, int& keyCode, Qt::KeyboardModifiers& modifiers, Qt::KeyboardModifiers& modifierMask, KeyboardTranslator::States& flags, KeyboardTranslator::States& flagMask) { bool isWanted = true; bool endOfItem = false; QString buffer; Qt::KeyboardModifiers tempModifiers = modifiers; Qt::KeyboardModifiers tempModifierMask = modifierMask; KeyboardTranslator::States tempFlags = flags; KeyboardTranslator::States tempFlagMask = flagMask; for ( int i = 0 ; i < text.count() ; i++ ) { const QChar& ch = text[i]; bool isFirstLetter = i == 0; bool isLastLetter = ( i == text.count()-1 ); endOfItem = true; if ( ch.isLetterOrNumber() ) { endOfItem = false; buffer.append(ch); } else if ( isFirstLetter ) { buffer.append(ch); } if ( (endOfItem || isLastLetter) && !buffer.isEmpty() ) { Qt::KeyboardModifier itemModifier = Qt::NoModifier; int itemKeyCode = 0; KeyboardTranslator::State itemFlag = KeyboardTranslator::NoState; if ( parseAsModifier(buffer,itemModifier) ) { tempModifierMask |= itemModifier; if ( isWanted ) tempModifiers |= itemModifier; } else if ( parseAsStateFlag(buffer,itemFlag) ) { tempFlagMask |= itemFlag; if ( isWanted ) tempFlags |= itemFlag; } else if ( parseAsKeyCode(buffer,itemKeyCode) ) keyCode = itemKeyCode; else qDebug() << "Unable to parse key binding item:" << buffer; buffer.clear(); } // check if this is a wanted / not-wanted flag and update the // state ready for the next item if ( ch == '+' ) isWanted = true; else if ( ch == '-' ) isWanted = false; } modifiers = tempModifiers; modifierMask = tempModifierMask; flags = tempFlags; flagMask = tempFlagMask; return true; } bool KeyboardTranslatorReader::parseAsModifier(const QString& item , Qt::KeyboardModifier& modifier) { if ( item == "shift" ) modifier = Qt::ShiftModifier; else if ( item == "ctrl" || item == "control" ) modifier = Qt::ControlModifier; else if ( item == "alt" ) modifier = Qt::AltModifier; else if ( item == "meta" ) modifier = Qt::MetaModifier; else if ( item == "keypad" ) modifier = Qt::KeypadModifier; else return false; return true; } bool KeyboardTranslatorReader::parseAsStateFlag(const QString& item , KeyboardTranslator::State& flag) { if ( item == "appcukeys" || item == "appcursorkeys" ) flag = KeyboardTranslator::CursorKeysState; else if ( item == "ansi" ) flag = KeyboardTranslator::AnsiState; else if ( item == "newline" ) flag = KeyboardTranslator::NewLineState; else if ( item == "appscreen" ) flag = KeyboardTranslator::AlternateScreenState; else if ( item == "anymod" || item == "anymodifier" ) flag = KeyboardTranslator::AnyModifierState; else if ( item == "appkeypad" ) flag = KeyboardTranslator::ApplicationKeypadState; else return false; return true; } bool KeyboardTranslatorReader::parseAsKeyCode(const QString& item , int& keyCode) { QKeySequence sequence = QKeySequence::fromString(item); if ( item == "prior" ) keyCode = Qt::Key_PageUp; else if ( item == "next" ) keyCode = Qt::Key_PageDown; else if ( !sequence.isEmpty() ) { keyCode = sequence[0]; if ( sequence.count() > 1 ) { qDebug() << "Unhandled key codes in sequence: " << item; } } // additional cases implemented for backwards compatibility with KDE 3 else return false; return true; } QString KeyboardTranslatorReader::description() const { return _description; } bool KeyboardTranslatorReader::hasNextEntry() { return _hasNext; } KeyboardTranslator::Entry KeyboardTranslatorReader::createEntry( const QString& condition , const QString& result ) { QString entryString("keyboard \"temporary\"\nkey "); entryString.append(condition); entryString.append(" : "); // if 'result' is the name of a command then the entry result will be that command, // otherwise the result will be treated as a string to echo when the key sequence // specified by 'condition' is pressed KeyboardTranslator::Command command; if (parseAsCommand(result,command)) entryString.append(result); else entryString.append('\"' + result + '\"'); QByteArray array = entryString.toUtf8(); QBuffer buffer(&array); buffer.open(QIODevice::ReadOnly); KeyboardTranslatorReader reader(&buffer); KeyboardTranslator::Entry entry; if ( reader.hasNextEntry() ) entry = reader.nextEntry(); return entry; } KeyboardTranslator::Entry KeyboardTranslatorReader::nextEntry() { Q_ASSERT( _hasNext ); KeyboardTranslator::Entry entry = _nextEntry; readNext(); return entry; } bool KeyboardTranslatorReader::parseError() { return false; } QList KeyboardTranslatorReader::tokenize(const QString& line) { QString text = line; // remove comments bool inQuotes = false; int commentPos = -1; for (int i=text.length()-1;i>=0;i--) { QChar ch = text[i]; if (ch == '\"') inQuotes = !inQuotes; else if (ch == '#' && !inQuotes) commentPos = i; } if (commentPos != -1) text.remove(commentPos,text.length()); text = text.simplified(); // title line: keyboard "title" static QRegExp title("keyboard\\s+\"(.*)\""); // key line: key KeySequence : "output" // key line: key KeySequence : command static QRegExp key("key\\s+([\\w\\+\\s\\-\\*\\.]+)\\s*:\\s*(\"(.*)\"|\\w+)"); QList list; if ( text.isEmpty() ) { return list; } if ( title.exactMatch(text) ) { Token titleToken = { Token::TitleKeyword , QString() }; Token textToken = { Token::TitleText , title.capturedTexts()[1] }; list << titleToken << textToken; } else if ( key.exactMatch(text) ) { Token keyToken = { Token::KeyKeyword , QString() }; Token sequenceToken = { Token::KeySequence , key.capturedTexts()[1].remove(' ') }; list << keyToken << sequenceToken; if ( key.capturedTexts()[3].isEmpty() ) { // capturedTexts()[2] is a command Token commandToken = { Token::Command , key.capturedTexts()[2] }; list << commandToken; } else { // capturedTexts()[3] is the output string Token outputToken = { Token::OutputText , key.capturedTexts()[3] }; list << outputToken; } } else { qWarning() << "Line in keyboard translator file could not be understood:" << text; } return list; } KeyboardTranslator::Entry::Entry() : _keyCode(0) , _modifiers(Qt::NoModifier) , _modifierMask(Qt::NoModifier) , _state(NoState) , _stateMask(NoState) , _command(NoCommand) { } bool KeyboardTranslator::Entry::operator==(const Entry& rhs) const { return _keyCode == rhs._keyCode && _modifiers == rhs._modifiers && _modifierMask == rhs._modifierMask && _state == rhs._state && _stateMask == rhs._stateMask && _command == rhs._command && _text == rhs._text; } bool KeyboardTranslator::Entry::matches(int keyCode , Qt::KeyboardModifiers modifiers, States testState) const { if ( _keyCode != keyCode ) return false; if ( (modifiers & _modifierMask) != (_modifiers & _modifierMask) ) return false; // if modifiers is non-zero, the 'any modifier' state is implicit if ( modifiers != 0 ) testState |= AnyModifierState; if ( (testState & _stateMask) != (_state & _stateMask) ) return false; // special handling for the 'Any Modifier' state, which checks for the presence of // any or no modifiers. In this context, the 'keypad' modifier does not count. bool anyModifiersSet = modifiers != 0 && modifiers != Qt::KeypadModifier; bool wantAnyModifier = _state & KeyboardTranslator::AnyModifierState; if ( _stateMask & KeyboardTranslator::AnyModifierState ) { if ( wantAnyModifier != anyModifiersSet ) return false; } return true; } QByteArray KeyboardTranslator::Entry::escapedText(bool expandWildCards,Qt::KeyboardModifiers modifiers) const { QByteArray result(text(expandWildCards,modifiers)); for ( int i = 0 ; i < result.count() ; i++ ) { char ch = result[i]; char replacement = 0; switch ( ch ) { case 27 : replacement = 'E'; break; case 8 : replacement = 'b'; break; case 12 : replacement = 'f'; break; case 9 : replacement = 't'; break; case 13 : replacement = 'r'; break; case 10 : replacement = 'n'; break; default: // any character which is not printable is replaced by an equivalent // \xhh escape sequence (where 'hh' are the corresponding hex digits) if ( !QChar(ch).isPrint() ) replacement = 'x'; } if ( replacement == 'x' ) { result.replace(i,1,"\\x"+QByteArray(1,ch).toHex()); } else if ( replacement != 0 ) { result.remove(i,1); result.insert(i,'\\'); result.insert(i+1,replacement); } } return result; } QByteArray KeyboardTranslator::Entry::unescape(const QByteArray& input) const { QByteArray result(input); for ( int i = 0 ; i < result.count()-1 ; i++ ) { QByteRef ch = result[i]; if ( ch == '\\' ) { char replacement[2] = {0,0}; int charsToRemove = 2; bool escapedChar = true; switch ( result[i+1] ) { case 'E' : replacement[0] = 27; break; case 'b' : replacement[0] = 8 ; break; case 'f' : replacement[0] = 12; break; case 't' : replacement[0] = 9 ; break; case 'r' : replacement[0] = 13; break; case 'n' : replacement[0] = 10; break; case 'x' : { // format is \xh or \xhh where 'h' is a hexadecimal // digit from 0-9 or A-F which should be replaced // with the corresponding character value char hexDigits[3] = {0}; if ( (i < result.count()-2) && isxdigit(result[i+2]) ) hexDigits[0] = result[i+2]; if ( (i < result.count()-3) && isxdigit(result[i+3]) ) hexDigits[1] = result[i+3]; unsigned charValue = 0; sscanf(hexDigits,"%x",&charValue); replacement[0] = (char)charValue; charsToRemove = 2 + strlen(hexDigits); } break; default: escapedChar = false; } if ( escapedChar ) result.replace(i,charsToRemove,replacement); } } return result; } void KeyboardTranslator::Entry::insertModifier( QString& item , int modifier ) const { if ( !(modifier & _modifierMask) ) return; if ( modifier & _modifiers ) item += '+'; else item += '-'; if ( modifier == Qt::ShiftModifier ) item += "Shift"; else if ( modifier == Qt::ControlModifier ) item += "Ctrl"; else if ( modifier == Qt::AltModifier ) item += "Alt"; else if ( modifier == Qt::MetaModifier ) item += "Meta"; else if ( modifier == Qt::KeypadModifier ) item += "KeyPad"; } void KeyboardTranslator::Entry::insertState( QString& item , int state ) const { if ( !(state & _stateMask) ) return; if ( state & _state ) item += '+' ; else item += '-' ; if ( state == KeyboardTranslator::AlternateScreenState ) item += "AppScreen"; else if ( state == KeyboardTranslator::NewLineState ) item += "NewLine"; else if ( state == KeyboardTranslator::AnsiState ) item += "Ansi"; else if ( state == KeyboardTranslator::CursorKeysState ) item += "AppCursorKeys"; else if ( state == KeyboardTranslator::AnyModifierState ) item += "AnyModifier"; else if ( state == KeyboardTranslator::ApplicationKeypadState ) item += "AppKeypad"; } QString KeyboardTranslator::Entry::resultToString(bool expandWildCards,Qt::KeyboardModifiers modifiers) const { if ( !_text.isEmpty() ) return escapedText(expandWildCards,modifiers); else if ( _command == EraseCommand ) return "Erase"; else if ( _command == ScrollPageUpCommand ) return "ScrollPageUp"; else if ( _command == ScrollPageDownCommand ) return "ScrollPageDown"; else if ( _command == ScrollLineUpCommand ) return "ScrollLineUp"; else if ( _command == ScrollLineDownCommand ) return "ScrollLineDown"; else if ( _command == ScrollLockCommand ) return "ScrollLock"; return QString(); } QString KeyboardTranslator::Entry::conditionToString() const { QString result = QKeySequence(_keyCode).toString(); insertModifier( result , Qt::ShiftModifier ); insertModifier( result , Qt::ControlModifier ); insertModifier( result , Qt::AltModifier ); insertModifier( result , Qt::MetaModifier ); insertModifier( result , Qt::KeypadModifier ); insertState( result , KeyboardTranslator::AlternateScreenState ); insertState( result , KeyboardTranslator::NewLineState ); insertState( result , KeyboardTranslator::AnsiState ); insertState( result , KeyboardTranslator::CursorKeysState ); insertState( result , KeyboardTranslator::AnyModifierState ); insertState( result , KeyboardTranslator::ApplicationKeypadState ); return result; } KeyboardTranslator::KeyboardTranslator(const QString& name) : _name(name) { } void KeyboardTranslator::setDescription(const QString& description) { _description = description; } QString KeyboardTranslator::description() const { return _description; } void KeyboardTranslator::setName(const QString& name) { _name = name; } QString KeyboardTranslator::name() const { return _name; } QList KeyboardTranslator::entries() const { return _entries.values(); } void KeyboardTranslator::addEntry(const Entry& entry) { const int keyCode = entry.keyCode(); _entries.insert(keyCode,entry); } void KeyboardTranslator::replaceEntry(const Entry& existing , const Entry& replacement) { if ( !existing.isNull() ) _entries.remove(existing.keyCode(),existing); _entries.insert(replacement.keyCode(),replacement); } void KeyboardTranslator::removeEntry(const Entry& entry) { _entries.remove(entry.keyCode(),entry); } KeyboardTranslator::Entry KeyboardTranslator::findEntry(int keyCode, Qt::KeyboardModifiers modifiers, States state) const { foreach(const Entry& entry, _entries.values(keyCode)) { if ( entry.matches(keyCode,modifiers,state) ) return entry; } return Entry(); // entry not found } } // namespace QTerm qterm-0.7.3/src/keyboardtranslator.h000066400000000000000000000402301332762052600175300ustar00rootroot00000000000000/* Modified by Ran Lu for QTerm. This source file is part of Konsole, a terminal emulator. Copyright 2007-2008 by Robert Knight 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. */ #ifndef KEYBOARDTRANSLATOR_H #define KEYBOARDTRANSLATOR_H // Qt #include #include #include #include #include class QIODevice; class QTextStream; namespace QTerm { /** * A convertor which maps between key sequences pressed by the user and the * character strings which should be sent to the terminal and commands * which should be invoked when those character sequences are pressed. * * Konsole supports multiple keyboard translators, allowing the user to * specify the character sequences which are sent to the terminal * when particular key sequences are pressed. * * A key sequence is defined as a key code, associated keyboard modifiers * (Shift,Ctrl,Alt,Meta etc.) and state flags which indicate the state * which the terminal must be in for the key sequence to apply. */ class KeyboardTranslator { public: /** * The meaning of a particular key sequence may depend upon the state which * the terminal emulation is in. Therefore findEntry() may return a different * Entry depending upon the state flags supplied. * * This enum describes the states which may be associated with with a particular * entry in the keyboard translation entry. */ enum State { /** Indicates that no special state is active */ NoState = 0, /** * TODO More documentation */ NewLineState = 1, /** * Indicates that the terminal is in 'Ansi' mode. * TODO: More documentation */ AnsiState = 2, /** * TODO More documentation */ CursorKeysState = 4, /** * Indicates that the alternate screen ( typically used by interactive programs * such as screen or vim ) is active */ AlternateScreenState = 8, /** Indicates that any of the modifier keys is active. */ AnyModifierState = 16, /** Indicates that the numpad is in application mode. */ ApplicationKeypadState = 32 }; Q_DECLARE_FLAGS(States,State) /** * This enum describes commands which are associated with particular key sequences. */ enum Command { /** Indicates that no command is associated with this command sequence */ NoCommand = 0, /** TODO Document me */ SendCommand = 1, /** Scroll the terminal display up one page */ ScrollPageUpCommand = 2, /** Scroll the terminal display down one page */ ScrollPageDownCommand = 4, /** Scroll the terminal display up one line */ ScrollLineUpCommand = 8, /** Scroll the terminal display down one line */ ScrollLineDownCommand = 16, /** Toggles scroll lock mode */ ScrollLockCommand = 32, /** Echos the operating system specific erase character. */ EraseCommand = 64 }; Q_DECLARE_FLAGS(Commands,Command) /** * Represents an association between a key sequence pressed by the user * and the character sequence and commands associated with it for a particular * KeyboardTranslator. */ class Entry { public: /** * Constructs a new entry for a keyboard translator. */ Entry(); /** * Returns true if this entry is null. * This is true for newly constructed entries which have no properties set. */ bool isNull() const; /** Returns the commands associated with this entry */ Command command() const; /** Sets the command associated with this entry. */ void setCommand(Command command); /** * Returns the character sequence associated with this entry, optionally replacing * wildcard '*' characters with numbers to indicate the keyboard modifiers being pressed. * * TODO: The numbers used to replace '*' characters are taken from the Konsole/KDE 3 code. * Document them. * * @param expandWildCards Specifies whether wild cards (occurrences of the '*' character) in * the entry should be replaced with a number to indicate the modifier keys being pressed. * * @param modifiers The keyboard modifiers being pressed. */ QByteArray text(bool expandWildCards = false, Qt::KeyboardModifiers modifiers = Qt::NoModifier) const; /** Sets the character sequence associated with this entry */ void setText(const QByteArray& text); /** * Returns the character sequence associated with this entry, * with any non-printable characters replaced with escape sequences. * * eg. \\E for Escape, \\t for tab, \\n for new line. * * @param expandWildCards See text() * @param modifiers See text() */ QByteArray escapedText(bool expandWildCards = false, Qt::KeyboardModifiers modifiers = Qt::NoModifier) const; /** Returns the character code ( from the Qt::Key enum ) associated with this entry */ int keyCode() const; /** Sets the character code associated with this entry */ void setKeyCode(int keyCode); /** * Returns a bitwise-OR of the enabled keyboard modifiers associated with this entry. * If a modifier is set in modifierMask() but not in modifiers(), this means that the entry * only matches when that modifier is NOT pressed. * * If a modifier is not set in modifierMask() then the entry matches whether the modifier * is pressed or not. */ Qt::KeyboardModifiers modifiers() const; /** Returns the keyboard modifiers which are valid in this entry. See modifiers() */ Qt::KeyboardModifiers modifierMask() const; /** See modifiers() */ void setModifiers( Qt::KeyboardModifiers modifiers ); /** See modifierMask() and modifiers() */ void setModifierMask( Qt::KeyboardModifiers modifiers ); /** * Returns a bitwise-OR of the enabled state flags associated with this entry. * If flag is set in stateMask() but not in state(), this means that the entry only * matches when the terminal is NOT in that state. * * If a state is not set in stateMask() then the entry matches whether the terminal * is in that state or not. */ States state() const; /** Returns the state flags which are valid in this entry. See state() */ States stateMask() const; /** See state() */ void setState( States state ); /** See stateMask() */ void setStateMask( States mask ); /** * Returns the key code and modifiers associated with this entry * as a QKeySequence */ //QKeySequence keySequence() const; /** * Returns this entry's conditions ( ie. its key code, modifier and state criteria ) * as a string. */ QString conditionToString() const; /** * Returns this entry's result ( ie. its command or character sequence ) * as a string. * * @param expandWildCards See text() * @param modifiers See text() */ QString resultToString(bool expandWildCards = false, Qt::KeyboardModifiers modifiers = Qt::NoModifier) const; /** * Returns true if this entry matches the given key sequence, specified * as a combination of @p keyCode , @p modifiers and @p state. */ bool matches( int keyCode , Qt::KeyboardModifiers modifiers , States flags ) const; bool operator==(const Entry& rhs) const; private: void insertModifier( QString& item , int modifier ) const; void insertState( QString& item , int state ) const; QByteArray unescape(const QByteArray& text) const; int _keyCode; Qt::KeyboardModifiers _modifiers; Qt::KeyboardModifiers _modifierMask; States _state; States _stateMask; Command _command; QByteArray _text; }; /** Constructs a new keyboard translator with the given @p name */ KeyboardTranslator(const QString& name); //KeyboardTranslator(const KeyboardTranslator& other); /** Returns the name of this keyboard translator */ QString name() const; /** Sets the name of this keyboard translator */ void setName(const QString& name); /** Returns the descriptive name of this keyboard translator */ QString description() const; /** Sets the descriptive name of this keyboard translator */ void setDescription(const QString& description); /** * Looks for an entry in this keyboard translator which matches the given * key code, keyboard modifiers and state flags. * * Returns the matching entry if found or a null Entry otherwise ( ie. * entry.isNull() will return true ) * * @param keyCode A key code from the Qt::Key enum * @param modifiers A combination of modifiers * @param state Optional flags which specify the current state of the terminal */ Entry findEntry(int keyCode , Qt::KeyboardModifiers modifiers , States state = NoState) const; /** * Adds an entry to this keyboard translator's table. Entries can be looked up according * to their key sequence using findEntry() */ void addEntry(const Entry& entry); /** * Replaces an entry in the translator. If the @p existing entry is null, * then this is equivalent to calling addEntry(@p replacement) */ void replaceEntry(const Entry& existing , const Entry& replacement); /** * Removes an entry from the table. */ void removeEntry(const Entry& entry); /** Returns a list of all entries in the translator. */ QList entries() const; private: QMultiHash _entries; // entries in this keyboard translation, // entries are indexed according to // their keycode QString _name; QString _description; }; Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::States) Q_DECLARE_OPERATORS_FOR_FLAGS(KeyboardTranslator::Commands) /** * Parses the contents of a Keyboard Translator (.keytab) file and * returns the entries found in it. * * Usage example: * * @code * QFile source( "/path/to/keytab" ); * source.open( QIODevice::ReadOnly ); * * KeyboardTranslator* translator = new KeyboardTranslator( "name-of-translator" ); * * KeyboardTranslatorReader reader(source); * while ( reader.hasNextEntry() ) * translator->addEntry(reader.nextEntry()); * * source.close(); * * if ( !reader.parseError() ) * { * // parsing succeeded, do something with the translator * } * else * { * // parsing failed * } * @endcode */ class KeyboardTranslatorReader { public: /** Constructs a new reader which parses the given @p source */ KeyboardTranslatorReader( QIODevice* source ); /** * Returns the description text. * TODO: More documentation */ QString description() const; /** Returns true if there is another entry in the source stream */ bool hasNextEntry(); /** Returns the next entry found in the source stream */ KeyboardTranslator::Entry nextEntry(); /** * Returns true if an error occurred whilst parsing the input or * false if no error occurred. */ bool parseError(); /** * Parses a condition and result string for a translator entry * and produces a keyboard translator entry. * * The condition and result strings are in the same format as in */ static KeyboardTranslator::Entry createEntry( const QString& condition , const QString& result ); private: struct Token { enum Type { TitleKeyword, TitleText, KeyKeyword, KeySequence, Command, OutputText }; Type type; QString text; }; QList tokenize(const QString&); void readNext(); bool decodeSequence(const QString& , int& keyCode, Qt::KeyboardModifiers& modifiers, Qt::KeyboardModifiers& modifierMask, KeyboardTranslator::States& state, KeyboardTranslator::States& stateFlags); static bool parseAsModifier(const QString& item , Qt::KeyboardModifier& modifier); static bool parseAsStateFlag(const QString& item , KeyboardTranslator::State& state); static bool parseAsKeyCode(const QString& item , int& keyCode); static bool parseAsCommand(const QString& text , KeyboardTranslator::Command& command); QIODevice* _source; QString _description; KeyboardTranslator::Entry _nextEntry; bool _hasNext; }; inline int KeyboardTranslator::Entry::keyCode() const { return _keyCode; } inline void KeyboardTranslator::Entry::setKeyCode(int keyCode) { _keyCode = keyCode; } inline void KeyboardTranslator::Entry::setModifiers( Qt::KeyboardModifiers modifier ) { _modifiers = modifier; } inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifiers() const { return _modifiers; } inline void KeyboardTranslator::Entry::setModifierMask( Qt::KeyboardModifiers mask ) { _modifierMask = mask; } inline Qt::KeyboardModifiers KeyboardTranslator::Entry::modifierMask() const { return _modifierMask; } inline bool KeyboardTranslator::Entry::isNull() const { return ( *this == Entry() ); } inline void KeyboardTranslator::Entry::setCommand( Command command ) { _command = command; } inline KeyboardTranslator::Command KeyboardTranslator::Entry::command() const { return _command; } inline void KeyboardTranslator::Entry::setText( const QByteArray& text ) { _text = unescape(text); } inline int oneOrZero(int value) { return value ? 1 : 0; } inline QByteArray KeyboardTranslator::Entry::text(bool expandWildCards,Qt::KeyboardModifiers modifiers) const { QByteArray expandedText = _text; if (expandWildCards) { int modifierValue = 1; modifierValue += oneOrZero(modifiers & Qt::ShiftModifier); modifierValue += oneOrZero(modifiers & Qt::AltModifier) << 1; modifierValue += oneOrZero(modifiers & Qt::ControlModifier) << 2; for (int i=0;i<_text.length();i++) { if (expandedText[i] == '*') expandedText[i] = '0' + modifierValue; } } return expandedText; } inline void KeyboardTranslator::Entry::setState( States state ) { _state = state; } inline KeyboardTranslator::States KeyboardTranslator::Entry::state() const { return _state; } inline void KeyboardTranslator::Entry::setStateMask( States stateMask ) { _stateMask = stateMask; } inline KeyboardTranslator::States KeyboardTranslator::Entry::stateMask() const { return _stateMask; } } Q_DECLARE_METATYPE(QTerm::KeyboardTranslator::Entry) Q_DECLARE_METATYPE(const QTerm::KeyboardTranslator*) #endif // KEYBOARDTRANSLATOR_H qterm-0.7.3/src/keydialog.cpp000066400000000000000000000155631332762052600161340ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'keydialog.ui' ** ** Created: Thu Jan 2 20:10:25 2003 ** by: The User Interface Compiler ($Id$) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "keydialog.h" #include "qtermconfig.h" #include "qtermglobal.h" #include namespace QTerm { /* * Constructs a keyDialog as a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ keyDialog::keyDialog( QWidget* parent, Qt::WindowFlags fl ) : QDialog( parent, fl ),bgKey(this) { ui.setupUi(this); bgKey.addButton(ui.radioButton1,0); bgKey.addButton(ui.radioButton2,1); bgKey.addButton(ui.radioButton3,2); connectSlots(); pConf = Global::instance()->fileCfg(); loadName(); } /* * Destroys the object and frees any allocated resources */ keyDialog::~keyDialog() { } void keyDialog::connectSlots() { connect( ui.nameListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(onNamechange(int)) ); connect( ui.addButton, SIGNAL(clicked()), this, SLOT(onAdd()) ); connect( ui.deleteButton, SIGNAL(clicked()), this, SLOT(onDelete()) ); connect( ui.updateButton, SIGNAL(clicked()), this, SLOT(onUpdate()) ); connect( ui.closeButton, SIGNAL(clicked()), this, SLOT(onClose()) ); connect( ui.upButton, SIGNAL(clicked()), this, SLOT(onUp()) ); connect( ui.downButton, SIGNAL(clicked()), this, SLOT(onDown()) ); connect( ui.leftButton, SIGNAL(clicked()), this, SLOT(onLeft()) ); connect( ui.rightButton, SIGNAL(clicked()), this, SLOT(onRight()) ); connect( ui.enterButton, SIGNAL(clicked()), this, SLOT(onEnter()) ); connect( &bgKey, SIGNAL(buttonClicked(int)), this, SLOT(onSelect(int)) ); connect( ui.scriptButton, SIGNAL(clicked()), this, SLOT(onScript()) ); connect( ui.programButton, SIGNAL(clicked()), this, SLOT(onProgram()) ); } void keyDialog::onNamechange( int item ) { loadKey(item); } void keyDialog::onAdd() { QString strTmp = pConf->getItemValue("key", "num").toString(); int num = strTmp.toInt(); strTmp.setNum(num+1); pConf->setItemValue("key","num", strTmp); QString strValue; switch(bgKey.checkedId()) { case 0: strValue = "0"+ui.keyEdit->text().toLocal8Bit(); break; case 1: strValue = "1"+ui.scriptEdit->text().toLocal8Bit(); break; case 2: strValue = "2"+ui.programEdit->text().toLocal8Bit(); break; } strTmp = QString("key%1").arg(num); pConf->setItemValue("key",strTmp,strValue); strTmp = QString("name%1").arg(num); pConf->setItemValue("key", strTmp, ui.nameEdit->text()); ui.nameListWidget->addItem(ui.nameEdit->text()); ui.nameListWidget->setCurrentRow(ui.nameListWidget->count()-1); } void keyDialog::onDelete() { QString strTmp = pConf->getItemValue("key", "num").toString(); int num = strTmp.toInt(); if(num==0) return; strTmp.setNum(num-1); pConf->setItemValue("key","num", strTmp); int index = ui.nameListWidget->currentRow(); QString strItem1, strItem2; for( int i=index; i< num-1; i++) { strItem1 = QString("key%1").arg(i); strItem2 = QString("key%1").arg(i+1); pConf->setItemValue("key",strItem1, pConf->getItemValue("key", strItem2)); strItem1 = QString("name%1").arg(i); strItem2 = QString("name%1").arg(i+1); pConf->setItemValue("key",strItem1, pConf->getItemValue("key", strItem2)); } ui.nameListWidget->takeItem(index); ui.nameListWidget->setCurrentRow( qMin(index,ui.nameListWidget->count()-1) ); } void keyDialog::onUpdate() { int index = ui.nameListWidget->currentRow(); if(index<0) return; QString strValue; switch(bgKey.checkedId()) { case 0: strValue = "0"+ui.keyEdit->text().toLocal8Bit(); break; case 1: strValue = "1"+ui.scriptEdit->text().toLocal8Bit(); break; case 2: strValue = "2"+ui.programEdit->text().toLocal8Bit(); break; } QString strTmp; strTmp = QString("key%1").arg(index); pConf->setItemValue("key",strTmp,strValue); strTmp = QString("name%1").arg(index); pConf->setItemValue("key", strTmp, ui.nameEdit->text()); ui.nameListWidget->item(index)->setText(ui.nameEdit->text()); } void keyDialog::onClose() { pConf->save(); done(1); } void keyDialog::onUp() { ui.keyEdit->insert("^[[A"); } void keyDialog::onDown() { ui.keyEdit->insert("^[[B"); } void keyDialog::onLeft() { ui.keyEdit->insert("^[[D"); } void keyDialog::onRight() { ui.keyEdit->insert("^[[C"); } void keyDialog::onEnter() { ui.keyEdit->insert("^M"); } // void keyDialog::onSelect(int id) // { // switch(id) // { // case 0: // key // ui.keyEdit->setEnabled(true); // ui.scriptEdit->setEnabled(false); // ui.scriptButton->setEnabled(false); // ui.programEdit->setEnabled(false); // ui.programButton->setEnabled(false); // break; // case 1: // script // ui.keyEdit->setEnabled(false); // ui.scriptEdit->setEnabled(true); // ui.scriptButton->setEnabled(true); // ui.programEdit->setEnabled(false); // ui.programButton->setEnabled(false); // break; // case 2: // program // ui.scriptEdit->setEnabled(false); // ui.scriptButton->setEnabled(false); // ui.keyEdit->setEnabled(false); // ui.programEdit->setEnabled(true); // ui.programButton->setEnabled(true); // break; // } // } void keyDialog::onScript() { QString script = QFileDialog::getOpenFileName( this,"Select a script", QDir::currentPath(), "Python File (*.py *.txt)"); if ( !script.isNull() ) { ui.scriptEdit->setText(script); } } void keyDialog::onProgram() { QString program = QFileDialog::getOpenFileName( this, "Select a program", QDir::currentPath(),"*"); if ( !program.isNull() ) { ui.programEdit->setText(program); } } void keyDialog::loadName() { QString strTmp = pConf->getItemValue("key", "num").toString(); int num = strTmp.toInt(); for(int i=0; iaddItem(pConf->getItemValue("key", strTmp).toString()); } if(num>0) ui.nameListWidget->setCurrentRow(0); else { ui.radioButton1->setChecked(true); //onSelect(0); } } void keyDialog::loadKey(int n) { QString strTmp = pConf->getItemValue("key", "num").toString(); if(n>=strTmp.toInt()) return; QString strItem; strItem = QString("name%1").arg(n); ui.nameEdit->setText(pConf->getItemValue("key", strItem).toString()); strItem = QString("key%1").arg(n); strTmp = pConf->getItemValue("key", strItem).toString(); if(strTmp[0]=='0') { ui.keyEdit->setText(strTmp.mid(1)); ui.radioButton1->setChecked(true); //onSelect(0); }else if(strTmp[0]=='1') { ui.scriptEdit->setText(strTmp.mid(1)); ui.radioButton2->setChecked(true); //onSelect(7); } else if(strTmp[0]=='2') { ui.programEdit->setText(strTmp.mid(1)); ui.radioButton3->setChecked(true); //onSelect(6); } } } // namespace QTerm #include qterm-0.7.3/src/keydialog.h000066400000000000000000000020511332762052600155650ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'keydialog.ui' ** ** Created: Thu Jan 2 20:10:15 2003 ** by: The User Interface Compiler ($Id$) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef KEYDIALOG_H #define KEYDIALOG_H #include #include "ui_keydialog.h" namespace QTerm { class Config; class keyDialog : public QDialog { Q_OBJECT public: keyDialog( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); ~keyDialog(); protected: void connectSlots(); void loadKey(int); void loadName(); Config *pConf; protected slots: void onNamechange(int); void onClose(); void onAdd(); void onDelete(); void onUpdate(); void onScript(); void onProgram(); void onUp(); void onDown(); void onLeft(); void onRight(); void onEnter(); // void onSelect(int); private: Ui::keyDialog ui; QButtonGroup bgKey; }; } // namespace QTerm #endif // KEYDIALOG_H qterm-0.7.3/src/main.cpp000066400000000000000000000074401332762052600151030ustar00rootroot00000000000000/******************************************************************************* FILENAME: main.cpp REVISION: 2001.10.4 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ // remove this when use configure #include "uaocodec.h" #include "qtermframe.h" #include "qtermconfig.h" #include "qtermglobal.h" #include "qterm.h" #include #include #if !defined(_OS_WIN32_) && !defined(Q_OS_WIN32) #include #include #include #endif #include //============================================================================== // Crash Handler: Save the backtrace info to /var/tmp as qterm.pid.timestamp // The line number can be retrieved using addr2line //============================================================================== #ifdef Q_OS_LINUX #include #include #include #include #include #include #include #define QTERM_SIG_MAX_RETS 50 #define QTERM_SIG_LOG_DIR "/var/tmp" // keep big data static to keep sig handler's stack usage to a minimum static void *_rets[QTERM_SIG_MAX_RETS]; static char _sig_fname[PATH_MAX+1]; static char _buf[256]; void sig_fatal_init(int sig); void sig_fatal_finish(); void sig_fatal_init(); void sig_fatal_handler (int sig) { int num, fd, i; i = 0; sig_fatal_finish (); chdir (QTERM_SIG_LOG_DIR); if ((fd = creat (_sig_fname, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0) { i = errno; fd = STDERR_FILENO; } num = backtrace (_rets, QTERM_SIG_MAX_RETS); sprintf (_buf, "Hit with signal %d! Stack trace of last %d functions:\n", sig, num); write (fd, _buf, strlen (_buf)); backtrace_symbols_fd (_rets, num, fd); close (fd); abort (); } void sig_fatal_init () { time_t ut; time (&ut); strftime (_buf, sizeof (_buf), "%Y%m%d.%H%M%S", localtime (&ut)); snprintf (_sig_fname, sizeof (_sig_fname), "%s/%s.%d.%s", QTERM_SIG_LOG_DIR, "qterm", getpid(), _buf); if (access (QTERM_SIG_LOG_DIR, F_OK)) mkdir (QTERM_SIG_LOG_DIR, S_IRWXU | S_IRWXG | S_IRWXO); signal (SIGSEGV, sig_fatal_handler); signal (SIGBUS, sig_fatal_handler); signal (SIGILL, sig_fatal_handler); signal (SIGABRT, sig_fatal_handler); signal (SIGFPE, sig_fatal_handler); } void sig_fatal_finish () { signal (SIGSEGV, SIG_DFL); signal (SIGBUS, SIG_DFL); signal (SIGILL, SIG_DFL); signal (SIGABRT, SIG_DFL); signal (SIGFPE, SIG_DFL); } #endif //Q_OS_LINUX using namespace QTerm; int main( int argc, char ** argv ) { if ( strcmp( qVersion(), QT_MIN_VERSION ) < 0 ) { qFatal("QTerm requires Qt %s or above to run! Qt installed in your system is %s.", QT_MIN_VERSION, qVersion()); } //QApplication::setGraphicsSystem("raster"); QApplication a( argc, argv ); a.setApplicationName("QTerm"); #ifdef Q_OS_LINUX sig_fatal_init(); #endif if( !Global::instance()->isOK() ) { return -1; } // Registrate the new codec (void) new UAOCodec; QTerm::Frame * mw = new QTerm::Frame(); mw->setWindowTitle( "QTerm "+QString(QTERM_VERSION) ); mw->setWindowIcon( QIcon(":/pic/qterm.png") ); mw->show(); a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) ); a.connect( &a, SIGNAL(commitDataRequest(QSessionManager &)), mw, SLOT(saveAndDisconnect()), Qt::DirectConnection); int res = a.exec(); return res; } qterm-0.7.3/src/msgdialog.cpp000066400000000000000000000015361332762052600161250ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'msgDialog.ui' ** ** Created: Fri Nov 24 14:49:01 2000 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "msgdialog.h" #include namespace QTerm { msgDialog::msgDialog( QWidget* parent, Qt::WindowFlags fl ) : QDialog( parent, fl ) { ui.setupUi(this); // signals and slots connections //connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); } /* * Destroys the object and frees any allocated resources */ msgDialog::~msgDialog() { // no need to delete child widgets, Qt does it all for us } } // namespace QTerm #include qterm-0.7.3/src/msgdialog.h000066400000000000000000000012211332762052600155610ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'msgDialog.ui' ** ** Created: Fri Nov 24 14:48:36 2000 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef MSGDIALOG_H #define MSGDIALOG_H #include "ui_msgdialog.h" namespace QTerm { class msgDialog : public QDialog { Q_OBJECT public: msgDialog( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); ~msgDialog(); Ui::msgDialog ui; }; } // namespace QTerm #endif // MSGDIALOG_H qterm-0.7.3/src/osdmessage.cpp000066400000000000000000000127251332762052600163130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2004 by Enrico Ros * * * * 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. * ***************************************************************************/ // qt/kde includes // #include // #include // #include // #include // #include // #include //Added by qt3to4: // #include // #include #include "osdmessage.h" #include "qtermglobal.h" #include #include #include #include #include #include #include // local includes namespace QTerm { PageViewMessage::PageViewMessage(QWidget * parent) : QWidget(parent), m_timer(0), m_message() { setFocusPolicy(Qt::NoFocus); //setBackgroundMode( Qt::NoBackground ); QPalette palette; palette.setColor(backgroundRole(), qApp->palette().color(QPalette::Active, QPalette::Background)); setPalette(palette); // setPaletteBackgroundColor(qApp->palette().color(QPalette::Active, QPalette::Background)); setCursor(QCursor(Qt::ArrowCursor)); move(10, 10); resize(0, 0); hide(); } //slot warp for display, ugly. void PageViewMessage::showText(const QString & message) { display(message); } void PageViewMessage::display(const QString & message, Icon icon, int durationMs, Type type) // give to Caesar what Caesar owns: code taken from Amarok's osd.h/.cpp // "redde (reddite, pl.) cesari quae sunt cesaris", just btw. ;) { //FIXME: add a option in qterm too. /* if ( !KpdfSettings::showOSD() ) { hide(); return; } */ // determine text rectangle if (!isHidden() && message.trimmed() == m_message) { m_timer->setSingleShot(true); m_timer->start(durationMs); return; } m_message = message.trimmed(); m_type = type; QRect textRect = fontMetrics().boundingRect(m_message); textRect.translate(-textRect.left(), -textRect.top()); textRect.adjust(0, 0, 2, 2); int width = textRect.width(), height = fontMetrics().ascent()+fontMetrics().descent(), textXOffset = 0, shadowOffset = m_message.isRightToLeft() ? -1 : 1; // load icon (if set) and update geometry // [QTerm], we don't have a icon at this time. QPixmap symbol; if (icon != None) { switch (icon) { //case Find: //symbol = SmallIcon( "viewmag" ); //break; case Error: symbol = QPixmap(":/pic/messagebox_critical.png"); break; case Warning: symbol = QPixmap(":/pic/messagebox_warning.png"); break; default: symbol = QPixmap(":/pic/messagebox_info.png"); break; } textXOffset = 2 + symbol.width(); width += textXOffset; height = qMax(height, symbol.height()); } QRect geometry(0, 0, width + 10, height + 8); // resize pixmap, mask and widget static QPixmap mask; mask = QPixmap(geometry.size()); m_pixmap = QPixmap(geometry.size()); resize(geometry.size()); // create and set transparency mask QPainter maskPainter(&mask); mask.fill(Qt::black); maskPainter.setBrush(Qt::white); maskPainter.drawRoundRect(geometry, 1600 / geometry.width(), 1600 / geometry.height()); setMask(mask.createHeuristicMask()); // draw background QPainter bufferPainter(&m_pixmap); bufferPainter.setPen(Qt::black); bufferPainter.setFont(font()); bufferPainter.setBrush(palette().brush(QPalette::Window)); bufferPainter.drawRoundRect(geometry, 1600 / geometry.width(), 1600 / geometry.height()); // draw icon if present if (!symbol.isNull()) bufferPainter.drawPixmap(5, (geometry.height() - symbol.height())/2, symbol, 0, 0, symbol.width(), symbol.height()); // draw shadow and text int yText = (geometry.height() - height)/2 + fontMetrics().ascent(); bufferPainter.setPen(palette().color(QPalette::Window).dark(115)); bufferPainter.drawText(5 + textXOffset + shadowOffset, yText + 1, m_message); bufferPainter.setPen(palette().color(QPalette::WindowText)); bufferPainter.drawText(5 + textXOffset, yText, m_message); // show widget and schedule a repaint show(); update(); // close the message window after given mS if (durationMs > 0) { if (!m_timer) { m_timer = new QTimer(this); m_timer->setSingleShot(true); connect(m_timer, SIGNAL(timeout()), SLOT(hide())); } m_timer->start(durationMs); } else if (m_timer) m_timer->stop(); } PageViewMessage::Type PageViewMessage::type() { return m_type; } void PageViewMessage::paintEvent(QPaintEvent * e) { QPainter p(this); p.drawPixmap(e->rect().topLeft(), m_pixmap, e->rect()); } void PageViewMessage::mousePressEvent(QMouseEvent * /*e*/) { if (m_timer) m_timer->stop(); hide(); } } // namespace QTerm //#include "osdmessage.moc" #include qterm-0.7.3/src/osdmessage.h000066400000000000000000000027121332762052600157530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2004 by Enrico Ros * * * * 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. * ***************************************************************************/ #ifndef OSDMESSAGE_H #define OSDMESSAGE_H //Added by qt3to4: // #include // #include // #include // #include #include #include namespace QTerm { /** * A widget that displays messages in the top-left corner. */ class PageViewMessage : public QWidget { Q_OBJECT public: PageViewMessage(QWidget * parent); enum Icon { None = 0, Info, Warning, Error, Find }; enum Type { Normal = 0, IP }; void display(const QString & message, Icon icon = Info, int durationMs = 4000, Type type = Normal); Type type(); public slots: void showText(const QString &); protected: void paintEvent(QPaintEvent * e); void mousePressEvent(QMouseEvent * e); private: QPixmap m_pixmap; QTimer * m_timer; QString m_message; Type m_type; }; } // namespace QTerm #endif qterm-0.7.3/src/overlayWidget.cpp000066400000000000000000000055241332762052600170050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "overlayWidget.h" //#include "statusbar.h" #include //Added by qt3to4: #include #include #include namespace QTerm { OverlayWidget::OverlayWidget( QWidget *parent, QWidget *anchor ) : QFrame( parent->parentWidget()->parentWidget()) , m_anchor( anchor ) , m_parent( parent ) { parent->installEventFilter( this ); hide(); } void OverlayWidget::reposition() { setMaximumSize( parentWidget()->size() ); adjustSize(); // p is in the alignWidget's coordinates QPoint p; p.setX( m_anchor->width() - width() ); p.setY( -height() ); // Position in the toplevelwidget's coordinates QPoint pTopLevel = m_anchor->mapTo( topLevelWidget(), p ); // Position in the widget's parentWidget coordinates QPoint pParent = parentWidget() ->mapFrom( topLevelWidget(), pTopLevel ); // keep it on the screen if( pParent.x() < 0 ) pParent.rx() = 0; // Move 'this' to that position. move( pParent ); } bool OverlayWidget::eventFilter( QObject* o, QEvent* e ) { if ( e->type() == QEvent::Move || e->type() == QEvent::Resize ) reposition(); return QFrame::eventFilter( o, e ); } void OverlayWidget::resizeEvent( QResizeEvent* ev ) { reposition(); QFrame::resizeEvent( ev ); } bool OverlayWidget::event( QEvent *e ) { if ( e->type() == QEvent::ChildAdded ) adjustSize(); return QFrame::event( e ); } } #include qterm-0.7.3/src/overlayWidget.h000066400000000000000000000041741332762052600164520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ #ifndef QTERMOVERLAYWIDGET_H #define QTERMOVERLAYWIDGET_H // #include //Added by qt3to4: #include #include #include #include namespace QTerm { class OverlayWidget : public QFrame { Q_OBJECT public: /** * The widget is parented to the toplevelwidget of alignWidget, * this could be an issue if that widget has an autoAdd Layout */ OverlayWidget( QWidget *parent, QWidget *anchor); virtual void reposition(); protected: virtual void resizeEvent( QResizeEvent* ); virtual bool eventFilter( QObject*, QEvent* ); virtual bool event( QEvent* ); private: QWidget *m_anchor; QWidget *m_parent; }; } #endif qterm-0.7.3/src/pallete.cpp000066400000000000000000000024411332762052600156010ustar00rootroot00000000000000#include "pallete.h" #include #include namespace QTerm { Pallete::Pallete( QWidget* parent, Qt::WindowFlags fl ) : QWidget( parent, fl ) { setupUi(this); frameList << clr0Frame << clr1Frame << clr2Frame << clr3Frame << clr4Frame << clr5Frame << clr6Frame << clr7Frame << clr8Frame << clr9Frame << clr10Frame << clr11Frame << clr12Frame << clr13Frame << clr14Frame << clr15Frame; installEventFilter(this); } bool Pallete::eventFilter(QObject *obj, QEvent *e) { // ignore context menu which is often triggered by right mouse button if (e->type() == QEvent::ContextMenu) { return true; } if (e->type() == QEvent::MouseButtonRelease) { QMouseEvent *me = static_cast(e); QFrame *frame = qobject_cast(childAt(me->pos())); int n = 0; if ( (n=frameList.indexOf(frame)) == -1) return false; switch (me->button()) { case Qt::LeftButton: fgLabel->setStyleSheet(frame->styleSheet()); emit colorChanged(n, 0); break; case Qt::RightButton: if (n<8) { bgLabel->setStyleSheet(frame->styleSheet()); emit colorChanged(n, 1); } break; default: return false; } return true; } return QWidget::eventFilter(obj, e); } } #include qterm-0.7.3/src/pallete.h000066400000000000000000000006441332762052600152510ustar00rootroot00000000000000#ifndef PALLETE_H #define PALLETE_H #include "ui_pallete.h" namespace QTerm { class Pallete : public QWidget, Ui::Pallete { Q_OBJECT signals: void colorChanged(int index, int role); public: Pallete( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); protected: bool eventFilter(QObject *obj, QEvent *e); private: QList frameList; }; } // namespace QTerm #endif // PALLETE_H qterm-0.7.3/src/pic/000077500000000000000000000000001332762052600142215ustar00rootroot00000000000000qterm-0.7.3/src/pic/addr.png000066400000000000000000000247031332762052600156470ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx]{~Hm!$$s8v[ nm\v-k/}Q(QV)Y]K9(*{~?y$v~4$kįzbؗa 1 P NS1HH8L!ӉMt ('@)0mHͺH"L1?Iq #Bд)xqzՒ$V1mi<šKX RN C1V=$4q7rns+ga!Ɵ'&Y0eljᇈw6>$'"Q;ܮ'`ʬԬ*/DYb)bw^GdQ[M #!E4n ;h4v)-mt@RN:j!$d!4xqh @E}4=$f)Ɲ yL] b3 "OZFtMpQY1nt G$ ص:1Hbh,C7o vf؎SsHe ~ŖrXgb u{]7p/q!@_?J(juAMhu"dL&Qu;8:MϏɐ%풫l:+UMv *eЭ`$ ٭#@"@;?JTn 5| C`*=xt{qmshal2^b-igP@W&(L7zH(9UQ:c{|ìy+ZshE[zrX1GgSR5rC"O @Ȓd췂;F,959弋nI yT )Aۺ- ] V@P^ X ӹ9 G.Zl4m\c2 z8m*Nze&"Cw?Jaw fOfjs7 F `Q iO(G/h!@(HHY |H@C`!O+쿇h0^=_FnVo%2jYۚ|=~F?D( Ԟ_O!#O{?&CylzGls)pU쿎32~3Ygb?xF70:{D0k5g\ m%<C̶TX<ڤ|}t+9|+ؤ,/ v5aRѭ_`o\*kR'T'?8ZK~P@LF֛ŀ"~oUF,U)3꿉Z"Q{!7'?F Oyw`WV߸7ꝣ|q\%7Ngw]1;dC ||P uH=ϽZ_w!Y f[Lqﲊ|/MҴl0-G'V>5pwODlaҧ'{ : @#.`<|Gg4m~3F^w}(C|S?Meo0"HQß@$U^ ?[ }' rCҺl<?sS?_Q^+` Ypȿ@7wL/,ٿy?'rrU?adF.+QbDݽs|;[l~oWr( ~hqMrr/Iɦ3oO{{i[\ ??__Yy.,|-~]fXiɽ4{:OQ_CU0]`ɾ F.?E#9lv{?&YCq FΪ@_y._ )/lRi䲟s8C.ϽyYq4П7xXM8fdIa{{mտ_#QQ8G)R oilkrQYrKO ^ls~)L_CmH<=**; cC/@~X9>?f\~׸X?koo|-{osRt~qHo  g78??e}޺{|^~+mޯӾq&_>_wojR<:R~t//|TnNV]>ѰֿN_^8?R~*?)E_PѢ/G}/> }z}-a Z48~@'J<7;Mſ&J)ηVද mߵD?<屁c_R}1i  ,"G6O٨;~`_WX+K G*|SzOuq_J7d=@H.j|1_I._bZ%?qK{wh7^_T~ϧn18pn\烊ހ1j3s!BCV?u3|=s}/]u_ET`/>]pǾt//~Ȫ #U1qUo F_d{c{Nۧ?Dp}r&*T $9O Umv 1 XRX K28K^J/hw 3(L-XIoEU ]ݰ8r3z7k?2]I+}# kR''}NygUN*{?z>NV8>&oO"}De=fa21;Rvz:s+?%$]"+7^x._b{-|PkYvEK.rgYcyanhwW92 syKWxgJY7շxWr{$j_ י1B{q8p3]ۜoHÎ(?ii5],Iŭ)__ W^Z7t1- OKq,[M:/f%CR<)? AΨc~)toM5گrAT`Z.spg[aW R|ŸNz8lxaRq* h`X`-OՙsB-Yl͹*5[fqo줼+2j?7gժ?O?6Vh @ڇ?Ԍ3SOTM}92m.mܗ_R۲Z l eb)?H;]t%['%ӈXtSzA|kP[x0jb_<&7OMIŻwȔ)mۍDLXcRč\Xwn1 1iF*~T.O/{ [=i^7VsAm e{J~N+'y6 iIDAT;% ֓'>Vj.";Z5)_W5Mջ_2|B)dco]<}: 5}IaH6vn˻p@Y:=3-zi T[Г#@ǾkbRJ(pWSMߡT𓧅mEg,Bb؀_)ޤLu5P~7Ӽ$OoInջ 3-0ų{lk1a=-M6L0x U/TF"4e0yeeAL u>z7-$Q1.?0o wɁ_R@TjŬw#]iwyl)^i"TN]=yɉ= `Ȋ?"d$f-ckk[5zg+4Q[3ZI|:ZY l^r}s2MTt.b%Yg0n]Ou]+̭۹:ͫN\{47'y77,/ߨ0FH oĮc 7Y |WJ:|\x㻥Vs3\\%"?&F.iP!s0xusT#_7 1K'nc~4uaϐޣ -?\lBe> : ܃k?VB1% -a]rM^pZxC?/ 1djK/ĬǬqk F5Y؅̧X%q ag1 \,1ޤFm=ymQt؀h56jj~:os lhlXFJTu,DY"i@Cs /O#=l2e?]fwx{}#HT~KX[eA@Uzh!sOb281)zw 2>V5AwJwѽ`cb7A UsLBjF{e 3]!XvRIQw_qox_CN ٲ)iʸBu-o+_/BA-!"v#bU(eSߢMw=TèZ=M;?CGaf+:>V=m\ާ.OwI |\Q{`fktfO`ղiQ' oGhh?p:=x~ >Α_#1n!Z܎fwQB]|ч3/LPS1( ۢ0PhMϜ&^:t2mgq9U@o>\X)Tm3~ 0`XS>*vƂbT1\aNqI,p3J_R6P^ոh2 @3UtA]1V`OuE˫ h`#'y"(FǁÖ@Z˴`[J:o2]? تQm `zP!܃!#ihP_ɟ n T7jH<a:$/#~C`A`*,[_aj\'pV ^?@ au@p0jsv77<\g b@k3f^a pHYs  ~ IDATxwT׾Xb\M4SNKW"%REQ:GQQKbQONUAN#Q@PQlck{Y?5pϳ} <x<j C(ݡTR=J(fP-T;AvR:J4(PA:Ju 5C+(59Ĥ""$pK*ItG],࿏3"">M7C䘨"l<~.^m&xIJ?6 D7P5#C8%0CϺMO =#+l;X0ljIr$lz> |jm %%M^żp.xn%|8&2mSoZRg 8;5{| FVZ@tU[DWEZ% 0M dPM'T>0!|Lg.>x ߞU_s#%Jx$|Dpn6i<'a }tHH,1s ٸ,O+U:o"SX> Efπ," S?Oo_:ᗦT=[~?qB.ВuTtJ/ID[/YNJ%,#L>>Z?M{/"jjrZEY i w6EU)Coh/;FwN]i%*o0h"~WT1{qOl^Ӵ2@8&p0ZN]5mtЛ'<]B.̬.t[Xsmqu۲|9N Kgr.qAG 9N&;v:8IAxlϷYL @Y ~ͻu(V!(` `#O 9Y^_/y,%}>dyΛӛ,"ό'OqÓEwzc6K RF\geYq>CCo$YDmOV!g{T4;|W͔!`cMVjTW] 2@_?yOKfKHd<SRQ"υGZ/Me%@+9ؚvJ0wc3O:(+"Tg"46SNG4?$=d'[]@֧J¿O'k`MK$frx'Ԟq܃׎98ͮbid}~=~ . 7]ID8.K7d%xEb!FWr?6t ?7ɚ d̈́E?1y׃[,T{1w^UF+WUnvȝE='DnO3jTnw,r`ч}!5A ۥ^f$=X(+A9<9#b&I:XZ7ݿ?F<6kӂo=[|!b) zyU#\}ғ7OxʝW ]Y<<\saU+1ԨX]( 9NY35 Sliˢ]TS/3saUPR3:[f7/>p ie [JBo"WAonrG J|}D_OK;8 |m A|s;`ZCɿɳ^sjX;Kfv3י373^e+Fr{ ㌹uHrcn3aJ w:{V2-ьY-dܭXbâ]p/ܽʔyh 'aq=/rKFyd:Pc43֙1nR``;ᶁO _\|}WuQ-r_buo.ؙz>c{ԺXw ۣvVH?.5?0%k̙uX#KP->g;L{0k7.6dD`W{'kcF)%#!?CRmb r7š򚋾WyKf13.×h#u{8O[Gzrr:*;U<ђ)|_IJbaa#$Xd9f=S <6G"ec| qy$Z|4h߸vdx֨g3eF\33Խ?3hOBxgvُY DW0ce N>E>^Ӯ ø=ބky$ٚwl'?(r7,I=cx`%q>9]l$`2T-~#}! 8=[dzNJ;'-أ3wDZZf=L0 C?h'*G"cXH|DŰBbg9^[/Q7]ĉZ/a_J>Da~o쒨ALZbxhSXN,N΂6lEv#=JEMe<] `_ShBT'!:r:~ y=ueYCjfR#9P8P@H!C)CpGZf+-L G_E|M3;?aW\q:kl ~tr+ŭ5[Ij753ہd2Ac  V!Zc]*zsos?cBMprTPi/~o_Fjccьn^aM;Љ.Axto)͛%zRwJё~eCs'xToPfwr\d<mZ|*@1O0oNXjl3iVbδ;ږVFS~!uz_j ?' oBz m5C~ Q?[ne)蛨ݠ-xn$ x[ƞ#(p:׍79ІV9ږ/ tr8%s*XC`nS*ƞ.0?&ṙ Hn:Io֎`֫kSiuJGۈ}G[iW6xu{M7C2GKw/8VSyc"m*wSs,YOֲɽs4VB=~!`~l]-n?c=(;YG7 ySQ]9A'vPܚ!jos36W A\~͕JL+ևT/ Ok|m7N^~v)|4\1]ybv%@'o8yW@T 4Ѐw2A[N_5t:֕.N) ):|НNromi'ȲOm0wëXfd  9I=/5خr8Ya$GS((7D;\hDc|:ܺEeϟ[p.3F_fŴKc|=zA|D}T$:'7_hJP}:u0P  hNtdOEKH;i5 >THO&n"P5ßݮ;ږ1 [4x* ɋRVsd7{;>_P٢t/p(i Ԣws ى2SvT/IgQ&{YdEc}MnÀ GJ@  []ݮ@?8: gqZ㟀H69)\&*@;|QZ;ZeoYK󲼛.Yd_<[PoHny/c{00(8o_ ,Kن 9jr{;8;,pHEyGA:әUQ޲!8pe/-\&)t?ԿQgy O&=J$^S'z78-hZn7\ 5^{;p7_X_WV@{mt6\0`djhl:8W֎qDOES('YGtt3OГL~`T@>ܳʆYH*>痯iQ^bԭ× |c8dab8Iue 'da5*NIf*2n(?~23Fqx}$/uTp- j' p'e/`r2)*,AG:mH3:Nni kDx "4Rr0#Z8'cVf5@K~xE{!Νd#NXm:/b|qˆWLʉm%0 xpcjX{^l%u4X9XAJ*8Y TpGVxʇtlKK#K6 :u{f}C =~^r@ײp;=|6A'p !~ɔZ5z{cr]Nڲ†eOcTz~m)~GpMƞV 8?yA]:XP\y^NXpr'Wi/{֗ttv*9w7i .T1Am9Pʫʙ/'RnMR9ut'~Ì/k0\^Y&xM{VLr {E`y]JaZcOCKɽC!K˨P_{u7mK QD)~;ppW<)*@{Y fџ9?e R\jJÆIuE =UAbr^@Egvb'z(b{V/LfPv'eYRD): /wW_EwjiK{cԔ<d 7 2(ChEZ}-~E !B"bD%!7%!TH3&;>{Eeh^)<뙈\{i.O}cۆI)%ޣH_u<D{dG٬o3{T6k7#xط>G )5byf8F7[bOu@'"ꓦZVSUmk4yDM : NdyYOqCVԱ*$lu?!ms3%*pU2?Шd ׽0hw0R oS%UKH!cN-f{9OOgdĩ0MLۀ0qdk["Go׭5%hUd`GSNe 3f J9<ИZW!3{p`0!.=U(9yOj?tHJL YW/t  f1C \#')Np(pGf2d?=RZkt<'5KJF-E,xf:4E]&kحyt2و_ | ؿq~9xI7ֹt}[^n_ťck 4$i$86w6\APU {L<@=g u|x+HRF`2]hF,Fm HX=v0ۻoblg~vǵ̷ ,2=k:n-9 @DkR;:uquseoA#~frs8##JkJ!AޅOEn<|&]4g<=-sNDD!ͧ'Ii׎UF-~Dqs5-z$bZh,4+}U)W n85cA8 _y5<6Vހ|>ըeJ՚ѫcNPx 2m@ވ-s)u #NeQƒI8n[$q4?c'_-tq2ji j;dl 2 gd1*$Y)\Oz5퉛d7s& ^!+DcF C:tsRD6t4~N0q*beXUnGa[] .q/b;W1ń/!Cq_2.NשE" ZjKk_k"]Kxx_ fb2l*Uπ'yg65TToCZ;эT',\QVJdV/۵:C0m]> H H7Mo|Ψ%^@3q7Xc<Bq-"K͏KԬ )ɥu#ĺ.σ#"Gq󸳦;8#% m, MJ1j >QÂ*6$e84"CDn4=  wNr?m5jxTRhښ2IӠ1ap'5"JHuB~D8s$CbVfdq܇kii9&70 K>++/V?mtRtIحA%#OEj#&;BCv)ZgAIyxF->vYNGXXbZ`Ei7ߞɝ2IW.#?{'u;ꨩ\MX>WnܷzRg][ >7@cs?T_s&tۤ+iO\G\ShT2ODVtnf.'AQGu dñ6HX? ǼE6GLK!`( *l*?K}!{e+ 5-4kau~V&XnT0ntˆ ql@\|%FA@⮶Xobltm_OvqX`X,wI+9{blq$U%9 {Z`BSigW~\EQԝOD*i+u}(J+ &E*)P(4Rq[,@dc+Z>6#6"|)O{FAp]cu(9Y?eO6I)F|BJeUz뚽Bdϗ=6kd!'Q1B4 +i#qxW =|ѩqKƫT8򥏻Ap/@ Iy%'EpI א"g"V<7'>nJk+;3f""J?L ͖^5߇\hmXIHǁ0Cx0Lrp/ c ,} Rޙ?#ʭc\)NLX]-[Ƭ|.)1,]# 1k`g;ǀ^pbߏ g8]da.7k&/[F[Q%8T&j; 8 'clq6AȽtx .iT-DZ#v}LOBc 'P,7XGȗ.T? պ~ntTSE|LZr]'wi1o7v%_&MOdS1g -[eSY#>l(V=oE ^@aP+ JS&-09/QX 2B? 4ZEMGkws#s05s&͸ bmI:7+ 8\.jq9n{ڷ'@N o@aP2a6Z$JNe̘ˏIA Èz"U]J&V^cWD%&@(,YY]Ȋ94DNk?[ş[g@q"'(_}G=EU'y}7͓'I톃Fܟ(A$%`ڹ웠+,r)aF&K̽v8_ Q9;#m=vW'Aj'w(7xΞ$Kf){' 3{3ax Ϥx;ЬkMiu|Ԟf氠BLy!s #Ul9#±6ېs&vL\OW_)0sݠ\s/  l?9 ۖN~W /djguj!$n&r:]?Cۅ=wg4s"Aסdl^ !e NE֖sk|R࿟K"";J"ȼ诔Q㞜 [&v?u!^F܆DzhErIPtPЧ~#;LJk]݊$g:êzgI11"+*FRHTi-ƆQ%1+.۵b,WFŚ\ML_ߏ9Do"ݳf3kJ[[_kЕDr"xQLc \>՞Kyd7Oo^VGE Z/yZo+>Ia2_1߆w?L!9>Gg"߿҃g8ێl]v~D := D9ۣ\ Zf'ݗO#LZDx~*^ al<'ر`+->,?%|䖺P*=" 7 . 九ܵm0*xin$+y?B^+9﫿 4pՎI7ҚSǑBT3CZ:'̝6Boܣy#tY-u2'!U @{iD61g#7u$"3u@8Gg"C Q~]R%@qx /¥\7ˉ96"NM<Y*L֞DM?$} FVyZ ʎ/ޡ9c uF^ "b|[N+m~39 IDAT=F/Rc"7—_(-tDŋ)ѝ9K'@<ϙh'm橭<ӟv+_V5ˀAyz ƀ(/WbC~';.ҋ:/\Ƶ8ZV1]-P9]MHZ -BI@8 >0C#z0%)E9It? vM!igxFfo#.?t%0mvՕcu \_,H#7 '_Im*),92Ӳqgv\7ۉ ]'ϝ_0oe^zio~ڽұ VC[<>'C h|tV:;%L"х#B!p+=$o?zXs|^F#Fa$.SCQ#  j*uEX%6ۮd :[\Zl;HO-9ut7gEl7Şg8p'n.,Xݸsw.1Ȏn,Xʭ \y q\6َ &pΊwa'f#jrhDP͝^%+HX䇱>-݉6e-Rm["> !\tDkS;H333>GqKYrAu Sy2ZQvg$T8D$rMD|B9^UV2JުSeue~Ńێ1ss,9ixWNV=ƚsY37ǚrl8/dž9֜3֚tVٍGv]ԩLҦ槰fg_WFq(Of36\2:#zdKX1hK` , PHgH@#uUyz>4Bz3ԬYNFO;ge R#UjT5 Uk}7Ff^xIw4Lu[IE[E%\2 dBKQ^<[9޴ yIJxo+RJrxaJhm^gʴ|"<5{}.î:I$,QXT5PxN L07 zb/p֞,]L+i@?Q"57͹+^Zg8v@ -y>( $ >T]Z8 xC#J]u|d7{lOGC}̊#K"υӫ.mժS-֚Ye@i *@&菏Rw:?U,~Bg::Nޣc0WMNgd;uJ>P.8`6\@VtEA.:o>U&n//sd}$g'l9.H?\%BIc0Dm?$LV  KS7Oc&P{i6Rxhm\![)aE%\#݆]yuvQ m4/ȕHpoȉ}F+ +V+7DYcIr‹ԓjcWmnDDA吴grs-!2m!I#B6as(ݴ3@实c 1HדwEHmIvZ/L¤lV.C)Y5I )VֿA<Q 2}g#6++:TRr#T $?*F*K1hʛ`{qPI=R2HR1"I+N=bj'c\m,>Z+O{6}R/ Ѭل{_m O73f^`b${kSإÈ+aۣvr#lUV,#eJ~D~?sϯTj6ЂANr0Bq|gVVX` ȤɗS_0 wPH_H,t託(3Cʵo,[/=Hiڢb! /y0 G_DyO? ՃD֐spRWBHd K FrdDIjF<{`D*4DWQH2M = xH´`t(.Ped@`R4883@Jqa/^77IENDB`qterm-0.7.3/src/pic/appearance.png000066400000000000000000000577321332762052600170440ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATxZy\e=-f}YMNYeMZA8h2,!$ Ⱦ/dZR "" k?xϹε<$?nߗ/mq_wØ}h8#27a;I又GD@T~7DkC7EŘ@q%[_z 'x񥂸cĸb\11SHQ{+k+7AhO,3Et~NlARU$W+r"H:E$ ~Lq%J_+1cHDI|w%$Y#cFJ%RPI?#H<֓#xl1 G1]Dpv5W~vRh3WwRYjbY"H2tJ?.V"8 s@w=F$b FsȸV^""N? %WBh3]0b &bBR)6tJ"<BQ|Ј= 97݂"2W֊ʗu[ e~u?%DP&b\y6X0RFrz G(%"%ᷖ]MjՄyA\oAnz 9r|#}Dۈ̈́Ep[Aoi#I~p: lr/\>HP%ktS!i.0.a;DXbp218H NTH y)rLq6}g8"0vK}EhĢ}{]7{,HSO8.oqCebz}V 9tmb"C&D?i?+bM'A-v^_S7(9Xn(!J:'" jcZ_Z+[@g7'+]"q6a7M"vP?^.CC7xv6todA2ݭ}z9WWc5L hq4 y>^F#3$b08[Fn"KmI#&E*"V-Z>56oxeGܘޮxj:{$@-6v9{Ke7U/~OŝJH0hEV8F<xpஃ7_~j@f8hu8nR"&]{Fq>क /ඤGjg\XFvR8Mvo?C",9/9S-r{"Cm&^ i:[.v1.m&K'K9:7.45HRd  tIZ5fPk &FSR2WhrU'D`=0@Gm~tp;; uek1Yy6R~x& z}"X"=ZٰĪV@?EZOE3<Q(C LY%S;wdآyh~ "^f<|0yUxRe@]?ܳ:cp>O{=BO1tKJ _g:d9mv<-]+޴}md*sR;c "+u"+Ȋ@<<@'FR^+b_6fGluK&oX0Iϫ=W{| ':10lWaFlUȖ:azq PC5J?;%B?Cas/`)/QeJ1haOD|8"\?HV|[ %kC:6 TUJgN+pR}?b?^*aao{V N;0՞"AM"Ζ:?Ce18{qJD &K#?9 Nln3SExx-Bڸ`E0ΐƽn<ЋeXZʆp6> 3_ד]fx ?R~wVoKDG}yX-N'Wa|Ha M85}(f@/MV08DJm n ~>) j}9۾2!"9}#eu?R*m܎B0 7ֆnpby!H|m(y6HxyyRv̟WktԗЇGZЇR/"_^)b"_^V_(f/V`W歶1y?Yy6 ! [TQVS;|@ꕩR:ߍ[ ~ZoU܂|--kO|>R T}?pfW!dc.^H/$Ou_-{ j{(3f'k^l8 ޼X\0 pț=Y]wə)Y: 2gHщ@nfW!#0n njmqr=gz2x5㳳o.RE3~ @HaQ6Jw|W x)I6?*ɑV"yWt(tbFGlCy0c8f8`}hpltd&Gg:$˙5:x(4Ea@!OM+rx,ۙ9_؝z7$ GchZF,6H'J_ {@'H{ՆE^o'G5dy /祣? y0Áyk{-eRn^l͍ ~f~7.bbkf/m{Vs:l΢L'v|`^};`w~/{2םe;\Yɑz! OD*#ac=mJZ>[tvUg FǷO)UkvFg6Y%ŊeJsۿ>*4]P)H;8s/kB(JDpd(T5bμܾܖ[ˏ-, .{M'sL0SoʙM93ŔL0㜴d9NerŇ\%7,bRLAʁY$<Ź}tRɪ<rcI3szʶ=fƛ-%z9@/@UZ''?t}f^f2׬eV9?Ca8,t3kuC5(#ȫ&2~d#s2fZpm0aBhotSHb$MS0 ĒK3ݎ{,tm.`*jEw{ϸ*m{x$1[%{Kł bEE,{JlEa[$Ɔ]k]fZy{{k1ǜL᎕-o"^sGSRx0PB1e\B$fyEnCvBiAd@0|f:׮8$ 鴵&`dZ8 o7ԿLrћ﯄-535·ɛ<ƍ5cƜ7'QVUX@;ەߦv%=?ئY6͊lZ"ɿuSە3bFnU_VS\3ә7c\+`V/Ir2C=CdvrӚ\g1)Ɣ* n~ADXoutR%Y<~T?WoMJo>:k?Ÿ7&nyf@Q7|ya]>Ld\+u≎C:Tռ @vq6N<?ݯµ=sH>.Mv.ܹʕ & \k:X@p7Eķg&ONvDNa=Ctx'TLeAWI3ܴr_Yfr!M1 tc~/u`][7ëET . pOf19M8l[B.{aM9erd2aM^eRV{?q`-. ]7KAqxKܞ<ŋ ,MauOnhwnpTuL xc9gN %V rTCj9g©Ȗ'ENܼD3y'Ϙ@Q s, OptoGQ"l+%roA©g?V7xr33+/8F\/pH:ayъ*s7eP>5#?e-|'~ԩ^ /NY94o!C!'3P}PB:Tyk_a |%OR$5whwۄFַ>S0yY9d  G+pCxij C5dj>U}>0tX+RINܺsm%=/'F?ӏ'7y9?abLk,j]G'#$u.0@Q ?F)3zYtaY/la4SF9O<1_k?|:oӺ[͋;Wr߿9\,D3SEh2ujBրT!!*3ՐV UWU}]}}ZQN/ݛqzl\=Lų}G~4Gx;973z~?υe'lÇ aM.|I 2KP`z\tmel(yɑ.z@]M)8%k6ٓۖ 8_,Q,^~)C@b#ʡʠ% p7g qu L=L9 M-ܛgV 5ڭT*gdxps3ڍG.ۀVr}Le-[& c]n VMS^W. -?ƦĄw'د6^qZƥ ]0atY$X%|1bÃ+?,_*B|ur@HbXd\}hXPF;^|x^^l6KMZ#挪WT+s{ڡ$KζLX\ذc?J@ArDD a%$Va~/r%}~)O&} W_دe\  ~_G}ZYxWHH^ Y^ >̱>BHw2+.;+ey^>>`いa֦+ 3=kxj7/# n%sPۼڍ';\!##kZ0^\?{@6s0?ԋ?%(u {( {qɠw7zΖl۲V1W`tYdZ:G@~W[/Jfjh;;QF{\~e<4=H'{;DŽ qğܷ֝3%>d@B$ _VR $ - $#,DŽi5Yˢ3_"jVOPRK'}HG?rz/ڝ6zW}? RD Wm _Y*ig?Il<0 A]s8ӳR' L@pM^&olͳ}x?o'I-TfOn_ޒs4W o;] |DE:@d1e%ۘt<6ͱG >d"A!v:?bs1y=Ԋ]?ɣ} ]aA;wUFa_ ooOzzi|S2 " 8_y(1+xT;hUמ L8PM/^8ҁ7 :-9M, i IDATD(1h:ƒtW ")_ohY8u/Xi%D@ `4y>yw7Ezysr7-kaEfn!R |l2~PDBLq+83ds=X!+r%d sʛϛ5}Lɋx?ӓ;zЏXђ 5`6 r,ZeBM2 h͑׌Iޮ_·V'A2@/^ y[>{"z>﯄XNhw.d:8 n2~]< T{=[ç pgT 88 $Ɂz?q HQ3R@8iG e}cJ#ћix+##x/Op&ѵV.É]MAΐkHEC21e UoKl1'dC;3z(w&oob w3Lr_n1$$kßuڿ}ȼՇ^B1Z_ p0 dGH *1}J;>Sz^_^=܁x9" ]֒sFמ>#$%x_S?w UeF 90ptB߬u7H$ ҅fϓRw$~|XNjho[B>ҀzA71Q啙~ =p֔m Z;Z X  p !IIuү(k R9c6޼=n<ݛ{ gv\hܟh2p TgGIls[Vn?R`p`{w'q?qc|Or (oyHWFIAblG܀Y xP CzAO (}@v`xX}*UƾBuHpcǸiy"֛l/噝xhc6uXѭth8F*tUTTVKOٸ}[]Ο ٿ7Ė}[65Ncӯz_ӻ! `PA2~|g2qHɶ x{ `fl?$  IT{{V BzBJ:@;W; ndpD\V Yђw\|{n䎕-x#::JAQ/G[^='1,jCdeR[jO7s^Ry ˛YG}[=lg>>M\?ŢW >NlՀHuk+U.1!&w.4`.-#aF^$NQ% cEUR_X_U`D8p> S @p[=7տrVu%H3qx<֋{ݸffc N{ӚT +R bm\a4=K3?#^2wOdZƍ'qUBϪo֌RO} pu)s!10c@LsCBaaU K?Fӝ }U @*ɽ<Ջ'bxǶ<57-tȫ%Q Q;ږ(" A U20cF_{+*:X>4BfokE,yB F@kRo0Kg6\#w &p! >Y*ֱ2hNN~٩ˡ^}2VxW%UezA:\ի:״u<͋6-`\CvM _ QI=XlqX>䜱r= ZfRdh˶M+i6|[롖ɝ=57w,.tO_|5|Y cER)B:S z)+;B&e ˜F[3Wn6k11 1 )h`\/^ xr)nH!Q|}6۔Z0) n`JWڈ{Tg!'ok?ysx|~F/MnՋr1 ,}%6} _[H, +`d޼:J<0Q˜D !,iu0;Q1胭؄AĀ{ Vfc;Fb|#%BmHyxSKd"ܼ9wEro;Vr,g ݛU[]W~`sk TmS$$Sĵ* :Zdh6qz\+Ȼ|&< u 4?o^n]Qd:UoQC -7`O#'v" @VOzvM ?( W@ @8K8[w'!%Mn*Phh j)n+۔Ӈa@:˷ 6'r `[(R KyFVwn-}-~=_Tol53-aM6yDɢG(`ws#a0|*9`: MVٞ@HXqd6>[1x KGexSQ=7X bR =Sv z':rӢfܶkʹ02U̓(ی(ӔWj0 ȫ]0ߊL诐FҐP7"^|w%\bmƵt9!͜ۓyZ;'U7<}}`(tolxkf^} )dMfFɳsVS{8}F $Bi'Ti~?)wUY2~Ƅ}$!G$ +ȫB<|dZ?AjؙOQlx}+3qm㊖_H Wa]F'La:!·u ea(eh=HAwo۞9otmUg2j(A,1 ,W3J]|]y&/pIXpDܜ?WpfƜ?uMN}S#-)`@V(rF@bi H/ [,n x77/nƉ%{5/ONUϙS W$Kۜ|=b5G- ܛu~1,3A1]=3Կ1W`YJ v!C*T+sG.٣sPh5zCv&J4$˥X`z}p4_V8/"P6(HխՉ i|GV],dJ\,V/6W߳RZӿR]!J{t-)SB<~@a|stLr:ߙ >U Fbz}) _nz4 V((O`VO!c;^g9sкң:t(݈a_5* k&skCDM W;ajCW_ ,d:5W@5@@AHuwGo+PS #[Mc? `/ PB!|;gzb$H zD՟C@1Pc*WX% $*g)1?8eHNXCB_*Q.Qux&0.tit&s]XpQƷi!m\)-9`&R)j6>aȸ e>nn|"R&Ս؏؇g]9r~!ʠA7pgee6bڥ|٤wpN5/qkrL ]Q6 d 9<.fXYuy$_֥T֧?wqaF[=Rwz:X*w!d51 vGUKM! jP{<7^80cz󩟨 D O'PQ Chh4 @r6X *1 ,T?`0F὾搞9[U "kEk07)CK h@jD: @~Y;ӹ#ݛ=bWz:gw0~*wv40O! ZZPe\c0H]/GNFMK?HaRҙOh;gbt\C5@>̅4[lMftTG,\p>ʋW` ڄo%sw@"!eB>CzVgdHUFt̐X7D_w2qCIp9 !bP }# 3t^&VG;15·\`PmJć$^P05"jG($c]θ0"=S \?;4 a2mfimV PBXGB [k,2 m +p8н$#TfJSjU% }M3mDp&N& 1[M~)&[Ź.|t@ڹL4}MnLBs`hl\Ovhb|}2OV.?͉/&k1z'X HVy&9P4$¨+,Ts0G,(* p`өC+0 ծDF vH"8@gDyD `@.9-/ѼS2_ s ڊOyXJ]!xp€MR7$, ՝$^p1!=O}-$drR¶SC]GYVE4H`T Su(XCL1th)ej}4bfX@Evi_Xv˪D0d <-w/__9sX*zooBЦ" B3({' Iݽ߶9LhN .]w{^#۟~+ 28=p!A$q! f1zKg S _?DLMݹBMq+b*7z6 q` }^ys5 *d c(C/Q.RaU8`oa;l\嫖&|0 tz/BdA"SE7YJA5IThk*\@kZ(yߛp6=Es"[>p @m+ C\7 4fڎx@<^`]` zwR:CkY?<&@P< S@S_a uE0] `wgb)McXU 2qaxZ"Se(o% ^&O_wNr-aj]=!+<<Չgz xLK@_3^)BT Tn$ׇU'3u{^~\Y8ccz|_ϕGpPp U{ 3SyH`b@S4(ĢeJ]p@ ݬu/E@ $WXv_Li9Xq.m{ZwJ/ .a5 ]$3 |edW2a?l?`"30X9$pvuc! ]KB]=ݝt<_lUsiY4uJ:v`Ml\6/ 9 I`,D*?k/y*D*`I% ]'%QÐh؅[ŧj ~<͛;VZ<68LpA1+SbVY* 7bHO >rܶךT'X9X>++ yXߚ~1m琺 Hm OkqcUD[aLٸ@]WeIs'\Е 8[539e.x;H#!dd*cX*REj)l4ܞʫՄwa|؍ʃW&ҿ(S,_0;˗e6C8?]q7Y'_& #dWxC==ۙ/u?s{31Ɠ7uU&6zSW_تuғ4EXئ&陡޸. pn&0e`'<0ɫahF(Q,U8t!90B|s簱!$ l z:0<ͤ_O[R}|&mtIDATO1-'be8(ٳh&O+doLRt X&aT #UcYӕC0( O>#1 U" |k= `Ԫqwi}m+'_M:ezE+w[@>Y}l.]><ރpZlTd 55{^XX, !8R h6<b 6Cƶ~p#v~&!=b/}vB ( cɓPP/f; )`9$Pcg9>;f{@A ti@޴W=̧݇:މ ^˔rȲINz?Y\/.1EfBlDJq#MI`m*jn$gxy&OU>eaxp @y&dO2=#+?"^@^>Y_9o)A-5rAzHnLX ]8)}Sp|#[ؿ{p`%`YR%M3`&ސƗI@.0 ^F*Y'w7 $0 J=? YyN6P|xo]QDI YYk;)UOԽ@\+WLvbH aLP*X #i # RͺXcN_`6 & !Aѯ_ᢵZ1ɬyP$d[َL8LuTa2ߟ(~io-MRa<=v]jk6)Cƺu(#%PV)X ^Q^ܼX.hXa2dk5`[YC԰7%VT>ECy&p @h;,..EVJQU\;S s{-g! bH"<_@BAІ+'F$!ay,Rc0vVP`ݯ{',7h=Ļ) hwFj^AaL׏ށ1gp@q]`Oj+!,P#F~L-Zj}Ke@ː-g/'t M{x郐ry oh9Rp<>PW?Ļ).MN+]tݛR j^^<17l_(!ZS;z!#!`iY0U ڂXuJ|y;7BsU3 _!] Fc+_ qI􈗻kÏX{}}ZQ7D8^ @4v@nɔ+d2-A;5.iQlʐ 0nxcöޟR߭WT^2[¥2p,#hkWL|Thiːd"d9EnB'YO) WUh΍vh3l!#sX]e';ljQTP8yk'3Rn~W:в9M C*! S([944>JyP1gHi5=ORߣ€a_i $^*p wRuYd] W^:oR$*XR"jy3џ)w\@ m*v%cU,v $܀q}+Μ7 z2h*aJ^Ҡf1B8ѭe+m>r*$zx>^90,OT44 >95Go!=21n.| W[ߗh y\Ջݸz3ݛ /}y`\Œc ZB0Ѣr`&b% !*v>DZ52hq]ַJLmǜ91h+h0702fOcV">]&ke])Sn:'by9,!@_~Y]xlܒtӛFh HH4I >`$ @bJ 0fF)4Ho1dh##-E-q9[ 10H,kMbzddN^g$fHy$HbhxkO65J7wwٷkl+;V܈p#џi&įvQW/$yR6oܸ٘qV `]zJ`^b<s4sf !DHT(tѯrasht#kbF(rl0g6;>ͫ0+3K:aͪx^;KxHVm?/iXUr+,@pM} f{xk_B"!)+ka/TDS,}3ﯗBcӍ܁4~NBs p[Gj=-mv <KS5*L9$"y"n;6ʉaޭ&>i 㢞}"EP0k BQSqZ[S^XWPs'q-@‡A!!77:\pk? &W yMŻ,mCA} ( 3C]CN u-kݪ0~RKbD>JAdScy, gZ?բOG!7aV TtęE kTH0_׫а\ zXOgjE>tS$|o4RM;0麿p2 RpEȲ`zK4Iz&7_?xGezl{(^9W$,$I|oW8.f3uy2M˰鐠+$pA~A^QFջ7Л9GG poI{>@'KJg`2'4DCUO> }Z)*ki N#"rT^S*Ą"InQe .yp npvoBzaIROVuOC–A:`ţ@w [t_#6Gf z$$gVZ'XF 7U>/Nx(=<۬K ?Rr7 д8X Ӕ7Xn %qĎmPwSI%`j|f]b-"[~S,`C]`0-|6@ #=@`g-tDgpϿlJ%!A V ;*!~3^bV߽@VUkiop*^@pbo cx8%+sCܭb)U^4}*j!A7wf@0' 4R2`5Pw<ƒ$e4[IzSP3*OB$@]^s`SA #2Kˌ)HuPac%l$nMR4/rk׎X^=Nj`O0ٚ1crg@pVEj!͟@0z}@0z#,: RD:_|qa~/dVΎ?` <5a e,7О`jj!VI֋^QCY?o<]seѼt(Wñ~4մ3q#Pi(\7T՟a4!]הѲpr!oJ!gytq6;|5}K!y!vuKh' 3o1d3҄=Aun*)*OPDDFebv 0yB^bjF}i\Zg`:cG|cw2qTEZ/kh 6Myyp -^pV3`yKQ& ׸ 竛E_W7K?tfFO{L#"ΡBL(DpAsH`v" ZXFf.`j_o `y~0tqɳ#yfH~'[g0~(-nX߯p\^J{>bCdlrs!V !/,,1Av˕'v.Kd·2a.y? 2k] ?g{^FDU@H.!(- 06;m6P Q,dN;U{7?i=A=h@\ZD *Kԓ'8sDgΝ؛Μ9'S:qJ>)+#ܙׁӆ[å[gl~=[cKwn6٠I_`Ue;* ~n|)̫Acfh@`@wB~Kh5ZvYG:o(O.&KN'/%-KfT}",:OƱO=9"ʓI&דLjNrFu)̞18Gnؖ~mnCwc6`׆ڴf&nNU%e3N9TxS5{\.P%A@rb :¦w.z1 $C#_$BO"'.>s+N8D >g(۹O:zg/tvwf/7':Aўزtb杈杈Р7a-9?Q7+ +Y0#ɓGJ`N mE$ ꏂdS[DW=cDh諍M+ã0hyMiDvӪʁxx_ݝKHTqdf9)56Ma:T٢jaAAH@dX6f("ȢM6A.hΟ B+lq(3>||(A +陟̡Φޢ4PU6d? 8Ϻ@\(h' &IʳhQ[Muz TzTx5'_R/GizqGQVXͣ#\WP;+~#%is9NKhf}Ԡ1&tu1-<:?7Il.PEkj| (1rNn'-!VEy_."v#3Nw, Nx˄Ǩ87z 5+NbN#j9 }m8o)w_BC>(46 4ن&tщtΡ>T-{ en(G! Gb #jޏ2@kݜN$f"jEJ1$k0TءM 9y{PT?rŀ1`v WQ1f'*jGSR}N@bx)q? RmG[PRib&s@; npЍ{zqzBv_~h41W5\,+%/h4`Lff؋dЄ@q1QbfCZ; !p3HK٩o^IENDB`qterm-0.7.3/src/pic/article.png000066400000000000000000000151661332762052600163630ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~(IDATx{\_]u#~'bRg-8ʭPa0sfo2O"YR<6?c.%y||Bu?y}ޟ"˫*/ˢ03K]yIZ,X0*L/2hƸ.\A2L d%mY"%h/=7F0K)ۇ 8h Z" FF=:|HHMVjTr|^`\Wݔ7`"]>4PUz`|b 0@d+1Fat2k2|@PfJr3%cH]fU S:c14@8qͬDc&AT0$0 TRggg )YԂllluCLF}P>_Q_(Ԩ 5‹9.^~t1ʣyE9׋r+ QGQN͢[E9Rབྷ Tg f;w?Cuѷd3?s, 5BJF}FP<Ԩ  g g iYYSYY,UJ~*A w{>̟{izCҍUw @ѵ1C^4/;MR;D.9sV~nHAo6卩<;Uf1wyj1zctZف]N!]WcoŃNod('r鑤Uh($uXyM1zLYbch[cw{҂Ο0 `w4ءZxji`fAMI[tt1(鷓t3m$v#6J[g_?td $<>{Roe?ŏ FKv8Nt= %4 56}xl:E9G}jct9ѧZV\K\:˓vO_:]m_p;Z @;~o[vD'eK>w̗r+)JJ?0NzFRB;kW]QmM1ڮcc %I7ØJEOڷf}3cK > v#$i;yZjP!2%ھi9Ӷnm+m[J[eYӖ T m^Bbn;ů1e1M+;)ڸpUs>z(aj޻Ο[v!1ş(`Yȟ|4 lhgjaF iwvl욗`ż|ʇlD O}q 69FUiĬ6%emP5u߸-p#:ѕ`\Ciߚz^[M~R*3v0UGLY*K/4*i|Yt`C0#xG&Mmڝt)WNq;q@x<ο$mnxο7 J^=?ITءmU!/ zlF..k,xh9-~3_6 ftkӀe06Nɤ;=n}TA{0'm.`fQN6CCgp1Q=.5n`3+g >_}<MzhŴΟgz =|DȂx*V M a㺬OAeq18ASp!x&"e[>jf.w#o |RؖTg +Y` 3jYOZYe )m-ϩ W屇n"t۳VCPCK@ 9vPYݿԮ_=6Ib!q鬞q2{@=mp\k , lm,۬]C嵇JEh(O&(Y ޴qI_Ϫ2)ޫb^=ß6 `V`[C\, YF' }*Z bPϒ=L*=_F#=|aYމ:,0Y> aMCVK\v͛bVn`۝=), R6`;-:/我ip;cS^u<4 ûן`wǝޯF`!xbP`M ~=m :{Ј=LշGxжnp\ÝdK LD?Q-s,t{ )m灝?Ď_@@ qdn[W(=\/)\[Ep LG2{(-5 2ÃҲOz|˩?;pGFQ`B9cmHZ=Nwz~f5l,{#x0?&&Y&О\:-yCCn=t4@Rx{|ݿs֚6M"I3uqKE Q bq"r1@AQ3/Y Tt(7/I%nCks@Q9<;y?>~>- y4'N=_K$G{=Ԭp/N'M<5&х"EsD@/C#%ɶM{Xަ=̀a/H}Դh<ޯR]+e6ʳ^[YhakTjæ5>xrPe9EÜ9V걇-ˢTH6&`^gNT՗<:.7gv^<=Y ~$l D҆$S&w.2܍4i@O]9t+ڱw7V݊Yܽ@OO;"k]ՙ\=ӕr +Eڹ<7mu x`6Rp {P@^8Cۧ15y"#e׉Di#=Ez᠈QË=b;uԚX|XXJȋN)fjma71c꨺~n˫ṕG,8D Fzкz88N>zSI=8Ν<\oVag1ܷoh.{<;}"m;-!?oXK|w1wau>~>M:Ujtt&PUY}ggrgqg=!r C;1@"Fl$.|\B] TFΥ}]KrҜWO+/bϥyBʠ% 3ʋyBOEU(c]Rڔ{baOc߯h"6"R"r.D_}6SO}Geޙw&MrV\ٛ%ɖ ?5+C@L*NtHH^H!$  /#H%  ẍen FX=7EXQ㪺!֠\:T1S L|vC!NLǶf{ TM +BD(>%QjVeA5H>  ך֋V,e~zh ёĔ? ѣpD:" b'KC.Ba pHYs  ~ IDATx{\_ƜkaaRIA!Euwt>8$ f̾ssc6Ήr(X0f޿?;x\z\ "jY/xD>-jڻfc}Ojx!J;fOyqHNMR2D`f{57&036=5] -'9RzS % W['9Aqtz5](a%%hF"z']-Hϝ}]IW*Hv.Be1="5$$E1AD?P>k6ʌviJ[W4Ju'[% L>lȗ= DY'z3Hu[g+(KBdWw@g7+Lh<= ֠>et9މn@MkR$춤sm*LsI;<-D1 דIw8,w QK 7-3j0JcMw`l7ZwYUcImEgP;r܁r$g9Օn$w,͌1 ĉcދ)}Mˌ󹺴c:~<}łwYt-](sܡtEJܡi=f61 f{-0 @0W2c_^o]34 -|.E-5_ҡ V JmIio1{ʉut#@%̣w7/7&Q[ѢDܕ̣vMˌ$rx FsIKCuh"ں҄GG6S;&Q^kJ̣}ҁɕ/f8?Km~*~N _E e8 kv(XC9mO/M t|%6t;Hr|4I%if)Wc6NX@?}j/;܏(6,JRSio~zs4iy(Zؐ>OG7SNKJg4 ۃǷN 'Xo*>iok {:>GŢ#yE6Q4=vjǤ}rN- +X]|:bV-kb5\Xy"\6,1|442w,,Hrc5~ bl>`>GL6?X! @V n lP.k=2Ff̂*̇Wjfft5wx:w̑( AT0lS6v)b2TtuQfΐ {R}iZ8GZE3J;xJZ\X * ЃN`[*:X}r r,ao5םf>ΒD'ڷn- ֢Y^"w v7 :o!F/v /?_.fhtACCԟGNA_D\YJ.xPzm !S0 -)U@߰|[plޞ[7r L Cr1;=Xg_c0sDPS6eb@I3:yn`lXؒft@M9W_W@0h-Q6n̡ߧ >x$4)I3n'ɧ*H2 =. X)pt7YCZȉf:-b؆ m۴j`ZѼM:qϖ_%ӥe4!`KXFn_xA`-*`qC.jsw00lOeXv2hg^ll5/LsToqPZ7=r lh /e_C[*&n* B8cؒc [zH59@ P Be0o s4pƂ-8$":@A@(5wQ{ s^ A:4T+&@ PTvu\] & @ 5v2(P4>p{&Agof@^@ @p@ d`u (c 9N=#+: 7(NA~ -*` eм@oP  /`$ ` eK;E!n =v?9! ,> 0e| eh"~ٷm018I$CN# cnr641e dLKg.Za y}ƱTt s,@ 'z /о:$|O$1-)6F2ȹQu9mQRA PZ$8}=[ AG@}P ~q#׭0q;{ 9 J sv^?PŻ RBELnn А()Kր`ţ6<.x%7hTHJn0aخb7 4%,# ՟m(}=o 4U|)_uZ@^75'm- )$6J@x\/ޒ @FJB߆قBL^U]Pce*i~~4Wg)ѲdIL^sOQГfzCUA"sI ekr%ݠ"R]r_6`L0 %G^Ap"Hcؖn%¼f@*)%[.{r(yԸϯQ3`t $06`0+ߙ9y ]D|X?@ΣJ3 kLBHFRHQ70`2`1 qvg^ZjyP ʔ|uM YAa`A0:0.0i)a#sc,Wd67+%;l܃}6ҳ@ek!ϳ+%4!ʻ|)spذw%w!(exxo3 4QROѮ[W& @2$?g2 #M/ M#m]/ vԷ 'h{>z=uzjOɗѺRwF 4EX\::?k^΅` r U 6AGDНJ0cb”Q4awZV}'+]]:Ю _B7ya6*YAFÝ#>lObn5{vT{ >͠D촉0i AߗMHsO\00:k'Jc '|`JhF(TIg`- R@PĮ=j޻őWT=χW8X@%SZ3=َSa7_?*(ㄊrydson଱mA[{zPn)!Gk+(~D?ZN3sd/wEn`ôDfu򏜙zA$惢1Uhc8](Fcb;ĚFTG.n<я}kA$oTR^0míKz2c\&Xd^Y \F)WYڱ>Dg1;Jߞ77<ɟ2sn\:͉xaw0<[j=?GP/>ܖG9p]=P^??{gЊr@Ȼ^hAsL7 )5oT =ɟNj_o}y|? ` wB_W/FZ0AmƑ;؊380sjnZƃ|yr[cUaK.:Ktv]]H !T.Ey!P?={QuJ͛*v<a<+rxnW/.asC]7#1)Ƃ.ԅ{p^<8MO*W/叒.tA.GkQ{6D\=*,TI5R@9ۧԼU7~_׋ ۿηJۍzc֌3U;#9+7.p:?/w(A{*RU.@sy˯"_+azǷ溹db'l1MM (3v3cvjD& lNu@+Mhx}Y;ur.ӱ굓7DevG[fșٕ!3̼q"R_އq\2 Gp@ Ñ PzAoAACԢ[A:kvcgI?DHJ/ բA[0,9yD2He3Qw! PHhY]PN4]۰Qiyַ :C@:;!z@$L!# B 9GFUN\P2Ϣ*@I2}̜d27*ݞ%~]^ BI(am"h%U $2^zDYq WvYq'Bӷ/xZ P@( C)4ym% Jx+DN!6-kqi=6efRpQS+\m%4o(rUNB%T 5Ơv)]օO2]y(%U@D jɁĻS*!J3"oJ"`x{Syݛ}= Ւ2NqQݪB JBYO` Q ^Zz23oNspcdeM^.CԒA*iQrFuBj!!Z"΢@E+!3gqPP|_(LVFYԒ F -߳PP BCo-31AT@jv apo{5kѦJhZh`-A{ `Zp( e ܯ0fDz+L&" ")=`FqIENDB`qterm-0.7.3/src/pic/color-copy.png000066400000000000000000000167431332762052600170300ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~IDATxyXǿ^y3ͣ٦vL˓aB"28 -.eVNeirZlqDQ\FqAv%@yEQBbkx{?}?$dLdZ=G`鸻'{ٔ8ECv4\ `f@CKeD{dC.s'Q#^.x @7 3N L $s'*RQg<1>H  D's;&" b:^0?%Kܒ,|4dnڦx|\H" $_Y\JjM o `4!zKsvwG2mR@`a /Ez,^Zsv3136oIW?Zsd皌.lk0}ĄePL (1҇@)ӀI[O0 #*Ӏ6fC}o)C :V} dHVRXѵ1okk b̷xbѢLonLH=m4i<<*b "vV&%ݾ- Y?`kCđ0qdLY@w$dLYG15*3,ݿ- YGđ0qLM 0q pozKBđ0qdLS@L\9ޒ0qdLY@w$dLYGH, x]<9|k2|TuA3L,@kNuɩjdBL!%Q2Ϗs|Ysy&U]{2Pijɱ}JMV 4S*-x&x˃t0y:<DJS!A$Ay~ oV4,O},WiqJR:!ZV!dEɩ'`K"\em/k|D6fu7JS<ŋU*.%G6w2iD^Fs6C:"φU`R)dk[eаҠa!ՠaAj;JL'=Y`VX#H$B~[d8žٰ 'υ'ry*,K~<Ϳ4,? "{YםJ,ާdie*Hd/xLլHgR,?ŲD ͫti6i#ZI8~M& p<υ$A*'=YSH]ɑ op`&GF9p+s 2d'ORxT=Y` .\T!_ &Z^PҖg2x><Fr9ɟ|M$Ϻ@]w=2뿳KF~cōm}-gj33w1?2 ){!N& Őp4Ν;ܘ#ėJ U?Bwe`Bɪrz/AuF93f-W~mɈ#|?E }g,{kjWf'f]G"y e*OTXbHHN {7⡧WC$Y[ wY/)y(څ1l8/l(gjEoƎ83W\OU,M g8s ;;=,%Sx` O'GY*iϕ -?#sK> Vw=F셣 IG3s+t⮕zO4 Ngk8:4Oj'5?Ν)QNܾԖ~1b#$#p0gO:o\0&60֝'m]0`dۇRYʤMܹ|<tdŸQ!{ℶ7 LNHr٭Zuxa._kM?G-%mY FHOa/Ν,LEy!۷INKP{ tg81<pFGn[jˈ#ʆD_!]o&upU ^j@nSg7h?CtKOkғ0t<ri@qk|Yx,|-i"kuh%c͇>ΖI^IJphQU@CFwxԛOrn/o.LRCݤ?:gEHCd\Q]|#;G:ݠ2ظ؆g777 'M L2Ĝ!Z9>7m3$ ͘XQowej3pbV._o:a9)<vPvn"E:2ֱ!^#B]e5V8x5<%$IpL`h&Bj6Qu劤{$֝yZcYW '=Y]Y[xxyV5duH#-&C $h#ݜ[~u(څGY vofAOdƘ]%fm '6zqUɑ1lQb KҤAiRxEihH.A^Ͼ־2oB)Z tJdcpk{s;F;aO67|\?``~5x|>CMt e(}.[yN7Uu8o~UpT&Ęm(^b\3 L^նެ(ѫX" D,9kO[^0RP^s{`% *VT/xUw~7eu1-Wlx-ثd7&nrd zbCKMo- J0!~ =,6']l!敱Kz}t62O`gjWE"_" ,*3@"dKO$yam ;: 4St+W;p6\j\+U A\)96S.FOM5;|՛_;F&oȠFƤa`$pކXƶh=jh. pfj2&@mSoiz7wau-ܵb<}:gMBƦbGQYHp1/SɼөwFd1ZJowe\=#kOi dj ۻ򨨯+|]pCEI4Q =Z e 3C4Aq"*QS q`2%M kLIӤIX} 0&;p~.q "1o#_<ٺNZH3e~gԔxoğYćE o"H+Xߣ 9o!Eg7zr\ @uNO%" ;!<1|d9-n*}ZEߤmq2 QHx44GE28}ԙ:_)񿮚 u^,hYU :Wx'26D,O^lB?jEG5F?!L} 9'#kDpx5<Oќ5v縷m)5I^"J),#B:;gaq#`Q t` 8\n︔w^7ۏB<ާM-Rt˨ ʉȭyDh?(>qr~8Dx!ٱfiC[+c0XNDPȥi,p dCvv/g-$Cr9A Bl58 #"a 5|OzY\Lr|YlD =fť^ `)m$E._}k>Tw7{B8΃.|~Jr9nVHԧ^mP 5RYJkp_ǥ@\.&J)V29(\Z>?% \>!9?T(;Yo;#-aZRb'R{ b] !VGDf.͇z" `XM:"̳|J6&tɱHO=;#w0!JPFCQ?T}8?%Y^8o6rwaY؞0nOvUL%}IN!DSO }8IW'U۫޽z,eCvDžO-+ =q:2Rf"3 ~ U+pCN7Gvp3nM38ݰ y3Ql_wڷx&UՒju‘O(0 ., Xɉ%xd3WL yͶ:F1WGL/ac#R)n ;")Ʊ*7DLɽm.5pb~Xa]%zS'v4An0X}2q<[AA<GDlF |ep˦jDžkh0{Q! knVIcdmC7\"懊LDI_vEhX&[o`E\B: #, ŏ"ށ'}zH`nqY3eh]_-\}TTCKęScEa0j!Zn.&> %ޝ#E:h7)띁m7IENDB`qterm-0.7.3/src/pic/connect.png000066400000000000000000000215611332762052600163650ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx{tU !Q@kK@f" n "Bn%B.$\Cj"5tV8:VY3ر:v} Ƿl>}y߽E)Eky~ ~o(8nR؏be,  8 n~62E=Y5E( [0BmhdlFQԢ(G&0CB; QCqE \]$AF`hGqE'%]@'c %&( x b$-tBod܎#' 8!8ℌI QDEUDQ FvA(%l% 4@0B2>f=Y!/Bx^62ho ~$!A^ApF(`,5*7H -  6 X;ƯȦf"=l0Nh,wZA0"e(f3Geg[`j힀`[yLl PE#/P!l̡qW$}hci`r5VXo$|ܠ 2fpB- (J?wiWQKJrAlC_@Q?663hЁRqEh\b#bU{βKr(_PE @(DR_ܒ؆b-*]h`dU(ɥ3X/;E>4PlGKRӂ!+Qp<LSʈ B@D4P% t|ZQ8ecGTP B>6f+WsLQk&q4((AG?-lI#sR&^B vd!,;CQ'`<.<&w$uXEd[)rǁq` &KjHV%R$p\-ߙ4_@('o;$k?ly{0pJY\b,B'=~0#6~Fr5`& 紧\,gsdQ>6mBzHhaxDѮ|`9yT%ƵiF~@- CELr7$Y\yrסXbEIdÁ.CO~GYh`0J1XD;>x&%|@E߭!_v|&d9C\a9ɕ/$ q@u!XecKZGMˉ".f@ CTJ"PLoƇdȮ݆HM&(d;NƠeax*GH ]mEJqc͔5'm%7Tj ؅f)(]6.0Α52\V&ܓ(&2D_)fDDJ*@JZX@<̏[% OE6Z{oI7TeW2 i(/ tlc_Ȗcjƞ E5(N@Z(DC-t + Hn-V6q|Hm J)8ny>t_%+>m&ի)xorՄ VbOpX&I]$5#)?vg0C$iT7ry> Z` >wiUsZplAWe`)'XJKdp*bfO/c7=F]r s2._dc M7%%~`=- b6oL`ڶ]$Qn_`,'ǟu2V2ؕtl0K~O"$-e\c%dq6I&IR0d8u `$0GB$4w$X^I6'ʵuu~N ǹȔF4$xQpLIk0A~00Qv&WI@*tu+d"eh7Z0L$M-m.qfC?pe4Q耧,,4t=aTfHZ>d^ɕAK,)(rxB5YE  BLwI9KtKN>lRuIտ 04 },|$=͝1Z`GuWL;ӓz{XB+Q;;j`j,Kk8@耩zbIcsMIS2 l)RFP;>x -іIh.tn<Å34'!#v) E pF!p&"XSB7L8 M6nت7w 0T&h hS-)^<QSVj! CFYxA?'?.&r$j21 U~ڈKf xW䯶Fپ*h|8$ZQ 7zJ@,uvny>" (,`>fi %0{yO{O>Dr\c 5&>-܉ٛ8 K!-oތR LP^7YxI4 Os$G+.@G UQ\D#Y#-!hSh9fj#qŲPďN9x 㲓JMz+DQ:&qKz#ވP6Po]_V^[eޗ:,|1JtOl4N=?a< -&ݭI5~[hM"ih+ 7fG-Ƶ>"i.>pȃ# ~җ7#5kR;2sa)w[0"HPA;[Rbmr侑r.q3 ƗM;<{\s<[ _,N#fؠ>ȩ@+בH>X{N>wz0_$ fS$u⌡gnSG[f 1FtGZBd܄t=G\ yō2oAp>o,h%Pa%}|VnˉioC0+5<=(.ɀ+pݫ1]H4d#Cvf-<5X7/A+C-v1ӺԨ]PįQ^3MAZatO `;)hde.p5 f~|r ) tqmLIWaJ\ d/SlNF2Ѻލ_nKxӽ7gj -Iخ`H* hc O ߁փ*Ky+)`?]tNޥ'mt]jk,>~$D3|Ɵ!t?(R*+#E܌P", l4O:ha]ih]):TːַQsBP ~h+5P4|X|=օ@wNac (@O 1.Jw~K.'xn5ÏF_]o&!g8'(`pMy?E?JRWuipiݛT ^SZZ7~3-ES,b;y;폔TSUN'u\u3d/wSJ.C 9ZN!" @ch6r[«tmHJ]V*Q >mH[M_^'hrwh2ԺglX7`k,EьG.ɠl2ҺLbV]E8« zRzcY{ ZxύPZV$qr=hw?G*Me:.*!?XҤѺ 7"e1R(+tpd-=RBiwp/R. 3ywz_x?uǴ.ukrf+l Rl}$mSH4R"eX݈#"eBy=#Xu u/in#׻~qkL/D:F:6DͼAB2af1|;\M7wglUf ZXeh^i]*]vIf4[KM 3_[Hɜh4֩j1 )!MV--a} WDtS $H~$Cy?="M>49;X u9&eh^*,F$Z7D{מ@Zh =:,F{ d%-%Vdu筁6~ZW( uE{~tRdMBT*i6ƟS Wە'rcS4E47vta]=eo|<kː&;PL:/]0Z]F6  " n {[֖,wCTەS -EuvtPMa HRc!]4MR>g=ϘкW]xѽkx+{+Xt}@~ȝ>2+`x=<;}8,IC!$jhd Ff.A@ѽ6g\!pc-oe7/ЉOLCR\k_mhX;4D FlY'1zVI}xwuƁW"EHaIZ7QwUk&^k+_ݸw(j8X7ߥ"cJwLs#Qu.KY3jcvu9vْJMZ,3_G)T|} @;/񂿹|@iݙ?939&F2Ѻ]xik W{4{lthcdCr9e&JVy Uλ8O_IDlMxK7 ;0'G|<n^1:Cx}_0edJf 9L@ )CFn' ' ݁l+TZ+s$ot.4N8O?C=y`tRCêuN2ZW CLA0<0b)TZf*_\i\>tbG:bD,A{HucL AMD/gB%OIdIk8 *Ux[ru"l{oAAՋL{~zYt8s+sETΣMbк7QA eTG~ue&ş|izV:D+e5]5cfIDATӺYE&&mG@w;ʰ@{98?l,cH=A(;dSH9]}+|} eu1ӄA膬zlmBi{(Z9/xxE_yG[sumx%k%+|t#m[iO?ֹˇKԘNۮkmbX Bj)܎wE fAau?G28k6Oid2OM*y()A `R#Hv'^ ͬҺ2t֭@h_W{5~xS۔uA0+Ӫ1 0lgJ^ SG]w>NF )ٞ? u_-y xo tR3[MO! /qn>nHG09̢3erc&3F+7aCyلyw8cLF4s_a* T3xe~t_@''q5;X@5VF.C3g EKL;݄Ŝxl#`-sR R92cKbaǫ )8w5l^*)p˷ Ht'gR`u]9ل#𣰻r ?]IENDB`qterm-0.7.3/src/pic/copy.png000066400000000000000000000066341332762052600157120ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ NIDATxmTVe/4sfԙ9cM:""A"(/ / 9DSPi FGƴFөmq<釫uGle/_Ϗk͒}7ADx.@h4Zn"qibhF{]\8_ H`Ic[fHGےRnn5D"'O:5&h%o!gˁ; ~ J&pdM\</5W8upQ%0 ܐݳ'۬_ͱek>mF# fKH(u\</ߜL!@muP=OA%h t)r}a X$O~Fݥ]|uelz`O_3X `p0xK oᱴE^36&X $/n\?67`5ՠ]c)k\+@פo Qk*slw¶ͿA л]HE>OI@P[T]O\`u kBmZlFTc L~-8upQz`%*7&0Wߊ鋬V!vULeFX}Z4 GԿ{Le)j'U;Le4]d4[Me5MoX1і,\ja[T \bo~?Ps ?{,G5`RLΑY2.jշewɜ#pi`c,FpQPcln,@ mY ƷXWy5K+̇%;yXHB$ +^c$NhzT@)Pl00n8 *۞o.R%IFI$ce yw1aC3@}[BZkk[VbR]2[f>)גoyH, S$:l;o3&*[ m +k.]ڲz~U |l/5޲ftY5Y'1C俈J+K۷5+bGwҖ[{]GH&W+edU4$ISOQw~)^l?8}[b^C\ع--GrDp,^> F~P*+y^0U@=jWbLBuٷ5+RW `oG_iҙ'ͅ V$OGACoMv2 `/Ɩ~rc|4tf)ZNsgeӥhf*헠O2*O2&=),MZF=Au[q6/__.,Yz4FNZ$l!u].mEV"ܣ7:G7 42&6ܣ;}AVU O{oqn pF>v7-@ h t*K@ h+t*K@ h+t*K@ h+t*K@ h+t*K@ h+t*K@ h+t*K@ `w^2eO_mCmuP}cMEg;ږ^8_6SNu͋C'4GLj\Ź*pg˾j+%^)r1!Xkw,RGkUArdk__/x,'QgF?X-Arp9'ϧ'Vq" S(%"1ٹi3PԄɹb|ڠc px\>p kL U W<,y^RQ_ݻ@N\$ߜLolx"%2)(0%2{?vκ['Jj*AY!3cmKJ6E:&V[To̯߰yO_s7Mg:M 8w_>~ﹴ>-xʍ>[gU.-m6w|%@&Pl6:⣦e >px P az`5-u]NY@,)<(p% h7j͆Cg>WLc{ @mNeXL 0'9lSV`?[+<c8;Q7O pjn"DWfpY-VSٌJ؄r0}FW\B"vJci*%h1+ڊMViSQx4Tp%@RJSq@Sa pHYs  ~ IDATx}eߡF&*?!*UYmijmOF]IPM;O)4BD!Z)$!4f`kqu[oŌu}9׹ "\+/p99;&} ҷ}+m[&F8rj5g0 Z|W9@h섌ph/HdN ߀l7 dF _|2`<%.Q_'~F2Ar<$$+}Gзml fs=gd JC@ޓ{ȁ+7ÐlX [r)k$d CӠ6P(cVSG,Hʂyy AA@YFk-rj}W5 {g3[ٺ#+?pl7tͅ @ <,}Q&= ?;> [esl5 s` XT:BЀu+; - }}[ AIi6L3{^7d.|@zN SUk8Yf' K;_UG(lP_@DȁȢ>$'.N7( Y4) LȟAE5@^ &tsY  A{1o2}3`SC}0_dW.-ڿ l|ط W ς $H? =Azt7acy dH{X{Dyb6.3̥ ?ݬ46Ⱦkph 7'(QV(1wE -A֯/ rkI5@ƃ1t9M8H_sQQf9ꢀ#ΰ"d;ꤣ g ԑ'&ʎͥ.η {aαkI12Cz]V&y0,Ku3@a:P568+_a!G11"cʾ:uddT=VXtaP`0@/-z=̺{^۞_ >hy}A )^b TfS,0>\\ T8lpF/WOd$sQa2*z !8 < <x]GRxhm`W1c'sNhQxF?9GCmJ6)e&Yu0  Qt պaMM|[=ڭd]/j=F6.}~Oo2Sz)a Q`NU;ig !g͒oYd!\8}"Ezk>o 5J,+*y9CMj@:* W"4T .0}'Xn?`Ķb"Bg h5h zy!.xg]~ -Df: \T~[ŢmkP%/g/o]$߮REjDj9,30XyjZtp/Ep …/!!43,geQSSH VmM @5h~*)v=g2Dh gv*A2:]{ ^H7 P9)~TsjDҊE =~ JPQF@T(]j1jT<6[C%J1`GAژCL!\!ts o$CV]L<%&8-"IIo.Kh{8\_)zrZFVS:FU-*觟.O!B0o͚ɷI< m!Ƒ$e,@aF 5^%k49qxJ7 &:_ڶ#!=;@0>J\JGoʄK#Kt"<`{PXCBVH#@: d>@>4`xCT5OZ)-;ڻD(vUD边->p%*b\""+`1cd !`bUHZ_dN xc@ eΚ5Ep$}%Jڟ@doY{ h9w/3R2HlOS'|550302L~y ?Hݫl*{lxRt Ad( _w(:|koE/K YQp|}.Yt/^]SGBLQspeuMƐ;[I O;?(9kW;|S:|{E5^ԗə@KAlȠAHC}mkF=k6.Lz mT0 i3nd9@>+4+G[}-O\"PE~[Q{9pXT1`J|#_̶k;` sqoXXlDII \9|Bs Nviۻ:-z02mhRTNJ01yD2t>:0ۃְۃnwtIo[*p,iicT([zy^m݆J8' Nj9=P^=hLd/N3ok`໲&t^ρN9Tm*m(p!~91XNxcKn~`PKCʎ=Oz7yiӈo%wr;_RP( U>FET>iZ?/n(>EۃZAB$9XM9p3ӌ:B6*RBoOx{/S'B*S녻|?/co|||vƆ`!+ `{ ْpSw%Zonl WnA]GSD"ՙ[Vhzw>2~`4Dz\('%I^(ož(o(z:C =RLXl9+Ocއ\4Dщ.kE]8c\\Y-ο[#?\?PHβ *DV>Wo;DN_s9XpӖ-@+ hEp ̰Tpe*8  ZժP ?oǧ,YCK B U>))Ve"G֛Qlv@6.ʆ@Q'88z~`,)FKM 1 rЉ$ڕQ-5sd;ᛲ3g7ʽҭIdRj?C'ʷ֟v<hǨ>~U=h-SaRW,N=HnEM݀𾻬7.N&|cg2^ǵ/xxSV?oU6ibmg'yfeG]9 f,_hi=pwMY i-Gm>:`r*-CkwQFC6(mt׷W{"B>4;`y0>^'"Z~elN/_fo";X`満Tnow9 ;f?&F6&z]->0Tot.[6cFY@6XDzU1r_BasAufqҸ qB33t#a]>?sDp[ GoZhmKP׽{d3~]@#!=p6E'8'^*(?Xȱ"s, ^CGskRX}΂к? wztְ֥պφn./=^1JM0JS:HLFt@iuPQI[S&Lfc8dDS:D9NKZ{ϰq?zy]z_yww#6x^>nw/}'^s' sU=7{`ꕧu$I%To%0~;"T Q~@3 v\86Nĉ1Z!u̴—dk(Z- = a5p ܣɿB2iJ #lUwV a5qk<nwBP(FW`ˣ)1Z76,!y B:|'?,Y;4,`.v#KTP H` `3UOfu3^ ^ACxǨ+k ~ܶx%^ ۙX?F]o_zQW-ūT<M# d6poBBjX_-B&vS ϠޯZtc-ާ4<pB}Dw07>R/, ܭ7VcJZɶ;e_g8h9"^]z!> y?{a b_ }Lgɯ>0v|l !Hƙkr*CvQywrkTK$-ㆃ 6Y@Dݣ&)^ " awˊ >ќRre796x$z s[ZHiN 6"Hvƨ담xL>+AOX$ t}b-^`¸%}_u%+i 㻖׀+a$bi j&t`}zƒz8.+(pnҤ;C=[>In1GN"*RK(pW·\$z^Ӕ6K$ |QHT()ă\Px'Ovi&8W$w`] L^VAOw'TX5;@HzDʃ?׫k)ӐÇWdz_o3_NSs wEq6miwI݄Oд\'Pw5z,7~44ƲKg 6l$|9v8jh܀iu ̣ E,dPe׾=񱫜HZ=1E*).oney`D0!HvCr|SĠt:]`z?9a8^+ZkaO0ǸD@\? hae<ȔGk"6\$F1Q.A&G<_41~8oZ#%Bu`g0)C H>Cl8q4@G=5Z7YgΝSZ!{l%[BS%(W %fse0pE25$0)~OZO1i O̦rj;U+p充]{mLp痾7QGjI `| UW$ ^XKvrf /f0@I4LЄ?6Lv%o %00ۺ}\^@85BX wSqݻ379@Ui `*OW 8]mgAd{xt9@̇+ptNBG;_ơ `Q—E/峆UWq uk`Xfc{F!Upފ>P'y6/Kzr޼5nUfk#ujQ NGo|3={&q~ L"K^fddT<| xg?L[H Pg| eme g 6N PuFpJurxoUؤz2D? ОtmdRZLH"2^wY 6K7V(.u+~ܺM `69 ,g菪JCߓ`c(v-q,2FIDATXR喍cb]D26p}ųQ=Ku^D|$5SMN1Ij\^?[[2DFܧ韎wt-U@WKg=AR (l<\=5_9'96Xl7nnĕdol-CW@`v~#,E$I ܇$_D*u !YY 6&YLW$D+s/ooحC2KO_O BH+3W/ sH` fPhmN1"Iߥ+UL!/f*[ۡخqQ?N^Yc_5}UK/^c6\\*aY 6>MzL%?z?8ԳYHT ?fXUfu kK&yHn0(o xr IMw Bjj`ӗzwozC8M/Il5 }uPhlx]Oo/0zJϽ%\sg)ؘnqH{Ҧ'/> |{nr,sE;UۯP7F`exe s{kWʨaF;RSyw@ŕ ]YQoW ^QL+8 Vp#;V-Dn\@~p#a[<{"5ZҞ,øaB 6R1Uѷ2ĭ%^߅y<|;?c_3$M2Wn8av}H~} ؙ`c)WwR\LbIٽ-:I柮12WR#axe{3b*$jO 3%;ˢؘ`c򂆤C7ZI6 B1o{rt*b>Ld,o*S?(:?.1rc[ u&1OptΠz@l_yIN86wFygۈ~pnILef믮p,W_'"Y$GG C|e/xKM4Zi8)슘N3gjtb݄N,)(7ܿ7dȁy9!ؘ7_oIl7ri"+C6>ק@㳿70a L'fjHKsg. 6AYCTL""dz|Zpx|m]Ϧ}=z1L^6ې͡> pt0iՅ=)`õp[@pߎ)U 8 [I 6oe'6Kpn8.,۷ENo[X;;>nȞCOP#XF$L~5Bݓ& DrtZÕCQ* ΍ɁoXF*gnh=YAyl æ[FZv/!Tps:wvM$u" 5 Nzy!P ZWn'_|Kd)WF\)4Ѳht.t6FH7~IyCS*Ivl $kJ[V1?m3L`A0%÷M*YFE>zyi`EqHXp!( L5D<̙P9mk״zϖBoO'^i}į9ۣW ptܹٖXXXO7XI= 6Ve3 ۏ@v[Ze"~CǶ!$ٛff&U##6"8ۏ#Uֿ|w7m8wn}굄Ap6W[ȋGj.wOh|n4FJr/F ۈ˴_6͓SLk+ Q]zW/"J?O!gX-*5duEj_LoU붐`xB1D aaKOxV_f-祀8|_j/+,tnIc1Ro0L'߸g#h_ķa'HUw([jHxMR悻6ǐ4]ySomNS־[ QK7$A)-󍭪>'pA@RlV2@DNڡ! T()0\h\4  EOd-sn8TVk/4ݽ>w.#ޖ‹'{9|?~=>rAM#یһ{wyH|8lO<.r(< Mglb[?G _;R Gϫz[QԳ8BlG/hwk!DHo; Q/1r@x58 O9@އ)񉝳oM7;Rt+Q~Y&%dl/V ^A#/(?P“Un3#30721 q6D=.T&)w?7:fN6,/=|B[lR$DEf<Ώv$/@6)!& ? {K8\8n^|OQl8 ~>mVj~v(lmPO<{;ᄯ)Z7NҝTeBu5p>Kft2w_@4qv$)UISxvFC[ FLbHYL|SM&َf;bKu|AOvҮ޳7Nhf_sM(ӀBjjrh|:,uk+nA>~"g1; @8n݆N}YO.Vm A ! :~k#ZM߈f⌟ gExNW(_E{imH$W7 PA0/V#gin wq;Ǘ_ӛvޞGl=X\Do"*֡:3D-yI f@P{4yϯpR6N{B1:[Yd)6f޽z_[}g*T+%J5ĀB_,18N,Bٲ_`#2/ vc^G(8Cuի&/gmo|ng@[T}Ƈ k:|z֞f9ƓO j˳.3OAsBxt 1N/B3MȻ~Xϙ*ކlƸWfۄ| (q*AݾO5CoDU9U(YfR+DE@6"R=SL2db<͂.g4#߄y M=e |@1Fڱ HOr9ֲf;͂JmT{_V4n5uK }@!5({#nr Z5֏Su⥨^E Sc%X3h5ȱ1}rGZըns{wEOJ}@mզ]TTL#4V؋^ V [ m7 Bv|S_gCw-pp z$<s>wdTE67'A,08$'Xy({+:Gb>7 ɯ֤}J(;e@9JR!c{ID*Dqkv0/Gj!cJ1ac֚!@(]ϙ1~~=R2_ci\E4@!e/ϵHdƚtU{P<=yuƔ(F1Z݈EvzZݩvtr)J^TxrRFd@ȳ[%(0 bՠBIl]T4|cj=Jguv3Ʈ{1{jP-(B*2W.&/I@aib|%\2dw&N1iFzrМ*;o]g] M҇}]Ip="4`GcTIǣ86NMRn>9~PpSVd;" B;@KN26PI<IENDB`qterm-0.7.3/src/pic/folder.png000066400000000000000000000026761332762052600162150ustar00rootroot00000000000000PNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<PIDAT8ˍoW\퉝vxnr $F*Q\zBDQRY",`AXbMmd;عԱ&g<\o˹E9G:D1dx0ϯ'l`c{^v탿޹soR&.^,ZFGG) LN *G^bd/d25y7&'Oʋsegg'ܚma~܍0veK&_cb@ ccc}v\8C>'Oꥉr_x{qq៍wJ) XNlmę3gNdhhpox^{feeݻRJEr|zWz>^򓗎;Sr0 BY3Cݣ @Rc-ѓ++j'F~PJ%2/~S>TbϯPnDw $K:%$Ҡ^, '0;; [_5s6p< {;W^&pJBlu n޼rp$|LZRBHwA ^ٱAW07wk ؐkl權 Pm9|(KK`,( 2,@k+fiTe\-6-RЎ!q%J:0UꎆVK$5<,'94XuB,NRblVn #hGG&"f{kUy,;o!n)*U@G" FEYQ*P]r4(C{4tfIK5hOO:P !)p$`uu$``hSZZm]xnZW6ߣ \_6\ȐMnjxGЗMMK G8 Emx 1j<$޾o$i|߫դd 3vnNHۈI\RM RLڋmDaÝ'7sXK{#Qdw*0-ˍꊐ=Om 8Lba(/ L! J$X_P^mW:w3x87r_;֑Kki -8Jc˽DԣLO>D" f8ަj.+di=ʕ^teneY0XТϥ? ^)}CILC@ՂK8Ԫ&ob]n'zS*8@6_%f倔 \}W]|5J"ջfAsLQҠm#QUu[tvP4S eDͷ76 BӥjI* R0*᫿ |Q-խ@J͑˴:&E@n<6]޹;uٳYZ>0TD4i )A>)6_t\ё95W7Pƫqޒί;ϧ|/ [I*RT)  P1(t|b̤kxY5g;{@ 0/OdGoIENDB`qterm-0.7.3/src/pic/fonts.png000066400000000000000000000163711332762052600160700ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~IDATxwTEߙ!HP$*IUY9g& a9f++aE 0(k5 W5QWgӧ{ G=>TWUo}PJQ2.JFJFJFJFJFc%d[ɢsXɢ}%/ެZ؎'Հ$=H%$b嗊eݘ]eC<,P( b(6^/dXuZxQ1ϊޫ>ˀ %ZEr'p}1r)֞UWR,xO1 7^SQݤxikj5."H,{Od͙/>XsF]b;cӎ*2*&nV RE1@[Bi oq kUV]}ZCŜ/c);VM1g*TO]@(p[\M9ק*B=ŌWs4zX٣bzE&ݷn裠lQc'oO˵mOٮH~L=,Ť(M8@U EVb U~b֫?rz H%)ߍ}T1p,E>*+b^_"^ߩ\[b]+z,SZ<Q1y3m}UXh9}`:0 47@i"ao!ń5)N1akzy>oEǴ_)_u 5c S{Ÿgbԃ^+Mz@nGhݗa=uT1hqqsܠ:OѸ{0a9P]@A'oV1f%ogO|f)F>UKfcjk/ap >|`m ŋ/u$XΠ;O01C`Tt0 QUߩX / kH!'5a/ـYv X nZd1 0>$$.cz TBBŅ\@-* Kd`6Z j&m{,!S SyNǀ4} ܠw+1Ph=O BƄO_$^k"eO@U>1 &?%NF| L=0e)QB'Fbb y^ y4`$M^]'`pz N08E+:_^ W«0+8$7 _tu^$^2PH$mwFXm݊n M{fcgP]@oڳa}asro@E}wODz'3_*OĤO`EP(a D c5NFkX3¸e Xopi"BO˰3s=+orlY+H$yKkkO׏L0-;L-$@ToYT0:2lULV%3qޔ"c`0u$ ])ަ5D|.L H.4o9qxOg2bH$eG:"{*<&$^* r7e F[oV3|SWf]BdjHfg5 >蓭#Iei4 "5`][qcћbِD`pbZ6#n1@ >0/wގ ,@7&mk /ᨈ0y֣мz!E$5@a\@ ~B3Rf@5M!cx1< t. z.P:$Llc: Qຑܪ/߻ۯ=ݍr5@);&#0HqMWZxFPnG ^{ްsnĥd朋e+:ReEO\7tX ZaqPg,Ek n" eBG?Bĸǚ3syKm~D-y\?K H>ەLH@G#?ܪ5Z\ !($D;^:y.r:0C,+0h`0cb⓺bŵk1vk.Tۀƶ1~A3}#[񗐙s)0e*,GEBJ 괳ŸAFXFòH  *#;,e?rlEÛO}=WYu@;"A?/<4id9AkF]i\ @nRB߽g Z}Q@Y@c7g_cFN?'0 ԣ]n `J.*vվƙ#Lٷ's3Ch7&#_m@վJr }W}l1pY uo<FXZZ-~0XF\꣫&FA7 _F ׮ڷ` H"}ϊ0hmHau{ŝ2x}?JϯC_ %$?վ DF_~o0 F'fj:hEq@V0w _[9yg.G0m!4B|gntW+*[=y0[290mtI0qfK-d7?}>9͇J3 6GPzH87)JjQkVp$ٷca0hCfPT'} G?X@վ &>UG嶞ĹHM-A7wV6E}]- o n= FnBZCU1T8cH{ zjkW"d/:n0Z|g+HwyPg}01֌VʐǀmZG}.j3Xx<V-Ÿw,fطP"}|?{ȶhcHpT ĵǰ *^߿bFDޯp%Ȑ5|_mL CC k0>V[7Z{ 10hm^4MS`>3jtþp&$3 6:oz3ĭWyb|ˉ ϳɳۆB)2s]܁8 0h!6ß㎙[6[l7 BۄY 3"AmY0]^w5 K?V[Hds>;DFۧFSHg+-hgQ` _/F̻NE)LRw5Zx |_UDx"DpSwlLإ1 ݝ]&]ܝtsu#C7M+H3ٯ3TL.cV*黿 F3/PIX_brS[#oDme$= 5~v߼CX%&n- "OKM;Xe엏r8Y7lC`Ð1  x}_y .<芴Jz};(dAѪWo@3DW#I0Jvx)ynV+<_X^/adF $u Z_1颙dcodm1F@,_O 9E0*яHu>Rv w=aps7]@?G4ITڥ\ckNcF7I+!b)aoa)|4H0B#vF&fgQ?+1_Ynj~XZ8mƞFW@`qdw]}c-?s$I-w* ב7v6IFBȆbvCFaX?5gN-?{R6s7i?fҧ5 )*c䶛 h2tx0qm3 B_.sw_,3e* {1*yL=lP0hmt#38 Ii&.P SIs:!NEoi|e nωZ㑤7=eP@pnY;ul]6~5c{1xRTip?+A䇾HW7vc_6@p_)Wi%+`bp" c `6{h=?0$y -ZTyK^쮄BL'JXAG,' v~:ľ{^mhW=njQ'"00O Xn $0q~0|')uO ךAHO#$ r鱴#Su!$uQ8z*'~<TfbLi>ʑq%6f[ahWC_mk%rݛ|@*~`MOBβ>Jehnx^WBn-G@ a|5<='CNE_qk4( wmQUQtӦ-BP2Il>g [,`kLia:ij}H F 16ː|HAq*10~};ܹw:m}Yg׾ Lmhg aL];[ڇ_[A(HiNyK"Dġ+>Sm Heb1-R\,pd]_Qu@shH60F 1odh|)6j2mA;,c dxB_$)NhǧMyk"4}xG7JF~Lt̎:eOEppz/#+۽NR{"qYPMluj @KY̻@юme҇3I ?Lm>X\[)]pP·$5ce}w3n"Z xRƌF [-ۢ 2{I&{H=j!? P#~u(cRQ^XӷnS%թ7o~cӧ.wzʘ,ҪW"0"=F5E܎#}8%gխE{srA:>ѯ^m .  5$|=f8_{L3q ڴyngs>Pv~j샭jF.Y.ѶH&ʾZ ND]U膐5 6 /gp ׍D_13wF}Apf&H Gu?T?&F!ª]Z1o ζpF[Tn-gQ|_P澀-㡞1h~پ5 BH9  U#pΠGTl Q~\cAcm#h Ht߯r͗W}d@=_U 6WOpm;D@Wxnfͣ۹A]ńRaoDMc ]b8;m`Ԣ@:=ozP ͎?4:|&-i2  ҋ3T=u*~>މ>p@90Ňpw J>- J9GތJEtz|D,w "|+A8T ٝ%PtU؃ƾ JAt8,@؃3@WELb2P 09HS@@*JPʾZ::PXBV,@,1J]b4st&3q+k^<ށsUET~XlLS2 g[lE[CJziIENDB`qterm-0.7.3/src/pic/keys.png000066400000000000000000000224461332762052600157120ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx[gT}$45ILUQ+F 00@j(HD+1X F`AQD"0P6d\ΏZ BPA%TPA%TPA%TPA%T 6 8@sJ6=>ʄ~A" Mh%[J\KPZصȥa99)Ӷ%ՙv6]*<#Lݡ_Wd Y+pkY@;PBLHM7 (q]-ΐ;./۝ʰ Lp'X~@D}*t>];OЖ8YIGLp3UYs;rqÕB+u;:^=鶭)6j^Sw#n&( WPl&"bp5֢:Y@HPNJ/߇@"LD!F_-Y1^k"#.:e3|Bi5SlCEK(fڷ6EjQaTurfC1u "P:1,׉h}LD_x"~_ͅ? \Ѝ:8Œq) 91<E'2MlD{d٣:K\8jpLw٨ԏzUJ'EIDD_ѷDID?Y*ضJ!vrq=iT *bsIՙvst[0 B m[^S /&3"F V&3m_9vâg [09YxEe;Tev-*(MFA5 uB᥊Aڗu[/ R;]f"[kGrڶJSR7@"ģb:<!4[N [HSBIsc@-[W,U  綖 j-^@{%ʅ$ʄ̴$B49( K"(:grxBP>1/UqC=AqYRHgU #bxP &۾О*1T IfDkpDn׿hnh6]!O *tqg<֢# UP=ɠz6;HD+rw q"+T&'Z!o Df2?q?E BE|5<Z=i% g*t /$};2@40bp7\u,{J˗$yƅʼnV\}%۠4KdnM?<'n);JD"x@Dw4D u^@!Z\ wBqyY J[Ao-Cq35Ņp.ҏZۥ ["9rQ`/bEb$x!(CSf$b}?P P"49vpE%Z $>Ne?qp.Ft!N5[$q 6YǁC7&P> Cf,bs@bCUGTeXOå(3$sqv?!ܮMؽN!_ K&;Yn pr IIBge=Fм&D x_aL"P>M">D˺@PBt|&'<-sS q$Hu#@W5,d QɲGs*EJ)L=<$GDho@DH03EeM 4yx@0 qGK3j}*h1{9?ohӰjd,ploDZ?LG!xx其="dhqU+Dٵ7D4D;j Y4͢2!@P(vEC3٢sV=͸\1C %|u;󅏓mft諔铆[h"Fހl1Z\pSQ@\({kzT+toQ@G_/v̧^d8>.0C\Ą!|By:VuKCWQ&3%N3h[o]ՙp"ZLDhhajZP H.G  q%PzS^^@QSDb-'+X=M,ߖq@+rliqU;D颟5 L_Q8;__ӍB_h'yD4D>,/c μX d0GJ ΅#vN4Q ݨ봱kvh"xM;vߴw6z Gt!B98HSd4Gn ZnnKgqg6f}sth+yeeg[Qk;%@bsØ{n?8/̑\F涯[!ߗL_pp.N4̯2O ̓H3F&],Xگ_Sb9fE t!lR/8w[I&Y#'8l]kfZSwvE/b?u;LD6D#"c"ADZD=;֕wv8޲cA[Wh|Ə0G9"O4;3[Wh tl()&ȉ!5)Wkd~"u3)|Y&NvS/n#n:_jgS>DDɒDD%"'r8}qc[#@ bv}]_a/2G4 +1#?iU{='`2unly[q3$"|V&>2PHDļzJ|?)^S,jlu N]n$m{ă\S m;y} U|K_y;Y)1OuXGL"1,Z}nHSmEJ:߶ԡGقs)ue( bS.TobR'V' ob"/'/Şm[6ŽM4*~M6 &fR@hd>v+*n_hf˸~݂.~.4}>{)>u[b;~ iĄ1D4bIJL>1+ʄ;*3_@4ذ] (EE@3,D]5F5`còh,Yc &BP רQPw:}s8 }wwNl}wXc[-5\r);B3iji85AA|=€̗wlj4ܿ]© 7,uƴux>c.ܳS:3y-z32oI?Jq7LgW##FWgw´un /rN DĢ&ugv`όՀ"ђeN ?eD 'utdflHi,f2HC wyu -ʿ#0}ZEj~ܱ l&-<@Ξ¢.Ç;\2yrX< ۿ_]0~ KQ$m 5 HvfzbL^x 3%@f(Dw S4H;V;9~o@;ht|mG[W➵pr˟R5V"!f,0qӿVܾTHCeυU8yq,~ kTA[a9ZL-w2BFE(ftO*Apef0C5ec6QcnՌȼJG;o\9qTAD %!>MB7T%ʩ H*m`Z^wXT\$y]f(>i2Mf@q0 [18c xwM m~-f[)jjlw4F?pgvG >ؽСyϴ6g~:>\='bE3m Kq̾N>f EPRSm2 Re"Xw n@9ji*ǭA#R#f~׮Da2ƷgkȌ%FƔw-5d^>σe32ECJK |ϸv<~y3>?H 0vg:;:T{ɀ``ۆ p_zV~n d𻵨uc *Ῐ"{6MX6> ~V@N5˧NOe *fi yx v@ΙwO/|]/@Z.&k\@ʍTO H򵈸 N<^г?Û83Vʞ9e,ʛZl! V@Sx֞@U_ ; gdMC5|@~I&j1/ 1Gly]T!<::wkJxŖY:2  ֒ u S^s~Gk{ &Ⱦ#oKG>iu~ѰMY@!$HmRf ^uM ލAaj7>ᫌf֐2`Q{Z̿"kg#pCJ}_,W7 :+^FZ1>ͫ@`X(j(Gߤ5 ftپSݣpw|/E9_ 'cAIT-N4"7*U_N G22 sy,g*bvnrƯg1}d8'UnZV1W 3X1G ?׭ #L msoxOy"L?ݺ5c,xx,MO,/xd[('|yPJZ4L/}Wc+>P֣$_ctS m+OꡫԦZ(O'eVv+uJ Rb25 Ed:?ַ.CpO9|]2Vb_z^h&_84oµ$m^LEn_2(#O=B G+~!?D1pU$Mj NFwy}1/mk^o Hc1giv?to ]Ŝ>Q up>* 09x[j̹#zh'e/0T=AB8>Iwc(Ț+"܏DzK~ ůw2O |,7yDt ~'mȚP7M!cCtb/*<5CdoWNUXp/o4v=6Mvhܹ LH\Gu븀7؟nwV4>1Ol ˥>oQ!W~##7YH!Po.Olװ %3~ ,jĴ*%cT b8Ш֯>m+]q6xp7| h{*44|Nv ^ǣ,kߺJpѷ7Pٵ .gqZw\2'vb{/d͞F2~ ߸sPw M5íXR#ZbOao V U*a1W8XLӏ!n]ϛ~I |O,̈ĴrNwg@- aD ']c(ˎUCu>c<*_>I T6H,AI=@G@,јenZ;خOif(Pr)#ocv hfhߔȮf@6}u bЛ p:9;m;\dOgT#:ۯ04L(̊S8oqw]W}2?hn-^@o@7b xKMP8Wՠ?V/voRTBaFS3U=l:;@^>@3DWMJ\3#j$P#fEcH]H| !ShTB@H7T!f1r~7拑.@aE%.<ٻ0# \ ;, ?Ʊo'%oBTBV"o0`. { 9u LJ\ȽasDf0\9G@*IDAT;eH7^$^ QKa0? La8TqL ^̹uaF>dہ@3A2xOa_Œ(]_ TWqL ^s\>COtVi s! Es##ƨ:(0]2x~:·_ K)<Ƴէ@^ZB<_&H޸]xx&0ȷvN&)w YB?j'~?P$Ngy LJ۹ #OgqFLth7MA0(0a*F g'= z6 W޼y:hrN?r|^|HǙ &L/yq0Ş]Y (ai o]Q+'_PMgElEuUAM/ `qظ wMyԟ P`2'xܹ 'Gv?? S6L^3dZ?脏 (9&I3;F_;z`蘶? ~ $jȍR1)U] )cL^C_}>8= h8 T~2U`gw޳Awpj H4̄,0K]ﻴSܗ֬ W -ޫֺctpu,\@šJo QYP-ǡ7RmY-7p]y~1* *'0Hf6}l|@hw  ۗ0@YMvhWY6/`Aijޮ-]RO1A93*CO uɗ5@kaQ&@kPwFL!xO{5t,\PM*3.|e'd*e)*[Mx]9ԐS@i7Z(DTPm~~m.'[%,4nᨀmܴ휄仄)02,,!:6֖C: ]1uIENDB`qterm-0.7.3/src/pic/message.png000066400000000000000000000250471332762052600163630ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATxyXԴ4O+3˴4C2RFV `O[vV\J( ":( (B̀#8q_z]|\/Rr\x Fq/^ nZ/|A KpB8Y?USdE yDKE"?ͳ^ϑu=:,OVx<͝Ż\+&Zј$P0<Nև %Kly&C O+e]NPJ(< yVi,Ougq { #^ .:6F 6 sSI~Mr YfCkTɔbvf:0cY̌Ujbȼx'xr+y>ViYɿ }y:KUVS62a5ܺ’VZ2VVX3e-51̉sdNgOsgSYەyNܻю1Q9}R4hRmЖ?w~8sde(},|:k|k ^G9#ż\h.yg6Gca9㾷bz[oQP\xl;^ ]ݑKpOxXJ Z|aks٩$Ȋ`^f{me%_4#32h(#fC3͸hp._8&pZkdYTwhKEH߬'1 >>@=/A-p&,YPf /5Gr/Tf/D$,{o6nB]n2NF͸dHdLCx7OgYYy#,~o퍋?MjoV.=/_J^o˼x'Ive^&(I0z9? ~ p"hXP6^k]X!| ` vW&00+IVzUz^X>+ت`nWVrK]Y*jؕt"RAkCE!xN:HՎ̹ B`t9Y" ¼/G<+@oYx(w~o`$VJ Kv0х &OqgHNDAhKE~x& %Bxȏ5b8.xE-&?"ϫ!vN7;Jaus-=ǡf 1o,]̉sdz[nX&j7lH!^n:5UA Y&ƞ-|{GӜ?I:!A %7ղWc4(jut%k2TM \"k4DbA va5*?sY' EmDt; +Tw@+yȏؑΚ+?>uLo C{GP\Y-"A=ѶUlaCsXDjMQdFإs X < |Xߝ$F}(ڿp+nFkA^vSV+0n Cƣb/幃eՊR&)`{*KCNHYHw$!Oh,Kq|_7 `*}9 _/u9NQՊt?k-`h/bv z8)Tl)_ajERjhF`{x@ {t0pjE67 F ® D0 {[?jbZŒհ^+& v`܄;Z h?A#tWYW09 JV;Umv ۙZ8 v:og Mjgۙn.~;Sm20 vyht)v> 0t[og M'4<s=0({eO`3t {eO=w'%G =' Ҁ =' 2Y? =jm 3~;Sj#ɮ]2t0d.0e.k.>[wO6&]'{oO`^, [I]T ` vkfyt}x@zl,j\ Pȏ,x%c$6卧3cLAxg V~KZ41eE3BmFQJ㡸XCu݉I?pg8;x(}@wog @w*<H.ۓ A󃷆1BmC{dS_xؗgoZü?shcLA`E`xG Y,Opf[b<焈}<4@VV'/bzJdFĝctTw3F|MvkqU`:<K>t/k@ѿFDr lDZGd':#WԧsJPr1]xJr'F &F =\7[fV N2*pcrz*N4KO/SņEz$$|>Sx(KoZQ>(F˛%H vHwN-: g?R]pGpz9ZE<6"zx.юEq>W(Jn^rt9nW((:;$4˿!+*,PC("H<\x~dNV]C߹v,BCmNጓ;.\IĕtOg #.!E',HM hq'ad ^(`<4͋( ۬݉PPvm࿟}gC!b`LxO{um:CI6>Fݜ:;B'.ZKDCȡk-ۏ5ȣoA? 2C`.ΫP|'|w,FqI3L "7"$ct@zngpf(Ɲj_Gw-AhaW_~!/1}B1O㡭:7G^Y~kbԓ8$.5|ExVYѳQسvV](Wš@AC du?gRWN \(CGg+,r8˱9B(.*Uq^~)ydh<f q8@b|`NmC8"r!.$qd:T@\ J̺{--05fDD#Bg!y' lUwb IDAT8m{6#>?~>LҔ6߬{mpo⺼.h|?.d[ ⾻{}[24z9xl02<1EP0e.C!##&pVViP;9(AF#XAYD@-L32#ܜ{Oq>l"|=km!B$ol?K(_{p)qʨ\9)jbS@R`U}$S(lyŒ{eaz_1^ W>9ނw:&tcϗ ,];q#>)!~;#qj{0jkd]Д Eю ʑ#*iZڙ|ed3:r5F!e8ۗYaقjBy{vm=ɫ@c=;ST r䟟h3#' (_ۙM5;Ze@/k3Z~.OԶ<_,yC+"|aouƧ}:-uw25P $'w /W˻0xFP)VgjK#{d7Iނmw{YeP@ =Pf]EWd^_g'`z;-Ēab ~Y-^o̴(Bq論R1O[)%|2pM\.29!X(3q֬xJ@4P> 8'GZe5ߙ#jy8L7iBƍCe^W[CލS?#84E{W66v(ѵ{G1b_e&ʗںR}(o#)qc ճ O~ʍnnM}ؼ ƕ!n4_εDuyQb>X Q/Ajb>VT,+FEp"(h$R66%4zaŢԖ$FEI` 6͚~}?aiScža^ٜd.|7|E=s/\vܺCCQ]k˷qIPw1JR /T> 9 -h;g^o9mZ>eshWn_j'~|wRISJJ̪T-bCZzװNIBjot);يdә9[@eKXh ȷ~ 1AKndb0f a3нy`+AklZj}}o_(J2MɟIK]Lq'ֽ ueGbV\<ppgrSL)hBO,#s{GJM s̞^]s1L-ad`RS Bq1PCZĝa^TMXP\ I sBa9p@PjtF$ !`/_% }tdɜO[ϯo_ge!f@ ^/.݅_9" Dvb" ˃V ns (wWf@ iiH[6wR 7|<sr @<= o<\w/ZSQ 'h(' 铦?ݽξ}[DE 4 Z }05hOOrv) 60Aw`3S²f ϣ}>?􏋁;f=͵޿|ðg\N@ xrq۷ۃ{AdFgw C9I hϯ f ꛶3zaϞY3 @ j80~??303f瀸p*`bcc`d;Ï?@oC@.{,]&()`@w἟!Cƍ#e" @Hs9%Ke|F2|޸$LY Lحl~*z32ĭ_/ʡZ0*rsp?>Lt }`z?hc=Ѓx/қ-,y  ܁@pW5$G}aa9P vzgz'@Rw2E3Wf}]u=}<0㒐7Ξg0۰҂O`JbPc R /mxt'_Bs9A)0yy8pgswn U0nD-o_Pw/@-Ae-c\P (Lӧ<<10gR<缉*?O^CXK8' )^e7&y{vV;C;< 5 iU<V UIENDB`qterm-0.7.3/src/pic/messagebox_info.png000066400000000000000000000025651332762052600201070ustar00rootroot00000000000000PNG  IHDRĴl;gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxb?-@11 h2  ,@;Ld`bN`gǗfs1  X%` XZ!Ut,,8~d`xfr$&F#,.;kqd '+#ӗ<4# #+ûL /`aeacggo>|Š0n8`"VRTrTf o2|񇁙ȍ la ``"ħ & KRVgx?5e/ 6}&?  L KB,×עa`^.-^Q2'o3e]N6F?18LH[?ÛOA-3  _>c N/߲0<}!Yh8í'>}o?-L-0n3 ~2<Ta/ Ɯ L ?cÿ$#?(SE7緟_dgcfy? l xZϞe PVL <'o PTP/?]2?D f@ 'Wn2H ]4/(y1 vH% "԰s3|h0Ag=qWdxabϟ@bo | `;Fq0! 2B`TTxcفF33DH0h /9`&0QCDSd `#(e`ax L3|;wߏ;X6 0 $~zE(+HI0|#! ߿30zp q}f̰jf+W28wrA0@1%mcblbd=CMe%CeI . f** l,%@9Ѓ 0"hp% ll@y898x܀>afaPAKZJ &T ƒR @W0 300R^0X 9b10# P(Шhj {Gh-e >1|{uASF   hJ+Iq1|ޱ3'_a"&-- E1~A bi DX[30s00L&VVV%%%0/o`Ȫ^߷02A p[D^Fs=gGH i/sÙ:~h/_s1g1Ay>m`O @˜?s"3 _KÏwXz!<*!08G @ . \ _s$';# (ՔEb3/7 $P ;377CmSϟ?x) a'0ٱi0Aw5n.<^/1|}/O%l FL, ܼ@6ÇO_~( ?2|~ raoM h?QIfA`zC`L/CXFm@y-abd O-V$ 7P i`Rf5@C1A| &Կ Xp:?@ iU8g#%IENDB`qterm-0.7.3/src/pic/mouse.png000066400000000000000000000451171332762052600160670ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx[yX]fW9ٽ-)ӯLO&(p f:pd'L2jh(2""pD$D uZ] <9o{wX "_֡P1e*.<:"xƭכͅkg/e'(YSktҵ?9 7,v e\yu^d'YIV{J7<"Ϲf y5בY,NPl{sM/+5렾i+el! >d7YEV{UdW>[TU lsb}#XhŤƑ6!v#ӬF_їK6x vWK`febQdsJ68 ;<'^;+9δcy XpFð ͯXF6 W}+>d;yNŖ"p֙r{N:&^k'XwʁWrXڑ sY{ҁUva`_x^`d; 㠵(3&2Fhݡƀ;>1O ;t#nt&6f>3>d£ ^Lce-+lSlX`N9fpm}I2N|A6xd(LyNZptF7U 0wx\1|G1,x|4ᡓew33ʌgb,X` [~/"Նe,dVcy tA+:o~`ZmhZd+sXCL ܴrWaj] 1ܴrMFL4eas+Xl͊TVڰ<ņV<cԽ&ܐ/Fx3jVv>}=]~wwǍA^e֬zxu=K>`>Qq hOKޛTQ}X>5blyɃ<կws*}-Í'=y[" P4"ԥ!Bug gOKx9˞Wr 4ъV>81_'2@5? tGtmwdhՙ5JV#ӂe5E"飭QjD)tJw}f x$ъuxN;r=Kx9vLr='ߣ[Б}Ӛ\Bǔe;3o!?UК!*ڷ!HhǑ%C z"M8μĺS,NG.c~y[ JğУ}Fs8V{UdWsa Q PB(X zY%D2"iB[/ aWs\(N4:8<1>QtZ^vETŬr'w֞t`, PA6I ! [vf D<:a/cyNYE.Ģx L7I\v^ OY3okΫ(rўXI7O }n.BXv'i w1یj.PjMp֙E L#A\K2$'@^rzG%-?cJC |shկ {>Ӛ9-E.lJ%pZ;K}D($ :o4jQ+ohR REd0ZU-M>ѣ.*_k.VCL%ϗf-Ȱ5Z V@_)y̓:7h*78kA4eJz+$ =t4Vh՗EV1-j<˘_VGE& fwhhԐXq)Ar=3x`Tm;lP ń+DK wh*D^xT,c:7 ouE3hwE̓mQ&Vg3'ڜۧsG5B[1~@(Ri 76*Y`asjuj9<@ AJCF Qź|gVjuL{pcNc8kH#ys Ϥ@/#p*&nD_x%;>Ǎ:ީCԧ0r<'6|'֞ ;1|#"@Qgx>Ǒ?ufc3U$uevէ" ډ ެ3˞yq%T/DcTp %:V|-(& bY"0#ry9,ZorXI{2eYoco:ZӞg A::^veX`L0eW̻;!ZcW~/)sASX~X~xu/^"vP|J.hp '> LmC2LmD["V,P$A{xYKh'\XKɃu~b"hۥ`2ݎYd4[^5wҊE{OoBMݕU]m)K- C8` \$d D82 2:fA*9tr@ $AD1554ԟQ9hfa3zZZkW }y& dcȼW@u"6<'BxZ :D>YɵB"z+* aaHDnw6IU@Do! "{Y{U{& _uւGRI)9!Z*Ł,dj/q6'F xWuxnxbbwjw٫"^'gJx(ocy7 s=azLmԫ=06dW")tEM>'>@k&R*F|D!">$B> BDD2"p)k*Tx2\K7 v sQu"Ł<ɗr9u9ljO,JP( `UY0/ 5#~c~zGO|Cܽ֋Mqء jB12Φ!vȺNLJY~EqzPe ""ń{\{1d&9ExL!M&eYA Z^s#r0lT Q$- G X((\CZ]{fTЄʟNXYhKXGO Aoq= !u4>ζSJ[j鬚C3$y]<3JY!É?,87xH蓩s0҇vS ..9ŷW+Y"$ u"N8%DhoYc )pGM%.#-l(aO"얥r"ae~m&0C~ңl~1o *FB2^% hQc^?wNXX@GRXǧy]fi>ëagpL9C3 G\Gjq["Q]2$ !\O粎C|vSm-lw""sqM$)OHF-_2{Lo5k9j4 h<7^j/~ŏŁÐ;;xިK[h޹$N!oN$b>_w]IW@V뒖X@Sv2~$gʂuy.:+ r<=5 ?y;RD!bL>|k6X]o7-mҪOwvjy%| `35xW 2tDMW0$+E=`zxuox ۽vݙ/8AxD͓8!z~bd eDB/@McBx"7xv9w.%{4-g!\5#,ODVO0dku/22(`ymcEQOK_!z(Շo0cYQcJɈ( b->UCMCi5` mYҡ9Gf֭S%>`YR G,8c@#CB W^7RO,>u'{p6&cl8g [IL1}W7"_W2AĨI5+tN̊A/¹_=I#rlL7N q=g\yG/QP*([,c;.ܸĝ+pOPdRwg+z[GL|k_Zg  {Q HSc<Ϝ1峝n\dT“mD "[mc_ 9[׽=^yb&(K̆:BCfjOCЬR]kvAJ)x>/:(az GEGuCP j uL{.1˅˦;7qB|7ӣl~Qe޻S .+P)5sŨZ}Iu/⹠˲c(ˑy83 bYFv׻4Jx$XLg~}Xb7~~*XlH@ >3%F7T\۪m~mO4SVjp0>3S FE#Ո|Rcu^f;aLi91;"2u ӣi$kݖi}"鞻Pc2a^TAVvqvџMV 72-߾\ 8FᏤ {-޹fOX`/xoA ^h7bC}Oد11J!V^Y3f3<䨰.֙6!хb?_P@2S2]lK ȘNLP|ntO|$ ~{?xITYA}&jHV7m C5bUg]Z&+As~6m?tl˧4( ,U?zT X@܉W.tMC dH6M p/|hbQ$U1x5B;Vq[;z1-`_ 7e׺z A.11GBַKlTRˆrNU7G˗^hc޸I{lxT `I6٠%-gWdhcǛ_?@}Ө߬%"ѽF΂>\ *wYk6+@mg$k?`tKWq[]'^I##Yz]PV; `ʪ>0lCU`,oaE@~H_l&U"tN<>a|ߕ`oa1p't* IMz3keѰqћ^SDoL`csáWڪ5*RdP)I'\is tJ#tܛwȡ%fZ^I dU0zpxa/i?@1GyCDJ5[Zݺ>t]7Xf~X cNv5ںRkx++ث:s3!^g^Fu=`ΟRbKݕE]mZj-wQI` *6! L+& .(B,ll" y{aXJ0ܹ{=wYG WG)blȳ%$ ̈6 ^4y(e׭E!fwaI.ed8ő+@a#h|^" Pe -`W@OrgFC[}>{y_Njz#>@|L,ސGM4[//˛>e _t7Bj31ϝ!L{ FwXOy3r }@fh3!A \ gZj3+;B5Ll>IExo.݄BwG3;es c:(x&w1p.Cؾ3PoP6e|xѫăTg7ӭd |]O>M+ ~:P(WdDz2mhg3n@{\K)= <-*9umc"s'S/_EШs_I×=I$;aCm3(k85{Hf<Y-%-8(S28ImnsCdTnAqLuvɮ'CF I 5oCECG?[,`cW*R,`;yz5պt2_% %7PЧHP: 8T°ER"h3uѨ9 5{ KJWMq[/\I(6 [ EJ:'g8Pͯ')`Aw5d+TubTB(` @IgADeryծ2,v8 ϓ~ ~ d|ډ"`v<,əekW̼ 4Nj̯wmH:D)* no5!ӎ0o7Io5B)v` qL0~nD#|`s&X- Sd8G~EI#%іӽF`d1%9LpC /H7,JDkκ[[X`z!Fox(9O N=B9w"#QMKh359 |<տt!7-Q g MNAAE,݋Ǎ>Qm5fx4>9K(;k'^B7P,B8`v<d*toX '"E3],xb x YjWZ  ƅJH^ʉ۫Ixr"Ẻ5HsPghi&`c=Vwoʛ`ey.$:ADP0KTNPj9Bug2n\cj6n Ѱ>цiyq&x (`ыͰ( L0=waZ_ ,FVܣ[u+O:jy#= PU*<"c@A *Q=ғ`q2 3z,wSHx'(tɼe ֙D:ӻu3Rô#~P1sa=5qҩd1>/捓|'ݘ:q9|epa.+SqvI6wocɂN3LVdz "foC+`PjQnĺk7'"oth6جC5q7eCΊ^%_< B瓼zu2/KWQ_Tn<=[ϡ  SDLIr#y;CdOԀPfMR)G5oڝu˦> |Wj>DW~oRu3I@5o03 nP+!YhABq &ܒ9/{?BI:]>J*A@VC;e@0#݀ҩ_A(]75K/1 n}}`M$UZ'e^iyj~0?pE5;8st[hnkI[_?=ٿ"t <5.2JIcH =ԁWphܮ⺃ x&3Ty:^x# $]h!0c=HLe/`P0i.c&GF/F/f.`R(4SBȅ2y4g. Hc0#odr\jt8F1']>1Ơr@܀9(^~c@"M%蜝VNVP.&D2s;T238G.jsv_ȵiĀj8Lf$U氟Z&2BKЛvp ߔSTÚh Ϡ+ Dm~$;ѭeeer^IhYsV﵋ 5CM8GaN .[mS}w=+^ {b#0 wi0~{S{@PU%c? -|5 P(V8=-v jfGO$uYX鶂&E f*f ΧI asYoZ0a/h{q5C\V_3]ܝ|S"`ϕJZA40ȏ7ew4 f'Mz\dN en{Ȗ %ZBQ>*aR 4 Ly5_VXfZхYE$ChCp d jDZ8p77s!ª'P$2?.G`!_:C<ȷ[1>Wn FЭ8tqJyad @Iy m$|gUN0Ohr٩DPq"׸QuJieRlYhǦ 8@D-N4ÒV]5ΦbrRMei/.X=BtT .e}\y#xAp@m:j|S2z܁OŠBo"j3q!sN*ٔgBҽ\[}Fr'Z>V[_8f7œx)lND~jeRw(K=;$0;yCq{-~x*=WyaN,E*Ŧ*Y{pَN L #L;bIbn=r2SA &P e_V۩ {sUFl># !&GĽxr. }pzM9D7a*.ex `,*lv _xx YapKnm<1O#19PóaIc,oȑ>ȷkUm\ -?s$ w%:^+:c>s&ݱN罰Eyʴ  Oo!Ĺ686)&Ώb=>oƽu3ps:~LM6Xr?(gƞbui"+;qw`$\\ \fQ?cHܫDٱ6xFc=>)r%5^?sF|[%rknVrqU-ԟ9x 6*u|?S@uܺv:gatngaz؀ cAm(ax\Mծ &< 2WGd*n{\ +>o)V5޺`Ռ9$Sab>pܿY w-!0 C2gFngk|=l蛛AQP\20 tczPn7 ~l9:R~q*~b7Dw}q6RSFXdi ~>imsV+tr4oF7FGF'+F7=Fa3m<'.O@yp}&R̆ z!{rXO_X1KҔ?iK0(T k!3@v-yS,_3%Ib<|wBC ΃(n6]%xoЯccv~W:*!&xIm_# hN LsȔ1DG2 "qnӸ=csFweʬjEV1ɡ+ ֯m9(A 2L2N@Phq1jQc41666VĘxz[ӻ6wA%M}c?9ZkqmQ-ѤagϺsy{_| /7fM8&<F^ xuȤ=ad#dWdh߸u3gzIȎW;|Nןx]S}#d66T݅y.3,maܹr).r2hxM44ț:t>oh+x]<@Bx-9?f;1Ɂ4=_P 3e7?6>a|ĮZZk?`w~ w4p { w;?)UajxdOȄ r ^# !@i;<4ӲFp͜ -s]NGĝȅdaȥg'è\R(ji)6OOӥ΍y6Z ҈w\ՕcRRSth*}p(XQkm8mYJ/Tr-fڝϞu/3ވahM#x< cnq!1H 0`? ]wG0<'; Xp[OU^NyD쇳ɢ#9;шP7Y^l [F{օS(z}k GM{|SR~ ϋyrDl4 /IvgMqGhǚ6. esha=3/R/ =5dP:?C>{2Lfdf|wTW 3HpO %8G f`-4j`tP_oBuB詩hd`ȗLp`C$s#s'}waaL +*p9lvYDP0ڻ>nb>lN&\`)(gAa IDAT3Ci]e-kR_sǺ6.K͝:ES-&0x,Vvt5at-!a5!i-(od́:„qq6B̲W2-+N/`-!þMʛܞysw"x%x nL"p<{ ams .7Ņ۝YY_gҳmeZL nIH{ gz|=!È`hfwG*^\o9 `AStrPɧ'"dFRE넂 rC+H 2K%<E*֣R.W)w`76( >H Ν.;}įdZ LӬ)) |(75C.3T|.A5Q~QoP+U➰RrRk#]r^}=n%g/"r #V;Zؘ,z.z \ se .^2|xu| [{AE+J]jbشu+^26mbGeC&yC46V=<+2QxOl1N\{ 4Zwu1qCSO[uy=] A)d_-Pl}$CHX[ 1r`aB]-BPY;L\Fl ߌ'pUraii Y0[f,h&2E MG1fRBhw?v+jP RɨZ?m^% W`'uyDDWpw =i 8vy]|'p¬.IyRz3VNVb !!Yf2N.: B)s)Is_pw{.FH^NJW'].Dk>8ޗ]!yM!]a'zpx<o`u6PYxWKw0>߮z\}z}L#jbD1vwy9d4z~N0Jʋ]65,<fdX ,FdPTuB!UTaBW}k'+h^ABꃕr̦tL|vwy0jX!t&!wlsl)/p!2t+}#q>1zfk@j Ng`ѵM-u6.7Pv-4b4 S[X6ڌzVOHf8dT8>WYiEܛ9ˣr+e-aya{I\TUP8 `}lm}`q?]C8rg֡z }ۤb-pOХjncKвTp&>wHȎnne_0U*ڀaBexR< r q0lfXv_MbMQ-pp` 8AgTV;f s}Z5ƞ!S-͗Xp+d)6c֏L x';5S!F-׋Ej\_-6 ܤOXhm-se@pڰ% M$p&UM.uڃݽ-2/P}vp]9_ ѭ`y]u4 #<4 h'^Ghp_UgZ mV%-Y 4nzGIENDB`qterm-0.7.3/src/pic/paste.png000066400000000000000000000207571332762052600160560ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATxyXUows)3w5)1EPYg,S5w,\P-=Drq?ΙwD?.<9$՛\~şԔ~)8CSqjNhj<:0]SatuOS(+U嘕p953%nJ`;G}n'֑>7hkïzi߈ {{>W䅽'^>nSs=&o xu@ O#OkDyΚйu3%›3\eBRP c:"+?CrY<Ňs&9pI " KY)A nj{dVy=> 70Z3)Ӻ;#5(>C̊ \̇'46TPVʼxOcFJQ13%)k;Z dJ7yr8{.P@PLA\_ௐ(fE$ ܇N:፤ôn1qcJk7*ɛыxdP/&7Ա><O!\`~߉&ӯKu>I'ȳ@.[L~8 H Z-K\};pX7nucV˅.wc2W&,s喥RK6K/qabnZMڸЅpC383-W@2W.GhJVn r.{?~.xx︊7xp]WrhG.vhG.ȅ3͑12fl_)mÔB?E9p^F9pNLr5ўby?׻&o^;qx{z}j@][A9 '3p;93|ѭ-K]˶(jHK&Ճ",] =їu喥\U;a2 z*cU^t[A[#}x#)WyǙ5n`{}`P+]bplx_4Q?ק~ʻ~zWԀnuwץnro:I==ѹnbק65zG^ Vy;qF=8xO ѫы1+Ar2y9YҕtⷑX#c }ش̔xo{o.pp]WnY%юnYhaJJʭ_N#H0e mfZR&</0+=|'~35W_3DPA[I}}9hd{V{Y8y4\?G`8!I 2Pզ \`/K\8ڑ*ۅ M r{R_O YI:?kW_gΚn5Vv k`$3S7Kr}fiH]+=;'~=5>'#]t< VgY|rRo3͑#ktAN @ O8 ^OjBm>qHǷ^ ׻]ĕ;2udGvCbCuWC7?<"ɕ;VsbO?X7D1-Dn5P_zRuHՖ%eԆO=5;}\mt!m"D2gr\YHa捤ދc9k}\k>9ZHi=@ _6R URRs&*]@{?pI@Zt.֖W#u !(] Ol ONcRycݸ(ڑZP(ä@+-\u%̨=Gec+H8;7zqOwb1Ud?n]v1h(d?`7W\ODry.wy#)9jZi1 Frl0%J!kuLM0>ܿ >kJپʃÃfS 1X0׌2Fiϙ䠛B!YgM *o!2tYB";rnw瑍^;C jHDSd>-dxC<-!&OuԑtM*0@d!%vپ5J (;cz]p%ݽkcg8zM JE1 c,IܸЅˣ~#LZ"qtnHˋF.SH鉾ouPn}>VzXL;r璯tpreLa}$D"-AP8D<bјZ;? Ԕ _ (m7K'J vF;in߶;+tG[V ֥,dIOŽ~gXhxo]DJ *}黯I X,HKk &g#0<8ջ@tD.ܷ*5G+}AM`mUp< b7 T4LJla-ց3oondڋ@f {nt(A_t [,O%鉾OŻHd|FHs &X-RhH H9c$a?(T8Zm]H˵(F@*ϒwLԖk.㠿 s8w9Ŭ&JkC!V3Du ko!*1c SLt0+v@M.Td.1ЯpLD[ "˱?D.!1xf2STY60 NG9 >kE,Ja2!Y|v Qi,WZX8+'c  l?Uq}g0QtI// A5Dbzu6Pq:LJ:Ryj\Œۋ<ݣ;DGBTG;K*Q%WMZ(B lS䀆U'l5 "ukZ%W[Y9:r2Je'>+9eW fѬYL/!ZAtQS^=Oڻ|ծ%, I7("a(ϪӃ4xk0H#l-#4IB"S! - ڬ6uGowke\f MԂKO5W倮A7NC&?V2!xUR5|0y %&7^PbBzrVFId W K`tƛ+D+5ڞi@Ţ4h(H~pټWjl<yW<| $-]s:aZKX 4.DžfԄק>]lI몴o^JX`3b0DD|>h[W `n~!]l^B\G^ͬUv##Z02WT֧ W}*,UzF0   U}P 3ԭYfE?H`lx݅[r|DKԜ#Cr`[jקM*, 0Uyt_gSv kPhu UԐΞQ9 ֊a9_j7G.˕):k0@oN +Uqs8EPv_ܨ6'~ۑ?3-gDp {vjb`Erhяnyz.;-!:y_ۯg\gNxv7JXzn<܅Vq|'.vÁ V.\cxiC޷ G:{/W 7T˔.qoSݓ~ʭ]O8!XצBVQ!>y)KK@=fS.uRN~Id+;y$`0󘊗x/ZY!lPl qo4D#\5%L~yv()s  X}–OqNx'Zp?%F*_&}iWmqۻ󨦮<㿩ӢlD 1*.D[m,4˸VQEKE=Ӻ!"#Lq#/{E=wcP]X`G(Zu.VEh\ ~[( ҅?,e dS}%L P)9@|V0P?;3r4|n=`!{pP"<.{(Oy .N⦆x G}nTIN0IW m^%j @}:JR b@405` @H* .(7@, Z_\( n) B|_Pa1ߒ7J:53spP%ay-1^sPۋonTJYnyzglx<(7Q'#z zz < _i4@XiPXp-#Cv%>rڂ#,4A6=0pa--f Nhqp*@m(nT$n hߞ} Wt}Te *>]ah2cBGu16)d @| 1#m 8P.ΤprS(%l&48{^.ڥ:$`k, c t .W'je} C 6nd(-< Lo @hʀl 8P&JcPuY(@ddb@!vAq=+m2~<8T:zU $RT1: @af8BeWHozZ*L@ UL' 䀐a"=٫'7Ttq0 =$GNGLYzg;#Q RV3|PѼ:zwt 2;d0}J(S]pcO|K@ܒ^ZKPn/?/Di2Ѷgege-OKOKn||CDq0QIwG{x-jWrڂ#)8]y@?C $FeB|sy(+wbںnMC/nF17" `ghxq˳ap i*zdaZV|偶Vx@kM0N|9r%SQm(F;W*_+b `h\7J]m B%ySQ]5ފF܋ALc̑d*&: ?FYYHZdZV.BYTלX*plc6-G6%-l.@\DOJ z$j5UWS<ɊD9 g. ?Qb s/Pr:J 6h: XL>$\<,%4ݖdEǔZ]9NULU/wbfBB gѺx/t`s t8]ɞJP lzK /#ѫ1Lxt(%N BS;\ps?PmKP]v0rhb `ľhfD?qD?4(>6-ARP+LQF*CJfWD嶮G|49 ovu†j)LVsSj<7+2 |jjqꭉ@k(vkZju*}/V*q7J\hboBG١Q<CH⤮hmJ\6/QL-mIU+er+|QJV))!uVcu1|z#_w+nBФ`G$挾 EqRW{jhK4Pt@rX~LlyZu21aȴ FkM{3e´sY f]66de%x&ƛln̳1I1`k$]T'^T'n[wס=ҜHsccPߞLܿ!{tqeiM3 26lg=Çbm>YY=\-{-`eѥҸҸ֤cse7&7676/6/6?Ϯ ߮ ߮0߮0t]QXDXDhѼ؟7Ǐ?3ag':p."`b C/Lq8%Q7f?nC}jyŸ.><|5^A@?oƀ_p6Sy;֢c,Y@>c)6- wfmgcBXMs<b|6I'thkiJL%Om1  d-BMSL{s-|L{zC>"1KkrO {o?. eȕa4g P=DiO`ސAy1͐' (n-b(B 0 '6Y3dB ٱǐ6%>a #M}rj JD'?ԉq:~f` ѝt][ CZXM W?vDŽ&aC=)fB<k^ {-zŁw m-e 3OޕIDAT^| ߵ VSԾ@Ƹ?Om5?.{Ի<>-Df  @LſhБ3ԑ30,} OeP_@d}Oo~>P~o R=k1 ´ +! nGHƵ1~O2 zT8~Qt gn`xP>FQcvic΀07vvlE;[Gki?^G܃hnBhu?劊IENDB`qterm-0.7.3/src/pic/popwidget.png000066400000000000000000000110311332762052600167250ustar00rootroot00000000000000PNG  IHDRx8* pHYs  ~IDATxSy]=Y\QQ`A@DtZX2G8^b7 w-sQ '~_ %j)@ T٤r{gQ,yÿ?)eԎ@8gѸ= 0X%v[-!!=7P4gJI"j,dWH{z@Њ֞;wG,| V>|}.E,B8ȥh((2ęUb]yMZa-]^s7Z+YX_h0ս~hoS $r<&ل,u>ocBK+hQ'(/TKYU߮/̿~y+|^ YïrV^?b^VuAaS|}ye)i4evUnMW))55׼C`ȡhEps(L(>BdYpC!btaqXuaqX9 |b q{ /̿*lBF$[/eB\6!hR`g !Ep`B=?,D!oS|漙K7N'7_-}Es>D`WviےÀ )Ll;O[XV2`>U\)m$~|[Sa2\`nxO,a hEaMQ6ҍBdc5m\902;:ژp0J:so|l/wpMH(d%L8M)p "&xƻ|Ŏ'=2[ X[&pM"_rw ~I@02[q v _6dh^L1`Ɔ=x(6Su1I|wJa4՜o >|t5:$ #xMlv|&CmnD2J13(DzեLꬪ*zZKDŽX6!h3!6Q4)0J+V~hf mTaRYu JYI"5X|Bk:]PC]jLѲ!;^BV2`VA sM\-y \a9 ؔPﴞS Nt]X>K̀m\KdKdu H1\z EJMIA$ &=Y3>K(D!h"!E|hVXU6j{zaLZUBdYY^._ҚTũS7ցAxcD;)pY9U"\SzL%`7 %,#6t?yW%dU.2`;9MH#WW|D e<B..8Bx[WG~;a4ccbiQ"IREP47JPbU)F!j$< Q;qu^aPIRDzWx_m޳%w,5FvU'uwmi<9Z~TՂ![e9\v+E.;<ƀmQ3`뷹! lʩ :OK) 2l& %9|09 ?sK+VIZ9$# =UB9bE%F!Uh2V~ Ƚ SEi*L׌ˎI[Q5jչ8y?oMd:΀MϢh2Xŀz#bb MK#Io} ؼK|d^̀ˢ VI&?XBV#v୊Xn";dhC_M7 Sc5 Tս&rM2~PʄcMcC!z8IIsMR$.WE!|UDY.a#vyi֗LEd:/lOl.6+wZ% "l.pYTAbpb&Mfy~,~itUwɎ$;]e:&ĨZK]nۙrԵ T"&LdMMpHP)tTgAcMkg1 My(DK* 0\LE!^)+A!xg$+2ֲJXIdNں._jj6]%_":+j~nRڌNn./0;=ͪZE [t*cQ|\A5UBGoS5e䩅lfhmric{UQFWa^3xSQ0)59FQJ!Ki,h;}olb/t4ܶnNѤmt;=MM&V<Ōk/+WdRk U\[h2M=MMwZ]nkxn6:]nEȶj/<@GWdRp׳.M/-k+ oxΆK F#^V(VIJ RmSZOt 5b?wZ5%ήƛ?t [fMό߹;:5=6so|jz hpwcjzlq̽ᮑ+=C]Wz&&\;ݩ+Sc3>|fo|oxFF:߭2y 9;孰J[[;WcgoN-?>X[_z [6޻~p::?ya?.rXdma pHYs  ~ IDATxi|UՇ@@XEPe ^,09 $! !$(* djDehe-Nh^l!FZksop~s8gkAD#wtھ x[Gھ/: ׉_TgPg~5S|~by?Jj"PW A@-aO W0`}J'p)l 44`%Nu0D&,/ HVu2%|xJuJ%"]m?- tZ͌Toƿ>ǟK~fwy@`0\oT_}p|Ӓ&y%Hb!!l'-ڍF`` . r2b  WedKEf~(|SHд 8x`эiEBb'ga](Wi#rK~v+~f/.b_PuT vn4oxB+´"!]b궞,<1WQ.#Hح4$*4f3T @BV#yzXH;2倁OB-d3kcM-|Wx[&V#6}{(f L H3x(@m}CL;>R i{ÄC5 /j'俄zH]-{P0 kn5$ m]FHAq|`%zKd["׺>v>9aإ{h8 ԭ@BVd+'H=T =ԭ]HHAs]U#t?+i0M F!8 Xmod϶CXT `-LݼNn(/[o쒟GUɷ+J0"G*~pvjK"wr+cj𲐰KyC _ۨ*XJ>$/e["?2[,,@@~^:MĽǾ B+6*`=%|d_k-:d~/#KnxK:H.d~̪8mאGg1 x=B9W{k"֯d9.<0;1=%o!DoZԩ:LݲBpjfFܨB!E/^!_Օ;I!TZQ*K2%? xu\bV ~:9_" Qm/Jx>!jJJ[ZQ *a!<(œxJ~:a|waCkzH@'-iEn/xUت\#rr/6aN+ X~Z8 óNwo!MZ 8j0ܣ*f `}x޼5Ÿ&<$ # +  ?a`xV±Up>_1 ) C9U,H~aBs5u/avuPuQ$e4Oj&nftah ۟V1 gu}|+lk q+@' T =Z+;Rp) *a}Tð}nNSRԷ.Qs׹a&wo\@ȤA,fWw+~?8[X Cv}w( óT-ާ?H=B@ yfqqYg Vv~lh6Ӗ \I2iA: +Gh{̝Uꃟ&?#]zV7key]{i|yrW%tPɃ3m`҄#ۂaT H㊎8ez0h0"[HTQ6Ze^VTV!e̱|VΧg{2#rjH@eBӶ  &H1Ӂl~ :z^_) )7 MF<<1$`81w/>D@ުm`̝]i#heZ};ЂTZ83+qYa?\1)hM*zĽxrX%_%ӨPhDD:4kn4 0 7zE|NڈO뺽 L~#瘠N1;6eF3O4J4AN5Va%s[m%AEN"l \xfXRhd`8}; zhc"3 ߏzי4.&P`\aTt j`CPaM;n&s_Gk#6b6-vf4( oa|r7hGE$RיMjWkiGh"PĽ6xTufF`~Č6#Qnq r!˺*Bݴ*B[U{ .e ]PAz 46<{Dk0]1~rpyB`CCۈpd^b"m vUԾ7k8hV.-lc/^ /ak kzCPt*xm#~juaD5ޢA+(`>& &6݆sW!=:i!b7atuc?j=nq84ӎFp7m 4<#lgьjTSn\,LzL}>j[ Z^N l b&ac'H{quHO[:-?HO7a: !:iZ560]ior*,2.iގnrgԞ[U˩AQj '%41"<iV[˾1Oݒ]ew/^fW/26 EWz$.oD袕UZQhALAm'f6s iI^*Vը{:C|JV=VKt-G=]ːز"5 A g$B?yp|jX|[oXVC8tu4*O)|J?0#0<[))M\^* &ĘPv.Ms=シs@αG^=V& ћSIε 8ѭóYͧ[i=xs* n*Kp>qNg 8;-߿eʟ<_RqY#.~s $Nk kUF z ˅+ iҲQ2ky:q} Z=0=ހg\t-z@[tխƒ)sF Zעk}A3NtgSi?,[R&|悵s"_!V;ݺJpoFS5GkaN eJdCiI}GĤ~.EWoI]@睔SDnc-SWCw!4J#5,1pCM.ղ=j bҾ k]dн{kr bgX=-/_5Ve?qu{|-l8V8:GeAB1!s!SaZ^>6TxL Sdp,4xvvJ^/7o޴}6U VYx~k܌ƋjK7%`2?^INq)_Tb!3 UK*][{ZyäMK>z>QyhwYpU.dGŒ7ܾ?aWYhUVU<kk^NNq!9< w&Uf-+q/ͺfRjوl~f?_闰P:0- i6ߢ-#hػt=}§5D\UrW_}_5s?.?ʝ*akt;m|S={˞ŔctM}A.d3D=7$#8ޕFEue믣11NIGqVThD( PT 3* D *ڦۡ6jF#q$Fv1v!zo*n\&+ )8s{Ʒ/? V]I𿬼Z}n"_Mş ?F ^X6N9?4Q>s2M|+?/~6N!{?Xi /'f W0< >P5hJ,A}Udk7UBE 88i(|3n 3Ư8KVka=|{E|ܟР-ꏣO|0xX `<PM N|@.K"73M7,5\Ky%wj`_Pmi D]6- _Y?3X@fEP)r7 \u21}BDV~N{^+(QQpNI7s5+q)Fɒ2T? TO?'|Eb3J!ɑOa& VX`0ĕ^ n2 ⤇|w8/8 e( Fbݕ Hր[C&&qs$,.#7~\}h WiEY4cE U`5j(YbplIu OGHpwE;{k&WPr#QQ.r} 5L5c\[-W96}!p pO")L1 )dWcRxQ`?Ϣ8}gS~͙JFQޙG!ztRp /NyXGyټN# Sp @Żj??>ު3bfև`f XCRLQ7_w: "yeʕMrWf6 I:cgyPa;47ʟJy).4;Ʌ)%։}}#p,ƋE[𞂜2f (X_`ggU, MXj)KTRW$2e(# 9~']8,UA#7(/2)8J=8QN=4Ǔ^EsiQhZM9=ieq .*ˉv9cѝeǑ5_WiLKEY8I#7/;z>Vny6y^ջKL|<}h\Y4Oa0ұ"~WHUhu?eς;93&Pq+o?&o?e} kq cҿI;6| /]x%~ /xn3F\ ʯ*mL\ L t7*Hw3] xӒ"_Z06U]&ё-S㝑w=tzW}5\#kmnjؒ5;\*G/CIs.lmb$ogC01! 6B{oWTosZYy`R9&<椺Q~gSi-)CkW'PP:VAХ8|8>;Kj}-sͦF(Wm*8Y .h="J0RpUII/:(ĮƎʻ\ޕEVLC\(o+eSLOZ\9mLމKzq2N&Շ tH]C'G{BiahI¸ofH`}tN>PvY0<aUO|L"%4lZĨ>r$ĕMI7r 4;ٕ29[(vv"KW9c;i=՝ӵc:[$ g6l rGopp ;籃ѷD `  !p֤!SGW7u.S;R5{|P@Q(=~FQQz=tn6нsIt|;LwCcI`jm@L)!&v np(+prF̳=>a#n=3oᜅ||bi)+љ 3ܩ"4m#Ѕljt#?ĸȘ@NhskK@ur)%Y,E՟#lNƶ) rV2rR4xlVok?R;47Z?^_1>N͓ t|2}w$:|$"~xz<m[7Ɗpt,tqI&APHItjatqHixD#bI6 ^ݻlJw[oTDߚBgkcG:q214 ^X ߬A"xe+fC檤}Fa a*p]/<[=S|+od:+'R)}sՁ? 9/ fd>[P>!+?q빙?Jֱ ʆu+X0m~BK.Ձ? cnIiP\WL8[S:SF 镺vkt(?I`@!D$4Ԧ4?ÓkaW 9\^ˏW5IDATcox#%I0v47C`^ ރ֥|2cbކ/gv}=D$+uIHtǦ4RӤS* p{pC*<[v47p#I Tcb);9ҰB6LRf_W]3!Z1oڊ$ݨ͍HH.@rRqDGIe~ }[n+sy&'a}Z& uqH.ߜgi" XjMSZ͍$} X~96*}vaL@VEWuA/yi)PWn2Z)&h@sc>"WTwXJ<]R\%6f1AS1IoDZ--t>lrX ڝ:ܐ@ u@˘0r[Bq 6a&h7@s#6 "UB30_ qtmruJ3kpI fYț4Çv47^3qO<8.<6rCu+.*AFhڙ:xL ^'}B.Y ڬ:p-@-8탅w~M %pmZhn 2ʃ ͢mNhn$g5647V @=-{7@647V+ַ؈ ^hnV&Ak[ь \/ځAu \" ? 4+ iKvQ$ĩփa,?+N~8Ccr-wIk v$ĩVX Y燉FwEc\Dz@8TDDN|cQM'mVby^~WI;Zl\ 7m?KV>IENDB`qterm-0.7.3/src/pic/qterm.png000066400000000000000000000526751332762052600160760ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx}p}ǿ涣,cKiQuڤ&k$k.ڮI.˥e ~g٘p6`,Xؖ-#ɖ%K,YeYe#d[!^C!4dl@w~^IAts/A s 1˾vawȹwtw9]&˲m]鷿3ur?S_ l+#k0L15.bP(S#LN4c|b C]~{Xkmik{_ `jԕ] AH"dFP1GICB w4mM{Lf͛]_OF%'a!ET+A04ƕLÙgje&}LL 3~X`+3 WP -AZU?A8cp/O]&|LN4y<0"0>}.zXmz͵gNF{(@;0o>!ƙFzq/czxߍw! p>#F { FrX .zVlvZ](,{nD* *k\3~X @X:tX:Z±t:a wVw34C@6ZW*QYY]{} j(ĥaFzXtEGILA 1& j f04X,V= xv34 K1SIf+J/>n<6N3V4zJ>صq㚿B<,L!x_ҤQ -: sZUѤ^U*jjOQPa INވDl&a-deIۃLCQ./!NULzU5sZUahf7`wp{ 8v38͠A}=. 6{U5^}/E=S:嵷 lbh1Q5AyFqa 䒝 ғOXڵDE-#*z&Mjގȿ&T^M')"6bh{oXERr)dfn!'w\**TUF%m=65&k݀a׉A]#M͵9ZғK!ozk' PqC\ddEYFWO]}'RV^ ;زUBBbW Z1q8&oEkOb҈^IZvm%?/r㇨VVР:FSM92'ػXKZYYҪ !iwi[>{E**e`_v&)_ʨegZ [[HЅ sҬjgN'Kzx.K>^+JGyC>Q~Z2«E~^.C|/%Ynaveؙ6#"ɈH#1l_TN,JKe Q NM[%q;o^/lXm̙2 XY xbs$ll䉄ff'y1wJ >:VJ62NWبDքɬjp iz ҏ~{BBa83? jV8ގ^c%j%> @ x_MOף5 Su,L3DZ;IMd#,F-bm[/XZ*MJ&saQM&qCJQMi7M$W6lq7nɴMAQa8b$&h(&GFt# DFͯFTaZm}s\Mh٫e\J)0b0lf]^6 1mC kOс?vbIG6B ܗ\Gh9N,|d?,ky*/} <0 sQʁΆDVq6l=%X,۔FCS--n{uu45RɮZ J YA-"k nI"WWJِ%oR$RY+(fm&cV5ͮyul> H"?nd{ݎj\.;Mͻ.:v4a4p-xWWs"*/  Dɓ^,e䒾4H!Ռl#lny+'ՙ /BvK1,NAx, فDVq猼?`،f*y`"8p5b*Wuy9,LjƉ3" 5L]ˏ?gS<XTE$$DL,$j^w[9)r᳭V]w{Egax$ƊDTqߤdh,n©69qSZwY2ez9{yBD?[\hstwp(:[6~ s1- -GgaLv`9Bz3,Ǚ[t&bλJ"dkRUUJn .W -{Tfj3[%[ٰaioK"ܧ$~j?e۫$Z ed,#9y6/!![1󊾃MGt+|ZqJZ +9{kzHͪ7Pm-A:Nr٩ݎٲMisx駒D"ﵖXY̚u٤,L-M$-@*y!M!H÷:x>F&tf|-$Y*df)◝6K㰪.PGkk=kuи{•>'ټ<ŵ"2ZDyΫm]}92STRtg$jHYkiMV]ׁ 6]I@AQ;`Pt5nD4[Xm W]-)ZtqM &ci*w}DyA\;.&ԩ ?wORx&P|X3!04'q;ͰLB$_ͯeY3{k<;,7P|#M\2,B 7F_+.PDROh9)F#F&ԽE]kajevZ22Sر׊H_.pka?]G7% \NPl"-!cWtK `n L3T{#J{*?B!'*ef,;q)naeM@vk9[6 qiOHWC}.௖KpTw""g_㑠\tN2t?!zTA!a; :5nfxE<. LCw9T2< +" rd .D&daIס}tpCA7Om&Jjshx3DdMpw_p&r VOAd/2@`c% լOH`.a7~uMwO;= [5 k-Xԏhxyԋe","0]S6lmT>TҿTB=3g'!2nfZ%MƘ?n "+^O6E"dj.;ٵ#=v}ģv;J/e}IDB"2Bo @Ngo9©+3QYYm'yhAѕ|+)AOrτtծmxQYΠ>hiȻ5rhGHO;]x!ps҈х1m'E$\DjOe3}-"r}o7ݯjŤ$d*-'dK/Se?ID{QF>L|+]L# 0S(38v q3,€oZ%ȴx=+9ϡíx7`a8}Rf%ƠapG.*#ko>ùYa' Akxlco9Vę H0TZ< z(N]Mwd|Gk !~a4%M=ǻ=I>ހDi&rr34 z\+]Ӝ:Cס}8m-60?LcDЭ(woD1C5y3E{FsU/ZzqO qox E~@d9)A"]=G;8 h]{7b`0lau'1jԋ"+"՞E䧢+a@~w{>q-86*M%bR܇wQQ_YLӓPDcbd2'ct' mb'hb(h\XJ]e¾+""VED%*Q) bEGBOWwcH6D6:OKj Ƈk4]*;VCuAx94Qss%4]Ӝ1qBئP3ƿ_ C^4>C$kNT8FJݷ ۆ*ssAjo IDATX ηjVճM$|p,kt#C6@k`ܸYBˆ-B!bO|R2q6d8)AHehh BKK/8ͅA\3,2:S4ʹ=vfL/}4~a B"ڮUSmW]X}D¯AmmVlt\J\mi+"L}wG1+'}+V@˩oږlu> ?}vR#ZT򋑙uN ie'T3, P: ha&1@>Τc f P({S*\}6|a կ"aP+;E+ӀrB2d)]i= b*ʁJDž^(r4ˠX6ˋ { lhz/]]P| WMpٰ22B,|ZB;B}Gy `c )CrJ t,|@̒pFI-ؑt{BU0&8 '/82[;}hęOX%BϜ0^i՜~?0O2h9e[:L\P!xnI+Zx(nF rsC8±z`lB>f!"O[=G?5+A䡼)8Q2H2%fTZ;'xa*',B4R̖G(Ujs5c(, dh9Cͮ #Cx:"A`'$=bfEeͣM:vp`TP!D i92x%zƦk^'@aQ6#nb -LMX)RW|&<%O. hFy_̂q0GˑU:?tW @MM L\껣(lHv;CG9L&{, MDzI@^ ž#b` mhkoԔ/Qѧ`p.˗/;Mq`"#BH07㐁^$.tvGc5\N;~"b-g X)K14,TU Qm`2@XTH9tat켏Ʀ 9HH[{@L̞#tKe\}*`{@TSMڷ.Xbb7_2yEP5a/CqiPYo ud*/(%9xdo4,K1\^He]EtĻ@fzx2-aSX/Lp:EHLko im/aSM !UjZ<<"\ff8+S8&Enqd+vRm-]]O%b'?şrsP5QJ/Cr ONđq&Oy鈈 ap8l^*rb3a-BܻscϤ큌:(*ErJ,@Br+܅p̰ +v #f1粠 Y<Ttk? 1/F'ŀr/@d: \4p>{ 藇Iplp8l;фcL(hDP__>4܍^<@߁_)? QR367/B7Bo/3*|%\+ XC)PѣWr 껂dOv A9 f Fp*dhk@X48aC[[3I$|B&,$w uaxTt13ܸ!ĕ|KKZxv:z!) _n/w_omuAf XLzF vt(AE ˦@LR@v#Kl1>.@ 9x``yl1G$Tց'TjPVQ ) 7 `*ָcC ~p8tSB 3 HzZ18DL<@SS~ b K$G|]ic.X,c82Y؋hd& RXa_Y,EЧVip7:v`}f tc/Ua .+F xA@<P AALSAvafsC"C QXwޙҰLAH"Hۣi1:%yq[3n* d ' [-74\rze2\P8&bf3Pd<;OBeC< ;+ aR9gRtuQYXJ&G7_ _Li{W[Ҋ4ݮCO4HOO'Pdp,ZŽ|;Ow9 '3 KΘ`:gMo )о8_U^mTn?X/::T +gR ᰡQ&h”RnׄwKĐwPmbzy|k bt8jl{ :V9nu Tv`mEc#WƦ5fHz͹&n(.CjZ"X40K2||-+U3j ssEZHT8Pw H2s0 ,@ fgS&b\V˙ 8\6qք]-\0"tןufܾ~!DEe!2AbbEU`@˅'_=~: *Pr K+-M:cVZ5= +d'6?ڹ?L>{._}gF&A;AT4@}ÏY;Gm-}v?B(ˀC`( 8N2~KF++ X*zXl-Ӕ(ޕE}ט I ӦmMm2TILއؖ!@OOZ.Ƌ SU0}端p(FSػwV0sIh"n|rw|:04҃ftt03RR3#p2UVaQո?,="~y~\Ox' ӗoŴaxfY̟L3%. >ラo>5:IW_)DF)ٻͬg~# |d7Eg瞰!@"w{@>X?>e,04ˠCS5w6m|$Pydx)Τ̐,%' cx/ +scfe<4Yk: d3$-0B0B ~`xk[s5 f8rfLK ?ČuL!)!ؔ}0d<Z̍!(13(ϯ;k88Z~xЪ1nv<L Z]Fjj2EmFpH7SLnEw$nS *Kgut1bt#a']r*p0hVG<' \ J*mùr8E9QM"jjРP0 %d%L&au|ad By2HʔFm PIR2A2eDD'q!(!A(UA(VIT 'QamP.h=@˷ᵠ waΐ% !a\hcv:M?Cܮ ۭDSշ:02ҋF04AI,2EX-1TuJY^%|2)3c%~/1J}_'um& +|GӃL%~+b$Wھĝa# QUBvy$&#L (^T6gAkv\$аuѯdDFJ @,ܹo_!̟h9<:kE=V@G'kGNb,lKk~_s\xk Ѭ ٻ"qDz~,_(gi#vX-F:=zvlic VImBH8$|Ons6xRF~v MUhlHЎhl㶊_CMMTeX%*a>g' GI jfd/_Z^?yMkPqw@́98 {#KWYZ'K뗀?h o?^UIW nc+=ztYN2M\6E\Ġ  4P%8 WA'Q.7%b@+4_~9jVZ/ǑfE9T,boup$xDjkjZjihFO}Qq$еԠbnE`} ( yG1 p + Ӡ5ɠ@@ k&b{pFLHMBT UMV/ߺBl bbdNt`}V]k-: z׆ еԢZâ@CAK 3ۜRde *؇ XOg"h6лNUN>>\>;cͯ? ;;d[sailbe&?VDxvs jˡk59ޛ0r$0thhD Vac.Т <:sx [1g @H;SadW-- =.ur646U'.|5ճdmb]mȪc N۽;n[2uе֡#AMIЭCM75נNxrDSVŃm8˴%ep?%p$ Z"- (0690/~nsXgo_ZRdAl=ГS8̴v A G9~C yh&8z23q[|}5|Πq9S8-4LIIS PSA4HpCGWn5X?В-"d)P d*"iIJ92}ςN0[ﶃy 6f{@FF166w?ƽ{ceAGzX2Mr^3)8v<VAzeWIDATa˖M+T&90L%gWXGU|h\tumlEo/3 &"7p O@X>/6!j/ j8J`RVgu Lݻx^w;*>9?+~yyVF7 FNc{MNt#tlԅ>0q19~Ė?@k?&S4MygR>-U桺FƦjihB3 f" ظuo(B{Akip p+4@ƒ8"C aǦu6d8{+v\#[-.0ThKt 'О,TV)q 7ehfl6亰8mT!3,Zi b18o>0{]yTgNhϭޙv:S{gmQhug. q wEDL AB 6hB@m=U7'!&{ *ƍ 2y,B_^`BM] Ք D.Ŭ [g`3fs`+H*sh"0M[R)*8)F;%nwBӳ#p؜of>GnJsxgDR:JJըA  YJ<"/`<6e(bϱ?g?78Fp sckV Mr Ty jJfUkKQSK2՗AںR}7Е!FWbZ0kII*X{dXBj! QN| c%Yq*#*I9 6'aK"ƸH1F$h4sC$%l&E$pN[ 6u9e)E.x==ݦxH|B=}|<3b\ϖCF ! WBWF&sR!KCx,Z0QkF>g !B*G;6|HK ''JTЗkPYE9iqCc9xL_dwrɒ;3;2B v3 VJ'F_!>&6vTklM_5%eDkQ_;/<:B Cӧ'␝FSY>zUWBWF:r$bq),拟 Aʨ :|ʕK%#K<5eҠ8xQSsYKKPZflҹ6JrٗjM6]fO!F/;AٹE(b7o;Yw l2p@5ئ'=f -VAV }?*rn3"T= P*&z˭I7Ls W0Q{?g{ixyH$1HO"'' \ PQE-hh(GcSn5SPf,GA{T{_|eeXDb)8ۙ8[2SdJek _$0:{;O@?6UP5CAϜ9ݞjoL_ʛA@SNu e $\=lWXdTFѿ y+A&F;K Xx(ʀF N}$ P+n5D[kpoQS Ck Z մAe[}1&ɋ0ȸE`SMYB7DK3XGR,,cnյԊuh?ы{qo5(ҩAB]|1W.\UE"YHD#?Y-Ψƿ'Ls) .,YӾ~ HM@C0%jՕ 5:44V%[`hAku+p*ujB]^{_ t>srhщ֢j͑q3ltQ.iV;ޜbӺ;:] ~;ӁwvZkM VgA`. ٳgܵ;CP?B!.-Jz֗q۠M7b;V4Ʀ]-g@={ ?ѽi5A }F t@XA09P$rUHKBV;sU_Ƨ_(̀0;xQ}ڗ#F^2cNybH Cp-)$HvB6u*囀PcMMhn`ވ[nF=mۆ^~x0ЉGQ:ߎwӊ.ZJØ̙$Hb9}BBQ_g3q\cGө}(5QS[jAye *k"^#G 7g ~;x+ƨRu_{'. "2&!OB4)dX] DGh0P Ck-ZN[=ڌ 0aloB{G::n v~whkk P&\e"6L(,(Gl i$R|%y>kthl|?G fyaɣD] w\s]qu}/Aѿ n"U~8kJ۷ O!$ B T <IP^#'7y,h-ʅ$44Vɜ*c>Po5%m ȹL x'D#**G[LMBݞhCgT*F2a Зk+UbҗSz]_Qh7Q<B1w z @/Ud϶4iQ]Dطo'@\ DDD0p$$D#))r5dd$ALTPe@V@]0P#Q©,%|)T ]It*jo@ u7TPf"S! tٳHb !9X[/ b/x5IFr  2il+u/-]Hvs&ls߂{=8zt?N8 o8Ӿ'?; ??/qx{ 8v ؾ}+xoby3I2}hxvF͓|RXx*^4mqF`BBb iW_ a2LLj&7U81;<Ōiqˬ|aM:Ĩi_O #q,[ E>Xhԉ[Uú3v1b ̙deJuW5;7nr9owvqpټ顳^M6lXۺz]Ͳ ̘9]:ox'"^`~mv]<z}+55)43 E'0Le4r.T:F3Dп_v'gΞxBP#h7Tb!c Fvm ɞ@%|^#ʒ~U<B`8ȍy2M+ CvbA@adəDZV-bt3jΘ('Fcy1\F3ȝNE~u?A" RcWFvŸ~(%HK6T2uw_~3'ן o\T6xmlMoF-F1^gy5n='3۳+Z(~ J(XZZ* A?} ]Jb˲;;̙N|"fN 'ʝl.x;yWN;sΌdY!p/e)+if7NN&b{YI6M/qrA A/lC\"Ʊ )N!F_+=,7|^63z(酜\ 9;ķvK_oִLI.g\Taq|u_9+u\.g]&K\6Zw ɑN W[&νkrۯOAGw6IENDB`qterm-0.7.3/src/pic/qterm_32x32.png000066400000000000000000000047301332762052600167240ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  d_tIME );bZ#/ eIDATxkpYmڋVu/rI:.tp:nh' tCaf  5iRژڮ8Vَm)ei+ݕ}=|jں·y?.٪$Fj<onos{YN_UI)TJA t4('b70[kIkq(AX7wOg& T@(8f|q,e/jBNd$C= r9mb?{{& eY)å-\̩+EΘ.dhbWy|FH)g|'ihw10ޣ׮ '2}}#6TWWh4:m }E3TKr{WRL;o?8'k[I(wW3]8^+"_k9{-"JalNUio72:wJ3  |ݻf3J"@50Ķ++JK7gf_z?~򑡡VUU1 7T@3o><<;IE#x7F>oo 0Uݚ{37Su|{ddH*`M`s6{J zIENDB`qterm-0.7.3/src/pic/qterm_48x48.png000066400000000000000000000110311332762052600167320ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs  d_tIME )'v[`IDATx՚y$W}?{|m|P6F?A(R"RB81a9l̞νtwuU^cDO*uU~{{U\ěUUam5L}((J)b`)zC0RVmǩ]tַ$J}n.eC$H eR )%R*$!¤ &=]Rw~ ?#@ <Z)coayH)Q !ib&aiJ)0di:Q־OB@)ArK(X)KM c ]Jm'mNS)l& T*MOÓOGyz&AAr0GXĉ')̺aItD"H IZab]Vޞ::f;H,BJI^Off~{=7M@`%X ܜ$!a <#?S c.ԥRXNw׮|M@U9|dG5.aʛQA9ve|D6 #QM iPV_:XX,jilf:i6sZ,J5NZxxosh& SHYޱmN̳v\.V 4¨kI@Tbve9>{2Zl?7s?)Pԅk,lƍ7 H3M{>߫QٱZ:EdW'ҾafCJPN5CU@GihR7R4:|:;~~Jn@y5Ǽ5B[卺ͲmZdUwFwlL&C__ZM0tCDfФPmьd]mt/N]Z#}V-z4P}EnXXwQ2d-)$Ǽ{ȤK~uW:uF ǫ I[w`q#%P(cCB(L4ndQEn ejDQH'DRϖ3wlZ:IhqSN.n:Hh4+P8cڣ$rZ$I$"Ek TE)im7۝Ԝ+}(ipr2]VaK9%QYۓIqF #I]k@gKU S?NWn/]|ewoAc,0O.Ќ?Tt^ h(hd+x4J)1L\CNHխ3J M8)Lʠ#eИ?R-JbDwmZc' ~jFZ+JC 8XA&ʕ)*2PgFp Wp7_Co pg ytKQpA(uTJLZZa0t ݈f鵶(%!LNpyie tf84Wq76>o$j3R}K^D!Au!u6: <"KKUy|jzV*pdlӹ|2?/=>z@h$q@"t kŅhv-&QQhvkE"EMt 2h-=׏t@b'i%Ͷo|:Yӛg_w~AC@0M\.=Wg3y ' oL7z8&hɣm[5xriO\Fff癞A@6055L^4mlٸ,f!хh:?ǢuemRzUzE5|M)c OP*=ib>{B_ L,Be)aP7U9SiE,%F6|X7ЭWkEq&'v/ThlW*_xŇ ҄J1/rYojy$ j%w|Ͼ0cnnC sϽ gd۷&֛3]c뺮ߙac^}԰Rih="xKIB]"*OrC'iR[\a׮FGW^cf2pe}7K;6+ea&}y60Fİ1u h猉?TzؤR]DDw_>p_>ЬBq{kcGG}fIVgTGcGutz䛕}\ɉq&iJP$t%񢀊[+OAHM~sw_kt2Ǐرq O=ç|s~`8ꞵ;^ԛ jzipQ+^B=w^{Xkr6Ziض#֭ڐk{+x LfJ5 M0tl׼mq ]0ux1L<DfRjrgxq?Ιo~^޶~IZn繤lM^N1M0MlWmٽ{$I3| UV^O|[يzggt:MNa&i:Bh$2ֽ!ێ{y.!^H¨(,,&CH)qBhxjen_fpuood؎J:&H"c|IDPĉ EU)WJz}잻?rAK*Im@$ ǏO#|[teK\\GGq,MA)$!\AѠ^oຮX8ztMzymcwaxrJJooyܹ,~}WۅUeu 95 '-Ś^WuiDT4oo-.>&CDF~Z>FJ vBO[q}luסt`GL4:#)ҋ?V::>@=D>h x-e25 |i1)Z+;|z'DZv8rG8@3Z7= |xO)=O~AW$*NǾ znJ?7 OaRtP@hZ-&GGGۺRFe;Nu_C%,Ux.f s[xlH8g G.n88y$x<0 &-1EΤboK3b4tlzMǒjCaε&=)Mq;?A jPkpWZw/59#"Wy* &lH>` mC1ZadZ6IM1:P):]0?)9({+6. .vSV,n64fu!|[S!g7SGAM!灄Ə!eJ`Loxf?eKڭ07Y.d2yؘ\jdr2R**;Uc/j97|P2Ga! fYY,f0\uضj֜{7S{g'&gH$4w:[.gg 4 \Qzu%B!ǵ5PukSL oBIENDB`qterm-0.7.3/src/pic/quick.png000066400000000000000000000315601332762052600160500ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx]yTU~˴49IJ` d/ `ZYiEifXX&iH(HJ"9 -["Z wsgl@Z{q8Jze^({/<\7ңC4n-4pW?˾dobu˲t~uwM@4Z4!YZV j Y@Xsڃn,ra~3r&6B"Vv`Uhod %+K"w{9/:Syҝe d ݑ9;0lh.:褊_-Fj(`4,lOej%1 3+ւi-bKY`YG]Ytșx<ņ?m^)hn7>?5\ֆdqOcj~b.3%[;S=C~4[טrdžLbOsXtșſ'c#lc~7_R$CBpeoI ,tf*Y:{"߀ˣ&rS)nY<ǎμߑ'eF|nrgqA'*hs`$xt 7,e8;[Nۨ sdϮ6C{; ;f>O+ggn;s<݆b-)5s ))A& hBX+s>gf5׽gȅuSlo9{X 0X4v_vȉwW0mLfT{wLb*1!O/]% d:иMFeH? -S<-0~u-={t \B"_;%qx8IDKxzg1%ƜkN&*SBodMq!*J}^uh#:N;6.:o9|$@~|ǒ '/ΒyX 'Oa&KnĈ |+uzw0Ab*иMByC,ƛdY0y%ۿ2oN YV:?X:[%3w.(#&~CGp&t'{rIa gʒ?2]x#ם7O~0_+d]m&ʏ"d#Ct.^\*'½&]=Ӟu֓W\5L ud=(I^ijwͧ//cB_^V0iK, }?&Wx!C:eUͻYy­^}&UFoV2 Q{[4n@8/~o>Ҁ&/ \/W|$kW3Cݼ7 [+SĚ)fW-}6&ML/&TSKƭ:yYzԵAN6dt|$Do ш# |YO^e)nҌ/53B!v#Zo= h *OWo15ΒqQ,("!~nhMS|,~~\&uLa9YOq3(`F֚qۓu/bo U祁~D^ $؏F[# 0_F'ѦM4n@SP|eՍ\7Vy;O=-1OD_JhN~c"z~LdKEwg.ͦpI8 Ykh (p(>7V亱33]1oܱ#"!~!{Ctm4*CY*JX{ދLl8f}}d̓i'@F2h ߱ٽd:1!aˌkMQ1z}Ej h9WǶp{ꎣO?_Z'w.>ρN,t僎iI/Β?5鯿bߴF97CYFVӞ1O9wLC:um 8MDSRS_xjsvaV,}7߬vp{j-BK*d[LZkœVӱ2Gcv سR՚'v\=;G<מy*֚қ}qXs-;+mY%YFV+I&aw3F~> R:ӡ| L а Lߜ?Ƕ0oϥE '.%]X_/Qufnwj@R*PB2!,L>X'@t|\00N`bо߭4>[ Jm6i4{d+˲ug)>%.di Y$J,ϓ[טr;+.J]D ,E, @W>ǒיqW㭘h)sx#˳x;kxyI˾Pq5T@Y/f$X1#o CC=?gGA@ՁΈ!:GMܾLXmfp_%gP5O:;G \Y@Y C)))c*Z {!:}u1mФ01Oc㮼{Kt3߁s<]?>`"}Ac!W?o3Gq$ =8)F/yٷ!Pw]f =򹾑2{I'P83BW8LVZUHBvJ9Xbs+/Ky~=%Zs3\z 5t@sc+r)vjgfFݭ$ B %ȡF 57f[ V丱"GM+Y.~όJ:O8CvU3"S5UM#@r9 SYyokb}BW0jAi֎N[mox4*x4jZ6H-m)PKuG[dQgo!fƻ@B ͂ˬ6CNAhm=*@_F6Bx.>bu *>m \BVQ\ qy>]8_9}!3:>"@}G=fCF^J=1kViBu_8f g @jrπ>{ßH04AA_a/NLIyYYڛ;ώd8T %J gՕ؍څ~]ׄ 7h`Yj.xBA5K*%ļWށD"2L>+֯'=ԃSq%1۬,9&739OP+k\ͩ . qR;uJoqZW㟉n'\VS?4Fa~!X|f @,2ƒ2_Dm@9x\D[+ZLq=HLm@-4JE'|o:~{ĄY!4H^&^6I3{*X@jq%Q& ;ak%&jOlVoLР*`-q餋02b~b'ĒMSI3ܳ^7Fm@J4]$W$ @p^:{3@SN], ?:A%2\9-CqgCt~Z#sXqj[` *~>~?n`5>z >s<߀N]$ ?z4{J0GI)2nfyM fn)N "j 7sPiW| fXx''b&hЩ_G(69nE8jk$PyԱ/Y-0_!а1Ì7q-R!3AA6+$)3 .zo]N*t ˖ 38ωqBI).'0N#He=[ cSXJ^ 'X$ofK~PگUC#uD"q }91N8?` ~\59aA<1۬儫lE"t꾨W|fع~2"6ZS4;C>[GG0% Ėm߾?Cޡî&j9ǜeX`)(6gdȋuF[n]zr+tyx&lSЩ;;`,p鼑X>]Yb_ff`6)p9I{mQ8q? e-w`SSLvZ"oyxuhPAwm.8 WaG­\oey< qRM"\e>zwXz/{ө}OhSE>,A@o-&G(mP'3d/3OA]Mpd4lj"CiރXh#ԫcµylzY/nz< \AVʅc cv}~$ /@oBУuhFOh5rf`6+lY=pĚ:"XҧԊm<ًePK.]'Jea?b̷+T-mrG0ŋ`bN;bqq)n(PZ3<(]1@M.rx+@4>ꈸ`ǿ&SQۿ~d;*`8*Ep ^c}P큒D2%6psdJlqi=%]>{IID}襖 Pb.E/p=1'e~0_-Ő*g/@0y|!{/;QE/C|ߐv6ME2l7Rb*93ZnnᾜB M9^ګOH6\"wu1ZE"Ϟݱ^5z~ )xR?T̻*?64dHgyC?bĜj0O&13uY녦^d7\wA!{DZbgLGFy=%m,Qm·&W}q+rIqj X7 >zhP243?$ym^9a cGzNE,T2G03I$fNbakNIL?`@;"jo0J|xpk_3N"òvN) 1C+boEyЛ>&$t9h腆l!ӿ,f)|]_ICMu( ?(}u/+I=x-z,H%Q=ДÆ6WS~@~;Dnyz#  \g/KQ92kFr2s+i  8u&"Xx'jq5E.Ht`AMw1CI,?U8QW2r\wAƫ𹒵[rgO&HϘDn0][w93fZ$p> v13NHaOM+R'+{@`KYljpklZتOuW5㴽1˰A6CD&Vey'nd~@^,CjMmܽrn#!V,{j,38VKb9TOxĢ~c9]@I,& "E.8쀸eLv#"#\1S+ҬY\PVNK]9-C~;+ Xwߋ v']ZuYtʒȉqBR-m'RmFA7fP埃:%W  )w ,XM!Xn鍲},Q(UᎺ,d"8)#n-Z7s3wvĞk9LGwV#B-= 6i~NH|. p9Q "jwxU72b٩[Dn/'\H,8X;Hd6 _Xy(Oq,) CV5wkb1~ĺ <rc}˓PLwTS,M#/;V2~T 38DV,msSNA WJO=SO6;W3{l{\:TLIDAT@M;+3p991NHga #QkUj`@=jШs9gv@i| &[\8F,٣_͡bw'j(=*Q8{NԺh#IlPx 2@@ _ K.H͂?_p̷9ĞfĂo]7|hǩE.<+G94 @n3E:NIiߺ.ԌQ?5TРN PM"|0Kl\a.\~zsG?=f]vC$Wh5rh5rnB\ ' ƞ-Gb'moj#4S4~ s9Ip#٘~#HHkP'Ey9*Q&굑@|IĜA3bA~S 7Ջє#bfuDtB4s^w|s"{߬zM%5Bbp͙yk?OLCk:BL̝o,1uM~Qӻm8i7< ȉqBzK|Fx'@:M@kq3;VKl?\]㣧קa[ %,Mx t>{i'KLL%,A? սS3~5{gyg댓?`IBbH }~B<-'6OsG )W[@0Nʀsê+?رx3zU;4Ob֏/ $S=8XFD~2ӵȋuƥx= _Wqe-Q\'v!Qтk#7㺿uJ&tr 4 g ~t6%]FXtb}!}@"qDu=Y(n qEY+q/F4)PtwTi\Q(p-UZ(E|^?\猊yߢb9T5ڟ%tj^Mp#hZ\a=~|MOεۅIrM'=O=UHK<͊#pDqgp@rZ(OfҰprm&+4i)(JU4`pUD9prWA~y"Շb KS n b_༸R(pi py p9 ~%U%u5)IE\Jw4@\iNXbQUY>Fþ$J*_x3@W:}]LTWkrtb?rԜ.V/O5͈QM+1EWVؔ`d{Z2\pxJ=p"Uęc uvzx'mruNضiqX= 1ꄏۥj^_N0q&Lz ? t"O5iû};m/?6yXgMldTG[]qd =;?;UŋXrNyqdg`Z'䬶G$Ϸ@!4X[vWI=l1˗ˊ`*Y I ÈȩYWB}cx~7&W`\s.DlYadLuDa]pp+pl00~ {qra*t]Q0?BYd3ntEg yؼiksLifKϼcvW_|_6v-L׉r^WAGcV1SA- Q2%Y#c,mĹHY`uqXj͉^e|kP挢tnYn8%ٞ(l[㍋O8(ım8 6b ]P]؞“JE~mձXe3LqLwQfdz;%K+?8Nevľ~o2ӧVr( xE3U ϭ=Kk޴,Mt{8>)H&Iן (SkX YhuqVol^n+퐓d:03\v?+ 2FW9aG&cJ;lNEf 6[cmaX< >6A4#5+^&ҿWfnѬ+Djt>"Uk=&PqU& OpoQ6_DDa/To~OEt qbB`ʍ 5CDMH# gr_φaHc2[%;`zgg1b 4gdHo1戏2E'C` }hϦ 'j nx8`)^/կI "^9VN& 9}Ro] 'U]E]C{ L1Moμ֑y<=ί)h#0npgX( ەvHY`O jrumM p_A^=Otv֬A$ipbk# RI>DU샱ؗ.bZ}) dfB%t `@8=85^pd5ӈ(^=޶իѽlobnY-v] J}\Qd48+'aUa6j= SWnuͰ[Mw mZ5BCk3ޔæ?9T#HձKFjHIs4mbwq ,6nȉib "Ȥ͛663j!Ļyc] R`F^͌ڧ7o XW״G O!C|*ӌ8[2z뼥s4PlI Ip@_* l\>DC8RIiUm[L|++EFjiV8Zrrw?9e.GP_#į2-`hdOFA"ķŤ5A/E ' L!]:6oc-nFH54IhI>Ś$gP%Vo{y{6&jCy ZO"Ƃ#݉ՄcbO‚ qj#qEăXx;&/vɪsHAl;&#p.KύX".*ϐ8ڋ8cxT}lS1TMŦK,6 &" % &" s=т!ݲ{wBkqKCq},K,[oJ"yT_ׄ:nNRHAьG`Tx=@z=;(V+<-H5h gN, mbit:~٥!u |_Azqķ\3+) h'eT:[u[J|DE(A/6"[WpyoR2/&]Xpw!ͩVnف!k($BcRM2Kiu-6aIENDB`qterm-0.7.3/src/pic/reconnect.png000066400000000000000000000233761332762052600167220ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx{\Uǿy4M-MMM5/di*]ĔHSA "^E.r;6h6ZfM7L- qzn13Ko3SLc9b9Z.Gcڋ`sNn?е>"pe\8O,VX0Ea?1fiq~ !]E:4K K\g䆌O؝Bva3]+eЬ@}.PDeYǂ-%K\%9Y oŒ6_K_ hȟNX$ fL[Fa!st}M^c͕eR>NsKOKr ا~*_# fF }HJMT}MI`›ޣE 6 V02})B,}]466Qaҝy^=م9^DHL7rʼ¸ lF R08Ku ze!9!tbs60m;u t7͍.qUEV!r/t(\!:%Ӷt z3c c-~f2bZt[ˀ/ ^%L0e!1*R>BZ]? tZPa{N5$[?+W|+Q/O\X;ћQ7rd;voi@ei@*7zǴ:AcN}u`; 鯔m1ܷV0n`4HP]@r9^EV[yIx0,v֧;,8?X$rӯ?@|1P *&y^ov0&# bXZϖ8uKH"M(ћ!z;< yX1n?~yM7NQ$ -b}_!;2✿x@@0zVQYX$M4)j rN$7~K v ¸vO=O~9]1=]y#Μ]!ą ǝ-ղl,6 Lƚj2Hpw]evKfW4O^Oَn!{Єw\fM F l^h3M +As.+Bfd"\E:s`Dr'zQ/ =$Hw?]G뭐$:@y?L;x0QS.@|aIt@& mYB-:9g_755ݤ Cێ=>덣NO|?Lf0m60-̿0 à%% dĩ[U9{b l8*ۆFe clw+ugNNŦ̩ YA˪:hϿ5w45 }qaO~iΉxs`cĺ)swS7 cW~ l|7If1'ʤ'_io5\j_i{s #'?'SJ´C l}`c+FD%9c|\o~+'燠B(k=UR5}ךl>Ǐ~Ur.'䛞qrrn"6!aψ=6&>)FN~y؊Yul  CfRuh>o(D3fXWO\ d\u[D//rc^6,ε랯ˣx!?LijzΣ=Q|Sy>i͐G ”g=~Yשz,ZFJVf`wd6Ù-/D;ԏgȿy>G4%%"|.׶ns *@qrOt"|yһ=1,v|gpW?b ; chu9p6c8l#k|04Qm=)3]%:q}Kx l -d.՜@<vFMW_fH ]MWVj-t IMKz'=ٝN{ {0x+z ͩ1~txY]mb;h:odU,;  H 4`NFf~L`PJGbpѩG$7_{Z lYUw;=2u7"z ǩ2 J2aa?,9qV=4v<'sPQ' [1.V~N;@TuwQ@(Ob{dSA|k3d޽d FvKCV =6O'ߓYMP X@ogOV=NJqo#(m!sN!^/[ El䌞{7 u±E[Qĩt{gS=p wG O{J8)qu~܀pI@y6ڹؘp f9tOi|ピYݻihuSM*lwGܳ;{q '?-3ͧ3W"ދvTne.tI9/r,ZϐMѷ1yB1`I<ޙUY[3MtLT"(l!(sdYD%rIqK5 5AL%s]D33+@~cT|# ?ץ\/Y~o7}D_ފ&"+!JjsFjzI7^bdVF?DAYon`bGN& jo lHIF*jXM~`Eڠu ot.l0߮+P]6 Io@,҄QdEM(+4,pA{ 'C"Zμv؇N]x줊EH/pv0mt4;vdX( <`~,h,*4mb!N>0K H+4;Z?gd `%Ҕ o* XQ_VJySn_)o )uzFf1 ~[Zo'LdbL_H0a4O3mV tK/?r2tm*=c]Q1<דYk\(Ֆ]+3BPI4R5.jH4+#RY)˿ w+='>FWx8JnKݏ)/~ِ<HveT[8!@EZ'&06gܻҙ&Y{$B `e=pIJzۇfsʄ*~>>3t/K1ĮFW;PG\r%Xďꭕqd/'u_׹pe>(Tތ|P 5 %/~B-UaN`I9Ǩڨh# m T8 @V 3jm# UPxE\C//8z8 ,VU>4Xk <| {X/PXfKI mC[hg-XmD>a+:0@#.)zެ1|jF pJÅAL ,t6l*.xXsuxl+  vT9^Q۾7/*!V_.zS5jdHF#@ HYN*^Gg5+ 9ywV;g6IDAT2vbg?j FANCjCj!D= C:]֐*^VřsiDpɕeB9r,NY5NgtMAeY 9o(@95Y0r*U }$bj#ɆSxnu/P 㻶@Eɚ}W U"-FAӤơz"xNrO rO!ϩ~_..9@Q}C}M^!1_ Z~%/#l-{-6U k@\pAabqM9M9#/#;<]Уi L 2ZJHNIzMAhI7^G. \> U}zmߺГ!L&~vMq'EڞJ5<(  |nLW_9pIx(|$+xTB/VAl90)!=m$1 Q@ ɒi~2tZʏ^Q>g(/:T&lª;tǟfx͚IX!bv4p-w=S-vn4ǩQ%j8a+xz ̇J!k X!Ez+d*Ao퉮bmcw3hj34(# B̬!ڿEtt$&,ށGԇ/QA[x:9`>#pLɅ\8Oi* Z`HK?R 0Aa pHYs  ~1IDATxy\/Ps2hU[$0DXdXCrALPISSK#3M*" "&Yji.?gA4Iy>~>>{>׹9 I|7cv emcԆ&P:Im!?5GE" w yUqsʕSU 5% BA^#} 8:$ H"\f` `C;OCf &pZezARkjz&1ek`ڠ[`PRkhZ Rys ||؋Q`~bm'N оZ&Hu @("#bEnQ;; %:AB@30]u[  $[ d,xhI:z(BYEI: ![ ~\+I`g`oa%hva|g`:MawQ_C(tCwo")+7I ;;$\z. =KVz$'I$\z.}@Z9Rhޞ$sI iH@?_)ksǀ̧@v |@;SC},~ v\e rn]ip=jVA# B.U0?Ɖ{Mb!\]3:Dt[X̸M֧5qB{ 3JC0ش_xZ+1e?]:JCCj//y.]ɲD93"+_x@_Gn v(]*aWZOXʊ$s7A׶wš@;ã) K>VKl<Ά,WV%'S`1pY6%@X0PPk5~\ o8܄rϭB Ўu<-j/VBSy*s9n9aZ=bqOL ͜C v,]SZC‡g=Y”vL aEu!hug]+ʙˁKo!x MM Ў !T˳BہY5{Y(tNq(@-)O;MaT}#X}I]~,PB: ?Ɖ,*tv9HiÆ,7Mqa>'F_=iCx'HSaڰ.CGS^(ꀒ2nҹ _a{XYn͋l7֤*Y+cF~S`Fn<% 0`X|9XV.I &mf rWKF]HfǢXgV%!BmGdLnw-%"WMwz:T@P[:[fDsrs{ݷzN$0?ƉI ]AcP%ʙӁoGdfsԂ󅇣%ڇ,z_^^㕣MhGFc_X8cБ؍<Bqx >ӕI qdD# oHxh/`x*=%C(f ZZ-ہ0P-ȏqG=wz1-F'CFMˁ\kA6kzY7W4QμN7-Ow;p 5dŨhkL@&N!:*j>d69n*lroql z *}ܬ@T ׫kv{{ kRK-B;ChsN [ans:ՅqZLzRe|J&j{ ^gn^aGC40b AmEC(G2sUH^b]N<|Iky-2oVËe^Ww[@y׵;Ƃ?;|Y`Q3O ^d~g66O)Bdͩ~fooFGv3 !SW sL\h$cb^G0LS!U d oXj6KdLf* C s⩼&giwwYp[g̈':rO7T~= 5 'O|bKgz>`c.1eTߟB1 ,$ .x+UB!tn yicI r7O</cv;nZn^C@"86XSf?atoCvl/<l9hn6MԤ*X;^yy"@dfɏL}*֦)YT‚Όl9FO@8@B#~ixCp"*: 5Sw߲!H ╣Og3Λjt6릂RA ,9jqoB{DX'fSm_pkK|z!tD49igYQ_ B,!ӵY*RAi\6FO sҿ@4m>|:Bs(KC2Ks KWF\o')xU 0!$MSACkTY-$pLݺ!7(!^xLLIubCw$A=,a 0!}>]iPTW4!AC(hf 4*ЬNi@$DŠ h! "E%q!DDZdƚ嘪:X*~|UMwϹ9zG5t6m K*>UE;iO $}&88zI pkbtJ ;ߧτ_A;7ulօxN(>_ᣵK%VvR6iX3'hBwb-Ai@13.;Rr~gY@lM]kw4!uU^5mI2G =[DDӡ:%^*UPA{VѲ73;yV XURpμ.#6C\/30"&GzO5- Z%;SF3X`rGpTJ-4{W h9+؁ 27|}$ +_bsK<f0@0ҽ('mZe)nY@j hkʌg<27~dNϏڄ]δ~󦏔?\0"`*uh=RZXFRp:sċv97I 'p7QL>|z׎h9voOjŅ ]=*/0p;gM>fR >]@:pr; F`8v! .L|*;Z4{VW,eN 0 1eZ*]Qҭ` /@Kx‡4_Y4bVyK\9߂OT BoHHj \xDpo `V4WcE3팤:=)萤 )(󦣻)6db+pH 3izt8oKf=ggN)wù̆Jqu"!ˏbߘ9/mT)W[*L\\1}I gvmJ*$4sd.z n4i %62I NT cѫ_ˣlNu{Cj'!ns] ŴR RpK8SRmНlzOX {wm#rWB| @A1=UNg$rWP)|G L7]0lR щC :Bu}Kp͠x߬AXy?.&lBl!t? A/ѕ]ihL' u2Z}FZH$o &cqX %RPׅMn 9G-ya2nVk䱕ྕ %%#^RH/Gn%^Ѥ49SRC *@~]ADh(_{^0 .g7ß+ 7_7)9ǪctÄH%cBw|7}d^H `-s'<ӹI:,\CpL{uk &Qz3IRυRct{Hn;cF>0mz|ie(b!_z:?j 2{ֱy}f#*~8{3nY/Cy=)Z87hu28nReQV4]gߝfϧF;@ t~ZfXPlŃ^2&ЗkwhnRPMUPFԛ0aԥB;FR3,s ޅށ.R{p'wM@KX %k!Ql,kR}.3z84 D#3`--!2 BG#lQ8uGqq~ۀcQ%6}w?dx^d<5\1bؠ/\iQLw;c] ?sPkxM˹m<; n, ›e<6؀^69՜N{/% 7jHR1-xFSoX@r ,/xeƹm]nkhIH->WnTBIIRNLJ_>_V-kE#4Wxx<d5՚⟿㰰җ ݩxm[7۠۸C-S xgpi<2– =Q|9<$ρvd1 ńscF= Y 6q # %;2_ʼ)oJ |?N;d' T|I+" /FV}r.@[VQ+o +^rkKZ%KԼ~1&%?lN;yXAk(6Ԧ}ybSpB%dpN`hߔ^@ SsƮ\F |<ț]A~C2zM)Ag%V xˣ*EaV<~!&xVUpizbpiX)6rE;IENDB`qterm-0.7.3/src/pic/refresh.png000066400000000000000000000342651332762052600163770ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx[i\T=.hYie.B"K,/0.032Vebo $(h"nȒw`.08{Ϲs<^ևb<sK- }O*{Uazs՗yMsFPCՌ׳[A;g6C)[ݝn\s!xjzyCPU 8@YJ?=xx[bnd< x=9U?0度fNOU owZrՖZa |1xW$fn78Żr?5ɞk\5s3Nfn eg2 d\4ÊzV/J"P݌ebe^@^9ПcnouηbBφH䪫3Wm\u0/{ '/d?o }`j7U  lOw4P@3_5X#o V ^=؟Wg~<ӱ<ؕɓ5[xVfz"{8z$ZsS?6׏ -nؕz=Z/ /0&PGђE*^?:W \ߟ91;чgLΘUC4"A-J yIy3ex1هI><[ܙz/ NhL'@15א7bsF$ mu_iݢ;/gF|HJ/P x0Y?˂y3u}++#]a-g^oLoIMPYB!Y*LTfO"h&wfRT_ϖ40"3K &cqʆaے62;e .åp+gy7ݗ'Vj2w{3y .t]'U vhp>H 0K״]h[Z2WS|^+HpɈǣ=k u j=+m`Z<êVyoovܽ։)y!ه7S*I/2⽘ΙazsbP{U 6kRwr%z, _=v G. -> ߗd`JT?[SlXl˸ՎʴLߩN|zЍWz:1'k^`-0A2XIAm,>`=“C"JOf.AΌ\l{whd4cTƚ&_.1~.mwؼތݞ띙՝bwRKl]8ŽE{P.;*UޭΗ!@ /2֕[#Ζ}x?ÏW>/C$fX%nqc'z`R62&M '5$ Iu-Oߛ3yKIJȌbv“_V6wn_aӄ 8_7"Yx$IɄTFi'1X_Nan/Mn]zzؿ?| f0LJ#TtŗNM۹=dz7bׇ>nue}9wp=-C:/+S\+|otJW3l=N[[Ye=J?ІӴc1DX v'O~r E_#sԼ[q(^y~=61Rھ*01CTX铥⍔Ǜ>NIBĘ\4ÊC=[R_Xܕf#t.,x$Y#d8b!ά=<ɍqa%{1i3#:PR^Y$ 0(8hm ݁wY坜vܗjL4z cӤ]3Ku_QԩJ*0CYW﹇|#yֿ¼]uy_kc<-S™8%gk 6pW_^k: /dM=[ܸ=ԁ1+7BV0eHGdiІGṵYAV96dH7#K/7y63vyqo q +Չ"\͝c%}zkٽ @U+cp@tLoXNo9}EXsL։U5gz Y;*ax|o_HYt|1هqJ&wf[Λ,׫ E3>Ԏkx0cBp|>ΑZ&!Y5Ԟn=˭ l*RB6fHS<$aO8@wY)SUߚER 'rx˂N6 thp;/aJ_[FN? ne|aU hL}NBLͮӱm]_5Վtc 5TE)oBҜ8dD |@>V z,˄pg5C3 ;;<ٍ;W;rkkwj W2N P"RSkY|ʗW1sd.r%psgB?7/ƪ$%,%4Kf$Ax`9)j\6hk s&uԎ{xdH[\7;.fE/ P:pX[ZALt_ubE{0&ԁgd/Ai_`c> ņKlW)Ǫ&I`I|Q"8i޴^]26ӱ&Ib Z38@qAjyr_ { U_bpL%3)gWϵ.AO Ǝo^oU?[sbP{vXN^Ļ$ jX^@/[|,12Ė NL*s{KA x95 Q1t;?P(~h2hvr%+fq@g_3=8xڵzm== Md6(Kz d:PF^S##ClmDKyQ0T֯Wk$KO*~5hY,D}hFn9ȡW)lys{E;I?w|ܲy? I^WeF2ԁd4h WFj .< ;xX׉ ]jl#!25*L!E:)}e{1!ܙas{sFxm 1?zB|$_5DKJM+a( We4ho]ޗ#]yb"Tx!IT;|VOjiQ ,a ²~G7Y#okI>\}9רۆ6a\-lvbBFyPI/!N.`#s jE߷k<ٍw*[U'An/nsg']`oFub.oQB1X"CCWvڣ")Cg*Qޭˀo˚(oQwasL<2~#S3cJPd'ػ( ne-,"24TTdm `ԫOLˬ4IrI;) n# (2lyf`fpI纼wIqĽ)\_4:hZCk^mQYXAC)QoH\&Q#m|^  =>z% @# 壁?2P b %X0ֵUWSO* 0?&aa?S'J혇|kD C7i~OiIP+w:IZA 7wo_00Ówb(.:vC/\?=?y=fuFul )Q p# 6f(  a5aU6 _(.΄I=~%-qİ>xg9P_TƝt &v݁.у]%Y꜍Ԃ!^ G;hG̋sSXmAgL L0ٸ+̛zQ3OKG4y1u&L~8Zd/w̝?K˅ m= ~M{ \K f+̣ΨQa1)<)QN`K{ @שP\,CS"ֆ5bb+a@jbD[ݦr6@'þ'`KlvxW,Jtǒi?(JWY~`=6X䜴.XrxbiR(Y~+p_y7'?Ċ{ƃ3~%4G Xn>a{ ^T Dʽ~awtybrDz3X쉗@3K;Dq_OǕcؓj&X ա7 nx{ \|m=X . ﬞ$OηNܰ'Vxz+N0ٸJjPJ8 hl9oH*8odDan`9sM@y5PAt-x}?\}K<Vx8Lbpx،r88+9(4$AVaEH1VГ:ԏG2% UJc*xo% t䨅i% U^,2 ǹb~{srr6oM@!UԙkF[m񛕓_=p @= a/.;/Ltʳ^X}NgL Av9}&B4n+J(E <oz,@P&Pj2ؘG9_L X(ƣgR%13P@a{ %^ ܿ8R ~|.ɸѭIb.G"˓=F卵*oL20q;b:*ր8a3-z^~/, "Ayr~;w+é?j௠s IP _8r֞&ys2G28p74 s@z@ "Mu9h#V#)𖁥_24U}ﱈ<9>k6z:7]ZI'.{輒JzP ծ luOjYlqpx|w,A"Ҟ@X5*oO4onwӿ6~jH5@7?I׀ o>4~H4J*FзoIܿ>aP^{ 3EKU2lHt:'3(IWaǏ={~}|[C)<th.99Z-%'ۣYA U2lņ ڍ`li8?\>3jvv*X h!]Z`ߘؗ."y)mB߿mӻUx_%%4u~%Tߘ4x~Թ sZ)  r@exQaaG`n %ѿtu4#F/t>>xY3 bQ@kPB XR6dVpc#2d\m.*P -FF/6).),SR64Z,<CX_.~.@dJVFb.-ԨVؾ`a1z<0 XMF`r#1%ٿ۫[Jp+OfjXЖMg#}>yr/v£OJ@A@)Uɦc{Xmtc(%H9:D$ ^r chc`by5wkHssx킏QNRiNR9^0v ؜8$0kln3}퇨G̓c}Q nxik /@2 QGQv[~FGG1~I~ \h": ؍,>ڮ֐kT^O߉)m 񍝦 3*f&2%vfq [~sz d31fKSAJlh̑KW׌6ך+0k̑w9]x=8wAo^?GVTnf8EG("3@PG؊ʻb\؛l,x7V:h:A`S; ]f+Bf> hע;,O= =VDL4FomFI:G%sinIQQpб|XX`T/#lTc5F6 ߟ0181NkZOHǘKo'QJ,1i`m=ogAj* _b\ 2DWpܲO.HP TFMUWv餛SZ`TR1mKpl?<FN BV[a&qA@ө#;X$6Z\N _]݌kꁥQɼnfQ3fiuCEGaVd7B Ou&OڍO7yE}F_+LU^o4d0vQgE[IDATQ&\brR:fu0S, B, B,7HI|Gov),wۋѮHP1.sWӼbqLgO;nlͧ@T~+R`@?ю?d"‘tV:Udf]1i> Uюx|\ܹ~:~l:4*JxDv вbJ78,!/&Pcq H6 :\V*s%6԰ҿ<֥yL A:D{3q'h5` ␎`K±r 񺁌8J"׉uɡo(CݧT jiDEj)Qxt\7?YbVcY‷ffhlWM,}) @㨧}'gdI\-)=AIׯ]t=& ]a'qn5 bMzS-+XJ|@?KM"FH/x֦yr/zA}݉8zFz[4ZEțXJ,%AHjTv?9MKx-}BC@@%=>Jº >x5z,j\1϶S1sLP H2;Yg$Yg8hŗT?ąA@B'J RM4J* ؎}gUu{Xj2]^<ЮXR5aF rs>{QO`ޖ=2zQknUdX*uk4Jkwo/a}>*E* kH4_nKco 8E[+FE0Q[^+^q$yiAU,bu`߷Vz k? /q)@Z77)X[q5{1ݱ*U*V&_ Ң1q|j[; DƪXj0+CAT:C; EOabyobɞX}NU^FM4wduF՟m|k֔!@}$o諠&l0)~oiݯpSq-bVw=g:m(9WRE۱&3p]Y1zȇ n bנw&]UXdP['Y#'x}*@NK蔲:/xTeۆl@A+fw?6uMR`hXaV-@Π®.au$%xw*ƾ[./Pg"+ck f`_ʼnXB(;٦`Pg9kVLJݳlu^n#^ %\ Z•O6fY6Jd].ܿ%ho5li{蝒{p$`m x@u{tKĺ{-a׏ Z•z4 7?'~( :s$n`L>lBR\l@SBm_|N!Ҍ#xՓ=,:O*\ QhG`q=Fj]_NVyգ:0؎Z,>x/Ac"nߞ]. `W:N &b @=,J$D`۹vnQV?Al G ۽O6J/l[غU,Qc;n$ތ0ݷOEc].꽟|$9l^>YT PX@,:+n`gQr9TEs06odΐ78ζ3>:Uoo*ڱ-e1.Jg\)VG`|O#6=~euKn\c.pE_D=Wǩ_]bk["Vudi1"Nb)~wjeDMwmJ1[SFGcYiBٺ2+ EA!)vKLMuǍI^1fNH}+I>Ht\%PlV 0C [g C"{[gm>+ 2YssMXLDJym$̾`틙D&|9PSo]Z-).,ex2^胑C-?q4 k00*OCi=sKCYZgnqWOLsюfrH$xqqG2&|^iTS@)صm(3]E!X)QKsBߨ A94|3J@S,cT^au//eUԆ^_aeNa= /\V',rkei!P!W@j Յ%@;3EB XO9i).8''dlm@>)ndS R"SkaYsAi^GUS"|\X4P+Oƌ7OʝÖ*eP ƆWy/?i(fu~ 0ocLmk_v{7> dx8RR7񭤟 spηYnt`ЖLu&R<,ÆQNP$ry"4K˟ _ n'{kvG[͗?C\n_^tô hOb/0R X>F1E3Ts4 /HlMMV3D0S3z`iBl|wovg>&//sx0`CyVҽ' )(fY7ύcDC44 D@QAx%/NfJH^:!ëad j󥘷]X焎ef3g0' T oXs%3 3|~NX4m :_Qs=|~xP ~{LBéΛ%4q&7\P'HP|- (NoTRצ MP3mP%iߙ2+^f2zu`´@x uqsӽ|~`}i6U<^nb0V8>92M]հaRW|F"YLS˝KIݟ 3l?d^ 3Ab6ڹc&1&|; 7扅PJ5);sD 1s |K b(TUF/ȰHVdL mik4_<65&̶ckvCMf@p5\W3f^b™h7Z޲u)%Ydjx0AFX'̝=:CROv& +79XG;|0 Oܽ ~87~MMXiL4AGs P4?q74s| Pn )ѣ:3vGɓ~yۼt?V |)*s @3_#U @J9C_zbwL0?Y3?Lt)EΟcCG43~[Bo М??vN[0RK b%3`Q/F/v6mTF(#w\2n` /pʐ.Ÿ@*T ţ:mN+moy܇yqp5Zjj"}"62fm{Z89gۢ &L_<|tr vh S6GZS@&tNL@y s0P֙6ȢGY#-𓽭ga]<2&0GKK%9elvOsi7%{ ?|Z WwT9ˁTz<<`)PrP[vN@I [⇱stt1Ρ;P /~PHibV/)q`@M\'`*V:3eX.*T|"KT<9L혠EL@6Y㽇fZ aO } ^"&@_`lɿY@^z{ݱ7ٓn@*Cٝp1@e& g+'B2iO&9L ` ΂t.tsx0p琇A d = \<ɢwfgy{ݾ n@vU > |k_&p+,;QT{g,ir\IENDB`qterm-0.7.3/src/pic/shadow.png000066400000000000000000000034321332762052600162160ustar00rootroot00000000000000PNG  IHDR\rfgAMA abKGD pHYs  ~tIME05JIDATxrHэÎ0MӴ\NEkUDdfj yvUu(`ׇ:}Ua^C>nN`~|+V.?u{.`lusmUg~ߪuߴPll[?&/" mz[Vuu"x*`*me9 |C>C 8ƳKNCܮ74׮ZZˀ:g%x`}p'{0]Z%}і}pN-mV{u r @:]g*ѳU@@6*W~m̝Y 17@<7s>c`|{g7rKq׶쁿0ٯm5ڀa,7 l_Uu4?DIENDB`qterm-0.7.3/src/pic/sound.png000066400000000000000000000317011332762052600160610ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATx[yX]Mo}Ylys$L 23UgJea8c8pQ4 ̯cs x?#akoğ}!4`n {!h _>Q:Ne>#@M~^ T0˗=Q:b=ߺ,̻9Q4']zCɟk?#añLchA^HH\h,PiSo}y*Y^L $@cM4W%,6/` L*G:x @Oz k^*D`L g~&*O%Jxo5%)0$x@+Yj\u8>I?LڰyDMy_Fj撳B|tx>!\0T,A5<楣Lwၵ2ҖǾ=Of5AVw"3{DbZ& `A:'xp`/KIm }xyIpШ6cم[R\Zkho*-M?<1HxG hH28-Ma f UV] JZKB4OMDF07rʟYS3cV%SL0-87<  Ҽ6÷B2Җ:Q<1|2`v xBRX)>+&f]"?@L8V ܿ0Crsȍx(ÇwoW8/;۶j%/A& ?@%m1B 9}=nW0'AHzwҼyP'ռPkaCᝎ𑆵Ā}g! 2$zQ}!)61^&"poU0@(YO'✺v^U è\yl#|:?|Z6o6u/L7*{bfˉٕۨkK`“"G6 ]]>, 83;o!C ʮ!c6`v@iso.T&zVCQ=z( U`OL;#Em/3*LMv6ۯMk0{9/Sjot+wD/%1#~nBpFu_fǙkp0vȆ =gj0?ӗNhS{@ 3<9l6`2U$M\'fdS%*p&C Z#@a70a9et7woY(k ev=.ugYogS7G6coY 1p^"hSEDٮs'kayO.Bp6;6QPmp'M l4K8}iR_W*i`覡[oRSP5ST=ƔN@~<ٶ _z>R ^OhJ#(A$Hӳ3Zi)1`v@!N͓j' `Npb\67;OEk1T% _J洛S5`<; & fWIƕAh[ Rq&9E; <&/!Wo1,Yt9C49M|嘇 ?-!"tF54 Zۜ:Ż}YrϠ%qù {FNoX "㥕jU]LV)i ዉSC̺\ pzLjk7NYxGlU9d%!8((榲>WY v5x$Oa?dSԼ`hE-:ʽ :)w-)SG208W7jq)EȕG%@ vIiW=Xp֛>T у{Ga\{u" č9ƻ*ʀN@~Oy `ŎmFJ/]mN0;膍Dj@S\`s5ܣ#74 N#|aQDɦnVUyv/~J"ic[<'osރ6ᄐ rI J3TåhxxPde OQ3?E NpUp2`#N3   h 4%?)ܣ&BA'p[I x`^W[Iy=MLZ o.'z0m U[ѫC kZIԥC s,F(HuYzP[ øvqZ@_lZ3h~# ]΋tL7iENl%VC" I෷rgZ6enooQe f01 l8ƳKTAa| toW)SIqH&z1C8w^U~pn-)@[WB~7i% *pM1mǙزy)A@mvX_pVl?g &GnS~,$D|(-S$in u$#?'#3Ѳ 6D; FdAa)bbWrA0i~02^}/zsz'HQ8ӗee(Ç)*^<Γ;AW+YTɃ_fo nVm$\[f0G?X \x)Шi,^%\ԏAoCL Dej.P@QE|XDzlAddL#J <d/3 qش۩e,G@~*f%1hZj3^!zg'brG&= NЫk'z\U, a?|ku>k8a&'_H7Ϭ* lH[$O4!ϗ=/`L =\5bd^C3I:o]řϲl6*^:*\ڛx-ɠ^Ziz@htoaDkHqn)VW9=z+L7  @Jj#vXIwرm0O_jRT.qE>,&$MB~ՏSGwvhRq:A^7%kVkDDၦ! J--3MDufHp`Zä"LDM-7 uqRmuY~,LWNa4i x|՘w۩^,\f@von(r,J S# "j;"3\Լ**jky߁a@@{f^P"mz>GJy8(y3#6hgz(O پ8Lqӵ+_ Ӝnό*9U#I F4k;@,,VR*~{u8C8fE0+ۿ ǚ/a`7i(q@[.e LB>jTé2Qľ-V { 1HLtCZ6>sKDͷ, ub{,T%irZ*%{%}oYZ7P(2s881/R&{h^&.jyt. ^/Ai?I~fk? r'ySG}oeBoj.cEvƹwHb7}`` O`g<-L;X-v=pgDKC>ZoՌ|]$U}x]E]Ա_> w%k&eBF q;7~Y}|{,Ps΂ [NL{_4uK q4oFP`7P#"->/s>|2J&L7kTJ&^ c y^(" %Gڞf3΢bp6G}zvv;Wc@@qTIJ. $9"˲P4¡Gٞ8l`WÒN;{#1oB/ryaR#4631f<ًTHbHHߚ-{< @C-5[??ġ¡6r> 1n@O`Cth\3iٽ:lF ˧5rI}_!t':xm#@ ŧD1M5QHqxJ)E@uHbwwaCO &iB|{k%g"%;b/p1πr6Dc[sDbOqy 4/'0'ˆ}]M2\H 1[@=kS~S@*^#=>nAЮ-\K \觘N.ǣ"WS;\_t u"'uH'b}]C9<͹,DvbOl&#qr yңo$LFDDGt0 >E| ]P sG*P|Rf'6=ޤq̽$_*N3pӹc=Nҳ׈0MDe6X|VJ(4beq(Ȍ޵Ȝ/ " DtCC }2&6[;REn"wYv55rEt ˶ 2h`T؃;Rn}7<|tȈJoĥx&QطN&Qž+c؏nl,؈S6[NMMͫ*3Ȗ=(4Rt-BAs$e6q(lOu||ۨ>Np? QC~fZl\̹W=4KS8aC@fl$#>.hUUY&>ſh*|:W)ǙSarrOyc,UWʉU: A߈z^c}'R]=#v4 ƖVˌ,lH鉱w &V|ysmp[^3FT8ZrO3t y+^/ -KBZN*gF!?3 ?, Ƙ4 Aw}.A*kJJJXJ/mb~|Z9%;b@ +뚽*NAK8b~5B 4h3\:@9LFLD>q$8dE/ʹ:_IoG5\I+4*p˄PqI=}qi1G/'r|}}&o(zw;n5X]C^~ *uKsp '838FIndSM%[ yhpt-6,_,[en"q1ܵ5 3W(Z5F Xki J~5\ ˿]{oM=}:k#sQbaؖe7(tz\W%VVAŖ%N!`MTSxV&d eqpfDaP,$=z!](~qbGXSVfF83pf0;@I{Z!ɱ6Jk(NǒbF5Ό(d- v4k{*ྖyrp1G \mX)Zo# QbNZD\ʏ3CuHj8gVIJn#gqcRPb0tdhp|;=LI[ _)X#Z^FޯZU@$Jm.x&; ` LrpȀ++֓tEp 8s(sVn7i෉49A5|T_8iF8ҵpdh~~+$F~&֫:r%?gIDATകAv M9R[kd߁; ~ORؔ-Y9=笢E|Wd^7,uTJ:?rqWZQ*^ƕL {~Uxg+Lx%%pVD1۱"i3bGۑ>PV3P$-'-d0mDITP(A01)i 7MJ,p&l\}LJX& #ɮǟ=8qc%UX1k(>~o )xɡ<Иd\͑փZSD%.%\ŸzxqlM'qyzܿݤAG>Wa!&K:?e6q ɂG@d$9bnT5%{~9@;DZbG<=yR<e6 f(Wָe^O ;d1 >O)MN@AN@P?迂B> X$@e9:-H{e-,^ ͯ`N9CkY~; ԯ8$l7V)%|.smiaX5( ?H F\5F(,ۮPj2jcFv̌TML;51vZg:mt4D;jͨ69~} K?0s<9g[^und To1H0`Rr1ex>(2wQl_*Z ۔KdzؼJ+.']jIhrq!WUnϑ=)ZϪq) R3;jIcܪKezy }@5w(vL.TH$ux`CIY:!$ @6%9%3 Y*/_M$%zk2^zE1v =A뮌i7.j4[-z,Q'E??i?7>kcȶMkcY]\]?g-Aⓠ$+DZX4$'IN4;knG $XIHX@$r.u͝~N&?y:E''귡/9ƛsk3ntPkf`/(/(%چ' YA J"J)Cڋ{F%=EI+ҷ\.qIyx8jx<޸Sm^f>0Knkc*ߍ01zO!@ ~>|6`ok(-b"BBא{-~`&'!0ca_rM\x DZ֌fIq{ TA4qΝ٪'TP;TW5 <<\S14v)flEokCޣ+XS3\Tx\wU>,gzcwu꼈ˆ*%|P(6c4JhH+䞿.>T_|엞[pQXDr%,GI)"y$}@49q7IUY`>EugAx*?󖯆O4뿽^|#Eԏ>EZ~:a09,*g0ν BL@~V1 x{ b/ҬW(Z*V^ZRP',&K+\?*tx^s&H# B/P^xS?ZU"%0^fgƱ'3c͝U*5ohm ^f h} |D\iH\uٯ{Pm$%@'yuy/\akTTAJ\5B\)w5#އX`&2D/)J*]h193@ aOz@z$ w+EcuT_Zq2h'血`\ɘSTpL=eg[ 2!rbHā {KoJ`iyd/iudK=.MZiv&^=A}A<|$Dvf@P};9⍔cJ;9Ro:U2XBĒ+P )AupU/P@1 `9$":7%Q+#82b˅O%~ o^YvȒ_8/ؗD| 90tK~vDiϢl$-Pxk\XW$V^ÜiHMAO7:sR~(~ H1lj:)Tq 9ܨ-ءɅZ#-a̎rboa[*je7~.p>-YΉuAg0 :/=0]D@7⾓V*\(_8رAƆ KCMga> 1nvlm$9كX%w}#q`B<.^k[A_[srL2 D3 vZ(mְBJ髑¿-Dkδ5hq|m#zhmضnv[^~P{G&#uO pW}|R$;#߇;ϗkχN p :uHK>01P;Mk["V<*j0UDwx" %c Lk7@!?[m$ KID<]zD(Is/CoY}z \{ԝ>^0=TL.%҉ddvL\ϕ@Pi; 6@l"=_.~*a4R0 NmL;Qc/7TM]:Oe f@*'w\ߘz^n Ǟ$~ѓFb2rr"v٘:E g'q1rF6EkIT>Е_ۘ{WUa G/m~'䞠Ri(8,ES1"Ɵ @(=~X. e36\ YۑS m@KtN."P7-t9R=A<"36#rKAs= \sG;r A2 b6( =9 `̌^ xNr X?瀔w j:FUIENDB`qterm-0.7.3/src/pic/tabpad.png000066400000000000000000000143641332762052600161720ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~IDATxyXǿhu^[sTlQ@qDFddGAD2sCQaq\wQ9TBxM 3Љr.gs}|IW~VЪVZ @ZhU+jUV QuTOn߻uLx7AdeTVm"6"f 8L&T Ћ.LśGr㢡Ǘ$t 5@SAxDxOAޟL %y}_ŲW:p=,id f?Aޙ/UY"C,+t<'lwS" y ,4UP|j_ ޿curV%r8Ϋ<ϙ_p֌ ` KAU h$ڐ" pߑUykKX[;x&WxEEnϙDzƆa}ujԓ AGūa>LS?M%y ݋";xHXaɜͰ~*`ҽNq] Q9ovgy/wGXg˸ /h+= O$wC{BK$O7Yw^n` ~*K~ir|s1hjG|p@Z"=/L'+ƳtkKxzp\3&)>VJDsb˓)MX8aXayklxtubY+tg呇 8+Jɕ̘mzyu+7 'gOܯ>O827ÚRMQ}8t? @ǥ^/͎2&7Ú%[Y+JVi=%r^?䮵+ؕnuk ˅'v:<9mCU%y7<[_}1& Ӟ+TۧDzԋv8pW?112dӵF8ƫΌ <'݊/ nj4syN,?ƺ>z]W7EٳGiz:+?d5y+gm^iɥIh}(`Sj@ @cPdNf#yz]x!TcbA7VzmUTHxE,Ij n\gmEp=- &Z7VC%?T¥` '~=l[>Ev<#.,/rKu“w/zmU]+vDqgx ZmxVJTКkKXi$,)gh}bDJ `)snvoYbv< Y^oz̏mjkjMi\4EnY6@z<C$FIճK`? QH } b^n#UJӻ[}|ftSUi6AJ0TbCg#x_ژwP/M h/AO\r٦[hJuBG.VLmChj&]d~# E4/@4L */aS-Ol u{`bQf*HؘƄ4&_̘HO1#"$ f)/U#vffee:}6@DOÄL,xTiA4@PH!ASLL| _W'=0 әꞠ-D8* D,0IRƟ'=Ο5$E[Q)wbJ~^Jx QscTظXiLXpNz6.0{"He$/G<'pXxfufvsb 9`u앖kLEJjfא;CL>{M,$ }OI8݅ilP7OK a S߅tG5HZ ~j*WgIGuE @7p^Aש!4KW.nmT*/]o,>DL( -gNmx_unz5br=ߙ_ǝɶSʈ/EvLF8-%\V>~!|vIg"\W&**x$ $WDru*O/B!?'fya师] 8@ni, HZcqID_V|lqv Sa8<N,Ԁ@j ۸n0Ռw"uQ|k:a;rWg5Ӑ4(hɾ>a|oݝqv`PPU`+S))0<(ݜh|v!{ջm+V9,'-VQMNU{: nhg4E?&(2!c~Ȉ}ѓa֑&};  `yfH0 @RSԏ]Fi-b\LJDTbbQ4&E#PT+Q@8?|o-"1 B8-' kUoڹ !o=>?=)7YGہfߪ[ \)/!\BϵpZ.@;D8 D" _L+e-SĄa^Ūmm> J)f|U{f%em`eY֏L4pC&cN#1tE߉؅?lF?-%{h? ~q*q~۸5,/tHeY3^3 bbw6~=jXgH#Ί5B 8=/XYwښwM RoL**+78bBVt~{>,K-OĄcKd7n {RΘ34y:>V 4`Yuٿ RssnNLOYF MQ K`nCЈ=maxe]>]AH 85uS4PQ*qKD_Tݶb<,\5hoШն3pݢͰfQg +f1e/-K ~A6n~P"Zrnm~}2y or~ȝDzp.ɾsa|"'B4|^Ry_qǰ X%Tk <7f-{'!lRq7b~;5hu>gVd O~'w9pW%`_.I4)?V*]LW5AƍN0V+/&qw#7n,{լ!K+aݕOx'sv;k8OG[H#gnƍ;aP8-jӾۆJh-߳- Fmy{7_OehƍGg.kw,xgx!z /ֻ/~n@}O ڸs_-&- eh8`-8B̰x5ob:8E1їJ[h ʦd"P(Rm& (j Rm[:ĊM$QDDùp^0sgɽ's~ߙs5r  '(ƍ_OۛޭN_f<X\޲'P!z ޵oWwS_vi%gFhE0m C۸pMlmЫ w&1O&6n.ب(Al+@%(El-@ q P9 @  N*@@Bu 8[޻|Ss}_.Gv?W/^M cm<ߴ=`aKd"cn򊆓:ϚjWJY׸{@Vf6?Mrؔ}tHF=ϩvGՓ4zB3tm{a6Qe& s9M]A{VI'TO/mV$=i>J/"T)2YK#M2ڹrS\\N+}ƅ@hF] ߛǼRQzM1d V%XCΈO(%ʅ](jz> ) .CUyZ!GdtG6Σm~),`%GP^J嬡cZw:~ăNzʺ"f6^JFB3kLJؾv.]7u%Y%6ݸn+ uU~M囚[ttO#r|=>zӸ%I˻cZG7)׽mCmYH^f@xW.R]M.b gLk0? u(f,tH/]hJ o $ΝfS(LU"ࣞK}W)sԒ88(QF\)P'tۏ?ۙ"j8@͚hS$kCPA+BhBZ$5V"z4bd"@hzYS25) _v @&41+2M#g MQhh2MJ M@5HȺRs'R7KXhBA~ (4yDƭ aVmyZm{۸q+C6nvMNP2q:2dnLf,2qKfI`gVFڸ%Gq+KyMRpmIENDB`qterm-0.7.3/src/pic/tabpad_favorite.png000066400000000000000000000174051332762052600200700ustar00rootroot00000000000000PNG  IHDR>abKGDIDATxye?v޳e'@"A @(4D xz^T'EP4,! L>=wuU?gg2I}zo~ eY> q/`? c?q'>DZ8`~O}T_0H']zNM96lltfݼk Aܿ '!@MT:O:䯮&1ЎieY7,@A0>:ݛ%5HtS~=J[ I,#Ik kP_Hٯ -d;0_f`0L9dJ`ё3{1(({ Ay~mX$Ir0]QHKgzr büfE"O&P! A2?'bkAEAQLWL-$dy+HA/_%̣;;g! W*'V%`&a -3`,簕D4 MӐ$ IG# ;@7 8 J*(lHӟaWwX_>u1%AE!I&tDbxk TUEUiLM"brCVhm;SteJ=@"WrnN"v3~I #ŀ ?:`0 Ԟ`iٰ@;h7d0a;{['ѕfAi8`с44X$x˒G", Ŗ~c%ts kd%1s6HWo o$Z .x %+IOͅXG0DYDU%w?Ӳ]7\A*ujcQa"JXEhe?|N_ 7S!!Im՛3͛;195V ¨i30}Ƒ^d,%ٷGK@(V u.Ө*:8ݷ{VYAWǓd:$:{3ܕmg[:0܋w0YOe;@3i,Q% Ȓ@$#Tw{ {xh,YN݆w('@WhӠH`گo4@gOؕr5蛇aXzNZV4|> r4M{زL2X\t %QDto/8~]ױ_,Wz@!׺1>ٓf{GΞt[j+f}ڝD"a|>>00 Ldƌ1E+`Ρe["+E?嵭qt*MvzO @UG}Jɶ=}9:{lHowGkZ r+}E ill`0H B0H44eK1:a0`,^gO_KRtuu( @MӦ^*v25wRhh4JCCCy8]IHeYnf0y4}lH֍8,^%. v<(\daߗ>N744F]6{e4EMHDp16xvJsF">J!I  B466H$!܆Vձ`3t]4 Lcjgxgr[(B0$DKK pP(4J5c&TUus±k"u|>¬`b!XFO gw {/㳖iaՂa2uw9NJ_WPs*B`*WߖFQtdyD'B.ug.g l*냤R)$aIZ{*AxFy E{ z'zpq $PQr_r1z;xŗ j#J-Di9FꆟâR|VEUO9*nIⰻG.nk+OcȨA~Xrɣb4_ YkUa'BT?NmXŊfz*.@Q#^1*" `_D{|,'=8Q""ǹ+8En#W%X@47Z|Z@ʹU|ISƹbhdx3\lMPaK_!#w|y{'c2Rki6.=T+d:i7E{67E4Fμ $9Qz@V)+>a98 />}aq(c:Z{t;2ǐU ̗d?'=j9$x|/pڗ7˦!~ s(* B}.6$Kk=˲45^7K ɃSx!0^1X@zZ%q7^| $vA= [Ol_=U,|A}PED~ }?~\6wQUi'ެ&D?nY@], 8.mDdtP1r9Dlݖxd{>w.\MZ5vKe/'_zUcЁ?x3\L vry\$-D#Y;( $5yD A m/b+3,;.@g.3|炣xYV5%Mqc7ƿ]߽6}m`ة#8-&ލ؂U|RI4Sdv[CyrFrGn3Y9"bw @KMd]۟5nj)e G|Ee׶Ӟ7Q-굟PFC9aQxHƍ$ +[XnWiij a(>uܜ'T:[m r D2hvC+B˰qt1e^E/A֘)Y +%1>@v':7qlphϯe͙t)J[ôd dmsDpni\qr;n", (F$$Pdۉ4K ~Ԏ ku( [!l=_)^TwPEsW`qoےe'( B/*FD/XGp8L8f̙&82ΜAkKXm-NF %ai@~nnJ74e܎Suo\ ׏wa^24sjaVD.+& 4FT,2$ds&-MaS1Ap̝;@ @ +q=bv'W CDdG2Jݝ./.G{5pb #ovؓTLTƔqrF, (m_PUV9D2 N9&nx2 5E11M Z۶Hq;L0T(Y=Ɏ,^:` ˃q+ M!E3-T *("> <C} qGs4F8CIz@|Тvw:d2n0jEsf 혦5/q+0 QM0 ag %^1<6Yfƒq) u[Sهȗ5Ǒq{=8:iB2n9!#QMyݞ_'I"Tq3pD$sĺ{iv<%9]O'ɸtf JU_ɸɉ|g6F/EYSMvZ <#X2n+&$Hid~ʺq>2}kUb:}0@GAEMW܌q<0 K8O}e7yw2 D14Oe gqh !fTW2l"(wtnMze}r2~jsMLBWMN5aP/QO2k;kvTX kZ -˸H}D5~O}Ua56mbÆ lxg} -_ի S}S: H&wOn>DžDVdբ^<_>r1k֬q'T^^~c*6 xǸܵ]PeסI4ã6kc^I ȧ~7S7hÂ>[!31f3@PtLF%v pwZN{ 'gҋG?ctttpY#co~slSMp1"k}ד=DU 0QwJ8fgov_=օkҙ;AQMO{]qK|Ú Txxf_o N81|uL̔AL8--MӪ ,*ٜb®]~N]u٧ϳ'f*"賓?8V*K).Qq‘s􎗸5»~_A^Gy 泽J8|QgOswuuuqso4<Q(UNy,=-zuI6'/'N9\H7n0ΜI4%m뢀C?bj?&'*9nyUɺFfi%it-Q*TSX}y Uލ47~X:hv٘m:4Q BV]DtR]_xvH-[[GO 6{11Z PM+L^w-ʄzFApJF]t89t]o*e+>BOG LUO \n(` |{%DQko V 'cv0Z*OU:!RJDCK冻^'3TCmq²% v$D?AÇ&HDYSb&5lG[Ix" f"*c 08xa#6۫^Vah2W|02P§ ,XecY`7ÂFIbLcGCTs[pɇͱ^u f,xa/ڵ, dҙN`b'] 7ˮt] |x>Ы;>}u}~y^7Hu@DZӴ+Oyk߷3x 3[ϨX ={4-mݵr29 _V`Hmq6Y88oRg#-0oWbdVeWPyd!D_6v&{Dʩ(TRUPUSN~^\! 1/lpA`X9;^9SOFNRj]ȣ╿?z`]s 79DOZ(.ܫ{Jg5k6#B  NvW~뮾wRQn{!_w?O#[ZZhnnvq9s,Mj:e[UU% \v *׌ڜn<6-i*Q9>ʹňb)S8f!RPZYB U93x-y0AxDvEQIb1hhhp JfZ[ PZ>VUUn Cr\Șpfg^Q#wE%\MMMJ{Jrek8(5wqCEdgp ɍMR(n#E4'C\l'+}u^h"#SyBIԷy >d;ˏnӵ)/CH8?YpP률+W3.?N1;kY.n]#Vآ#7ǁ+ IX=s?Ǯ'u霤t,#]WKQZ9 ON1sw?M5kV:BEx2+ >фIlG?tW7S?!q>~s,؍,\=43{Z1#AIu&; stKNG̻ 8&ͲLűy>;o AU|<9FRQ8[_\i6٩YMx-kb~`{=#@7a1?sr2j&3r uҝdZc`藣7 61qc1{dg``;Rc*06:6Žkx)1(Om'j|)1(Kkis;N"~Tp{ q'Iik~Te-@=ɸeq{6Q@ȸUq{1-@ɸEqgzq('v^aL P2} d^`7eɸkfԛ{_HQ`E7bdhk9ʩIENDB`qterm-0.7.3/src/po/000077500000000000000000000000001332762052600140645ustar00rootroot00000000000000qterm-0.7.3/src/po/CMakeLists.txt000066400000000000000000000004721332762052600166270ustar00rootroot00000000000000file(GLOB TRANSLATIONS_FILES *.ts) if(QT5) qt5_add_translation(QM_FILES ${TRANSLATIONS_FILES}) else(QT5) qt4_add_translation(QM_FILES ${TRANSLATIONS_FILES}) endif(QT5) add_custom_target(translations_target DEPENDS ${QM_FILES}) if (NOT APPLE) install(FILES ${QM_FILES} DESTINATION share/qterm/po) endif() qterm-0.7.3/src/po/qterm_chs.ts000066400000000000000000001567271332762052600164430ustar00rootroot00000000000000 AssistantClient Unable to send request: Assistant is not responding. 无法发送请求:Assistant 无反应。 The binary '%1' does not exist. 程序 '%1' 不存在。 Unable to launch assistant (%1). 无法启动 assistant (%1)。 Dialog Send string with delay 延迟发送字符串 String: 字符串: Repeating: 重复次数: Delay(s): 延迟(秒): Frame QTerm &File 文件(&F) &View 视图(&V) Language 语言 Theme 主题 Toolbar 工具栏 Scrollbar 滚动条 &Edit 编辑(&E) Paste w Color 带颜色粘贴 Clipboard Conversion 剪贴板繁简转换 &BBS &Options 选项(&O) &Script 脚本(&S) &Help 帮助(&H) &Window 窗口(&W) Terminal 终端 Main Key Setup 设置按键 ANSI Edit ANSI 编辑 Quick Login 快速登录 This provides an express way to connect. 提供快速连接功能。 &AddressBook 地址簿(&A) New ANSI 新建 ANSI Open ANSI 打开 ANSI &Quit 退出(&Q) Quit 退出 This will close all windows. You will be prompted to confirm disconnent active sessions or save modified files. 关闭所有窗口,程序将会请求确认断开所有活动回话以及保存被修改的文件。 Save 保存 Save As... 保存为... New &Console 新建终端(&C) &Copy 复制(&C) &Paste 粘贴(&P) Copy w Color 带颜色拷贝 Paste w Wordwrap 自动换行粘贴 Rectangle Selection 矩形选择 &Auto Copy 自动拷贝(&A) Symbols 符号 &Fullscreen 全屏显示[&F] Default Session Setting 缺省会话设置 &Preference 偏好(&P) &Copy Article 复制文章(&C) &Auto Reply 自动回复(&A) Support &Mouse 支持鼠标(&M) &Beep on message 收到消息时 beep 提示(&B) Configure Shortcuts 配置快捷方式 &View Message 查看消息(&V) Run... 运行... Stop 停止 Contents... 内容... About QTerm 关于 QTerm About Qt 关于 Qt Print 打印 Print Preview 打印预览 Close 关闭 Debug Console 调试终端 What's this? 这是什么? QTerm Online QTerm 在线 Configure Toolbars 配置工具条 Cu&t 剪切(&T) UI Font 界面字体 Statusbar 状态栏 Show/Hide Statusbar 显示/隐藏状态栏 Article Manager 文章管理器 Refresh 刷新 Reload Script 重新加载脚本 Image Viewer 图像浏览器 None CHS -> CHT 简体中文 -> 繁体中文 CHT -> CHS 繁体中文 -> 简体中文 English 英文 ESC ESC [ Ctrl+U [ Custom ... 自定义... Simplified Chinese 简体中文 Traditional Chinese 繁體中文 Disconnect 断开连接 Connect 连接 Hide 隐藏 Hide Scrollbar 隐藏滚动条 Left Right Current Session Setting 当前连接设置 MenuBar 菜单条 Boss Color 老板色 Underline 下划线 Blink 闪烁 &Favorites Add To Favorites 添加到 Favorites Manage Favorites ... 管理 Favorites... Anti-&Idle 防发呆(&I) QTerm::Canvas Choose a filename to save under 选择保存文件名 Failed to save file 保存文件失败 Cant save file, maybe format not supported 无法保存文件,可能是不支持的格式 Original Size 原始大小 Fit Window 适应窗口大小 Zoom In 放大 Zoom Out 缩小 Fullscreen 全屏显示 Rotate CW 90 顺时针旋转90 Rotate CCW 90 逆时针旋转90 Save As... 保存为... Copy To... 拷贝到... Silent Copy 自动拷贝 Delete 删除 Exit 退出 QTerm::CloseDialog QTerm will quit in %1 seconds QTerm 将在 %1 秒后退出 QTerm::DomModel Name 名称 QTerm::Frame Print Document 打印文档 &Exit 退出(&E) &Hide 隐藏(&H) &Cascade 重叠(&C) &Tile 平铺(&T) &Main Window 主窗口(&M) &Show 显示(&S) &About 关于(&A) Assistant Switch to window %1 切换到窗口 %1 Previous window 上一个窗口 Next window 下一个窗口 QTerm::Global Choose a file to save under 选择保存文件名 File exists. Overwrite? 文件已存在,覆盖吗? Yes No imported sites 导入站点 QTerm::Http Download Error 下载错误 Failed to download file 下载文件失败 QTerm::ImageFileModel Name: %1 Type: %2 Size: %3 KB 名称:%1 类型:%2 大小:%3 KB QTerm::ProgressBar Done 完成 Aborted 已终止 Aborting... 正在终止... QTerm::SSHInfo New Host Key 新的主机密钥 Host Key Mismatch 主机密钥不符 Update Host Key 更新主机密钥 Are you sure you want to update the host key? 你确定要你要更新主机密钥吗? No host key is found for the server. Do you want to add the host key and continue? 没有找到主机密钥,你要添加主机密钥然后继续吗? HOST KEY DOES NOT MATCH! THIS COULD BE A MITM ATTACK! DO YOU REALLY WANT TO CONTINUE? IF YOU DO NOT KNOW WHAT YOU ARE DOING, CHOOSE NO! 主机密钥不符。可能是中间人攻击。你真的要继续吗?如果你不知道自己在干什么,选否! QTerm::ShortcutsDialog Assign Shortcut 设置快捷方式 shortcut %1 is already assigned to %2 Do you want to clear and reassign? 快捷方式 %1 已经设置为 %2 你确定要重新设置吗? QTerm::StatusBar Abort all background-operations 终止所有后台操作 Show progress detail 显示进度细节 Multiple background-tasks running 多个后台任务运行中 Aborting all jobs... 正在终止所有任务... QTerm::Window Not Connected 未连接 Preview image 浏览图片 Open link 打开连接 Copy link address 拷贝连接 Open URL 打开连接 resolving host name 正在解析主机名 host found 找到主机 host not found 找不到主机 connecting... 正在连接... connected 已经连接 connected to proxy 连接到代理服务器 proxy authentation 代理验证 proxy failed 代理错误 connection refused 连接被拒绝 error when reading from server 接收数据出错 connection closed 连接关闭 connection close finished 连接关闭完成 connect to host via proxy 通过代理服务器连接 error in gethostbyname 无法解析主机名 error in startup winsock 初始化Winsock出错 error in connection 连接发生错误 error in proxy 代理服务器错误 SSH support is not compiled, QTerm can only use Telnet! 没有编译 SSH 支持,QTerm 只能使用 Telnet 连接! Connected,Do you still want to exit? 已连接,确定退出吗? You have messages 你有新消息 URL: 连接: IP database not found 找不到 IP 数据库 You need to enable the script engine debugger to use this feature. Please recompile QTerm with the debugger enabled (need Qt 4.5 or newer version) 你需要启用脚本引擎调试器来使用这个功能,请重新编译 QTerm 并启用调试器 (需要 Qt 4.5 或更高版本) QTerm::addrDialog Cancel 取消 OK 确定 Setting 设置 AddressBook 地址簿 Setting changed, do you want to save? 设置已更改,你要保存吗? SSH support is not compiled, check your OpenSSL and try to recompile QTerm 没有编译 SSH 支持,检查你是否安装了 OPenSSL 并尝试重新编译 QTerm New Folder 新建目录 New Site 新建站点 Remove 删除 Add Favorite 添加到 Favorate Clear Favorite 清除 Favorite Choose a script file 选择脚本文件 Choose private key file 选择密钥文件 Telnet Telnet SSH SSH BBS BBS *Nix *Nix No Conversion 不转换 Simplified Chinese to Traditional Chinese 简体转繁体 Traditional Chinese to Simplified Chinese 繁体转简体 Block 块状 Underline 下划线 I Type I 型 Reverse 反显 Custom Color 自定义颜色 None Wingate SOCKS4 SOCKS5 HTTP QTerm::quickDialog Address can not be blank. 地址不能为空. QTerm::soundConf No such output driver 没有这个输出驱动 ARTS is not supported by this instance of QTerm, Check whether your ARTS support is enabled in compile time. 不支持 ARTS. 请检查编译时有无 ARTS 支持. &OK 确定(&O) ESD is not supported by this instance of QTerm, Check whether your ESD support is enabled in compile time 不支持 ESD, 请检查编译时有无 ESD 支持 No sound file 没有声音文件 You have to select a file to test the sound 你需要选择一个文件来测试声音 &Ok 确定(&O) No player 没有播放器 You have to specify an external player 你需要设置一个外部播放器 QTermImage Image Viewer 外置图片浏览器 SSHLogin Login 登录 Please enter your username and password 请输入用户名和密码 UserName: 用户名: Password: 密码: OK 确定 Cancel 取消 ShortcutsDialog Shortcuts Dialog 快捷方式对话框 Actions 动作 Shortcuts 快捷方式 Cancel 取消 Default 默认值 OK 确定 Press any key here: 在此按任意键: Assign 设置 Remove 清除 ToolbarDialog Configure Toolbars 配置工具条 OK 确定 Icon Only 仅图标 Text Only 仅文本 Text beside Icon 文本在图标旁 Text below Icon 文本在图标下 Text Position: 文本位置: Icon Size: 图标大小: Current Actions: 当前动作: ToolBar: 工具栏: Default 默认值 Available Actions: 可用动作: 16x16 22x22 32x32 48x48 < ^ V > aboutDialog About QTerm 关于 QTerm About 关于 Authors 作者 Credits 致谢 Close 关闭 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">QTerm 0.5.12 (QT 4.8 based)</span></p></body></html> QTerm --- BBS Client based on Qt (C) 2001-2016, The QTerm Developers http://www.qterm.org kingson xiaokiangwang@yahoo.com fiasco yinshouyi@peoplemail.com.cn hooey hephooey@fastmail.fm addrDialog AddressBook 地址簿 General 一般选项 Address: 地址: Type: 类型: Name: 名称: Port: 端口: BBS Encoding: BBS 编码: Text Conversion: 繁简转换: Protocol: 协议: Load Control Script: 加载控制脚本: System Script: 系统脚本: Browse... 浏览... General: 一般选项: Advanced Settings: 高级设置: Display 显示 ANSI Color ANSI 颜色 Always Highlight 总是高亮 Cursor Type: 光标类型: Menu Type: 菜单条类型: Color... 颜色... Text and Color: 文本与颜色: Menu and Cursor: 菜单与光标: Configure... 配置... Terminal 终端 Key Type: 键盘类型: Term Type: 终端类型: Escape string (i.e. *[ ): 转义序列(即 *[): Rows: 行数: Columns: 列数: Scroll Lines: 滚动行数: Terminal Settings: 终端设置: Max Idle Time (sec): 最长发呆时间: Key to reply message: 回复消息按键: Auto Reply Message: 自动回复消息: Anti-idle String: 反发呆字符串: Pre-login: 预登录命令: Password: 密码: User: 用户名: Post-login: 登录后命令: Auto Reply 自动回复 Auto Login 自动登录 Internal Settings: 内部设置: Misc 其它 Authentication 认证 Auto Reconnect 自动重新连接 Proxy: 代理: Connection: 连接: Reset 重置 Apply 应用 Connect 连接 Close 关闭 General Font: 通用字体: Font Size: 字体大小: ASCII Font: ASCII 字体: Color Scheme: 配色方案: BBS SSH Opacity: 不透明度: 100 Blink cursor 闪烁光标 Reconnect Delay (s): 重新连接延迟(s): Username: 用户名: Password Authentication: 密码认证: Private Key File: 私钥文件: Passphrase: not sure how to differentiate between password and passphrase 密码: Host Verification: 主机认证: Server Host Key: 主机密钥: Public Key Authentication (RSA or DSA): 公钥认证 (RSA 或者 DSA): Adjust Font Size Automatically 自动调整字体大小 articleDialog Article Viewer 文章浏览器 Close 关闭 Save... 保存为... closeDialog Dialog The following sites are connected: 已经连接到下列站点: Quit 退出 Cancel 取消 console Execute Code 执行代码 QTerm Script Console QTerm 脚本终端 The QTerm Script Console allows you to easily execute JavaScript with access to all functions and methods you would have in an QTerm script.Information on scripting for QTerm can be found in the doc directory of the QTerm source code. Execute code: CTRL-Enter Back in code history: Page Up Forward in code history: Page Down QTerm 脚本终端允许你轻松运行 JavaScript 脚本并调用所有你需要的 QTerm 函数和方法。 QTerm 脚本的相关文档可以在 QTerm 的源代码的 doc 目录下找到。 执行代码:CTRL-Enter 在代码历史中前进:Page Up 在代码历史中后退:Page Down Script Console... 脚本终端... google No text is selected to search for 没有文字被选中 Search Selected Text in Google 用 Google 搜索选中文字 keyDialog Key Setup 设置按键 Add 添加 Delete 删除 Update 更新 Close 关闭 Define 定义 Script 脚本 Program 程序 Enter 回车 Right Left Down General Keys 常用键 Up Browse... 浏览... Key 键值 Name 名称 msgDialog Messages Viewer 消息查看器 OK 确定 prefDialog Preference 偏好 Cancel 取消 OK 确定 Internal Settings 内部设置 Alternative Mouse Wheel Control 特殊鼠标滚轮 Anti-Aliasing 反锯齿 Warn When Exit Connected 在关闭连接的时候警告 Show System Tray Icon 显示系统托盘图标 Paste Word-Wrap at: 粘贴时自动换行: Blink Tab When Receive Message 收到消息闪烁 Tab Clear ZModem and HTTP directory When Exit 退出时清空 ZModem 和 HTTP 目录 Detect URL When Mouse Move 鼠标检测连接 Input Conversion: 输入繁简转换: No Conversion 不转换 Simplified to Traditional 简体转繁体 Traditional to Simplified 繁体转简体 Miscellaneous Options: 其他选项: External Settings 外部设置 Image Viewer: 外置图片浏览器: Choose... 选择... HTTP Browser: HTTP 浏览器: Browse... 浏览... Sound Player: 声音播放器: External Applications: 外部程序: HTTP Directory: HTTP 目录: Zmodem Directory: Zmodem 目录: Directories and Files: 目录和文件: Sound File: 声音文件: Reset 重置 Cursor Size: 鼠标光标大小: 16 32 48 64 quickDialog Quick Login 快速登录 Connect 连接 Close 关闭 Delete 删除 History: 历史记录: Address: 地址: Advanced... 高级选项... Add 添加 Port: 端口: Protocol: 协议: Telnet SSH schemeDialog Scheme Editor 配色编辑器 Cancel 取消 OK 确定 Title: 主题: Add 添加 Delete 删除 Normal 正常 Bright 高亮 Color 1: 颜色 1: Color 2: 颜色 2: Color 3: 颜色 3: Color 4: 颜色 4: Color 5: 颜色 5: Color 6: 颜色 6: Color 7: 颜色 7: Color 8: 颜色 8: Reset 重置 senddelay Send String With Delay... 延迟发送字符串... smth System script loaded 系统脚本加载成功 No article to download 没有文章可下载 About This Script 关于当前脚本 You are using smth.js in QTerm %1 (C) 2009-2010 QTerm Developers 你当前使用 QTerm %1 中的 smth.js 脚本 (C) 2009-2010 QTerm Developers soundConf Configure 配置 Sound File: 声音文件: Select... 选择... External Program: 外部程序: OK 确定 Cancel 取消 Play With: 用此播放: External 外部程序 Internal 内置 ARTS Test ESD zmodemDialog Zmodem Status Zmodem 状态 Cancel 取消 textLabel1 textLabel2 qterm-0.7.3/src/po/qterm_cht.ts000066400000000000000000002544641332762052600164410ustar00rootroot00000000000000 AssistantClient Unable to send request: Assistant is not responding. The binary '%1' does not exist. Unable to launch assistant (%1). Dialog Send string with delay String: Repeating: Delay(s): Frame QTerm &File &View Language Theme Toolbar Scrollbar &Edit Paste w Color Clipboard Conversion &Favorites &BBS &Options &Script &Help &Window Terminal Main Key Setup ANSI Edit Quick Login This provides an express way to connect. &AddressBook New ANSI Open ANSI &Quit Quit This will close all windows. You will be prompted to confirm disconnent active sessions or save modified files. Save Save As... New &Console &Copy &Paste Copy w Color Paste w Wordwrap Rectangle Selection &Auto Copy Symbols &Fullscreen Default Session Setting &Preference Add To Favorites Manage Favorites ... &Copy Article &Auto Reply Support &Mouse &Beep on message Configure Shortcuts &View Message Run... Stop Contents... About QTerm About Qt Print Print Preview Close Anti-&Idle Debug Console What's this? QTerm Online Configure Toolbars Cu&t UI Font Statusbar Show/Hide Statusbar Article Manager Refresh Reload Script Image Viewer None CHS -> CHT CHT -> CHS English ESC ESC [ Ctrl+U [ Custom ... Simplified Chinese Traditional Chinese Disconnect Connect Hide Hide Scrollbar Left Right Current Session Setting MenuBar Boss Color Underline Blink QTerm::Canvas Original Size Fit Window Zoom In Zoom Out Fullscreen Rotate CW 90 Rotate CCW 90 Save As... Copy To... Silent Copy Delete Exit Choose a filename to save under Failed to save file Cant save file, maybe format not supported QTerm::CloseDialog QTerm will quit in %1 seconds QTerm::DomModel Name QTerm::Frame Assistant &Cascade &Tile &Main Window Switch to window %1 Previous window Next window Print Document &Exit &Hide &Show &About QTerm::Global imported sites Choose a file to save under File exists. Overwrite? Yes No QTerm::Http Download Error Failed to download file QTerm::ImageFileModel Name: %1 Type: %2 Size: %3 KB QTerm::ProgressBar Done Aborted Aborting... QTerm::SSHInfo New Host Key No host key is found for the server. Do you want to add the host key and continue? Host Key Mismatch HOST KEY DOES NOT MATCH! THIS COULD BE A MITM ATTACK! DO YOU REALLY WANT TO CONTINUE? IF YOU DO NOT KNOW WHAT YOU ARE DOING, CHOOSE NO! Update Host Key Are you sure you want to update the host key? QTerm::ShortcutsDialog Assign Shortcut shortcut %1 is already assigned to %2 Do you want to clear and reassign? QTerm::StatusBar Abort all background-operations Show progress detail Multiple background-tasks running Aborting all jobs... QTerm::Window SSH support is not compiled, QTerm can only use Telnet! Not Connected Preview image Open link Copy link address Connected,Do you still want to exit? Open URL URL: resolving host name host found host not found connecting... connected connected to proxy proxy authentation proxy failed connection refused error when reading from server connection closed connection close finished connect to host via proxy error in gethostbyname error in startup winsock error in connection error in proxy IP database not found You need to enable the script engine debugger to use this feature. Please recompile QTerm with the debugger enabled (need Qt 4.5 or newer version) You have messages QTerm::addrDialog Cancel OK Setting AddressBook Telnet SSH BBS *Nix No Conversion Simplified Chinese to Traditional Chinese Traditional Chinese to Simplified Chinese Block Underline I Type Reverse Custom Color None Wingate SOCKS4 SOCKS5 HTTP New Folder New Site Remove Add Favorite Clear Favorite Setting changed, do you want to save? SSH support is not compiled, check your OpenSSL and try to recompile QTerm Choose a script file Choose private key file QTerm::quickDialog Address can not be blank. QTerm::soundConf No such output driver ARTS is not supported by this instance of QTerm, Check whether your ARTS support is enabled in compile time. &OK ESD is not supported by this instance of QTerm, Check whether your ESD support is enabled in compile time No sound file You have to select a file to test the sound &Ok No player You have to specify an external player QTermImage Image Viewer SSHLogin Login Please enter your username and password UserName: Password: OK Cancel ShortcutsDialog Shortcuts Dialog Actions Shortcuts Cancel Default OK Press any key here: Assign Remove ToolbarDialog Configure Toolbars OK Icon Only Text Only Text beside Icon Text below Icon 16x16 22x22 32x32 48x48 Text Position: Icon Size: Current Actions: ToolBar: Default < ^ V > Available Actions: aboutDialog About QTerm About QTerm --- BBS Client based on Qt (C) 2001-2016, The QTerm Developers http://www.qterm.org kingson xiaokiangwang@yahoo.com fiasco yinshouyi@peoplemail.com.cn hooey hephooey@fastmail.fm <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">QTerm 0.5.12 (QT 4.8 based)</span></p></body></html> Authors Credits Close addrDialog AddressBook General Address: Type: Name: BBS Port: BBS Encoding: Text Conversion: SSH Protocol: Load Control Script: System Script: Browse... General: Advanced Settings: Display ANSI Color Always Highlight Cursor Type: Menu Type: Color... Text and Color: Menu and Cursor: ASCII Font: General Font: Font Size: Color Scheme: Configure... Terminal Key Type: Term Type: Escape string (i.e. *[ ): Rows: Columns: Scroll Lines: Terminal Settings: Max Idle Time (sec): Key to reply message: Auto Reply Message: Anti-idle String: Pre-login: Password: User: Post-login: Auto Reply Auto Login Blink cursor 100 Opacity: Internal Settings: Misc Authentication Auto Reconnect Proxy: Adjust Font Size Automatically Connection: Reconnect Delay (s): Username: Password Authentication: Public Key Authentication (RSA or DSA): Private Key File: Passphrase: Host Verification: Server Host Key: Reset Apply Connect Close articleDialog Article Viewer Close Save... closeDialog Dialog The following sites are connected: Quit Cancel console Execute Code QTerm Script Console The QTerm Script Console allows you to easily execute JavaScript with access to all functions and methods you would have in an QTerm script.Information on scripting for QTerm can be found in the doc directory of the QTerm source code. Execute code: CTRL-Enter Back in code history: Page Up Forward in code history: Page Down Script Console... google No text is selected to search for Search Selected Text in Google keyDialog Key Setup Add Delete Update Close Define Script Program Enter Right Left Down General Keys Up Browse... Key Name msgDialog Messages Viewer OK prefDialog Preference Cancel OK Internal Settings Alternative Mouse Wheel Control Anti-Aliasing Warn When Exit Connected Show System Tray Icon Paste Word-Wrap at: Blink Tab When Receive Message Clear ZModem and HTTP directory When Exit Detect URL When Mouse Move Input Conversion: No Conversion Simplified to Traditional Traditional to Simplified Miscellaneous Options: External Settings Image Viewer: Choose... HTTP Browser: Browse... Sound Player: External Applications: HTTP Directory: Zmodem Directory: Cursor Size: 16 32 48 64 Directories and Files: Sound File: Reset quickDialog Quick Login History: Address: Connect Close Advanced... Delete Add Port: Protocol: Telnet SSH schemeDialog Scheme Editor Title: Add Delete Cancel OK Normal Bright Color 1: Color 2: Color 3: Color 4: Color 5: Color 6: Color 7: Color 8: Reset senddelay Send String With Delay... smth System script loaded About This Script No article to download You are using smth.js in QTerm %1 (C) 2009-2010 QTerm Developers soundConf Configure Sound File: Select... External Program: OK Cancel Play With: ARTS Test External ESD Internal zmodemDialog Zmodem Status textLabel1 Cancel textLabel2 qterm-0.7.3/src/popupMessage.cpp000066400000000000000000000225441332762052600166310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * 2005 by Seb Ruiz * * * * Dissolve Mask (c) Kicker Authors kickertip.cpp, 2005/08/17 * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "popupMessage.h" //#include "debug.h" //#include //#include //#include // #include // #include // #include // #include // #include // #include // #include // #include //Added by qt3to4: #include #include #include #include #include #include #include #include #include #include namespace QTerm { PopupMessage::PopupMessage( QWidget *parent, QWidget *anchor, int timeout) : OverlayWidget( parent, anchor) , m_anchor( anchor ) , m_parent( parent ) , m_maskEffect( Slide ) , m_dissolveSize( 0 ) , m_dissolveDelta( -1 ) , m_offset( 0 ) , m_counter( 0 ) , m_stage( 1 ) , m_timeout( timeout ) , m_showCounter( true ) { setFrameStyle( QFrame::Panel | QFrame::Raised ); setFrameShape( QFrame::StyledPanel ); // overrideWindowFlags( Qt::WX11BypassWM ); QHBoxLayout *hbox; QLabel *label; QLabel *alabel; //KActiveLabel *alabel; m_layout = new QVBoxLayout( this );//, 9 /*margin*/, 6 /*spacing*/ ); m_layout->setMargin(9); m_layout->setSpacing(6); hbox = new QHBoxLayout; //( m_layout, 12 ); hbox->setMargin(12); m_layout->addLayout(hbox); hbox->addWidget( m_countdownFrame = new QFrame( this ));//, "counterVisual" ) ); m_countdownFrame->setObjectName( "counterVisual" ); m_countdownFrame->setFixedWidth( fontMetrics().width( "X" ) ); m_countdownFrame->setFrameStyle( QFrame::Plain | QFrame::Box ); QPalette tmp_palette; tmp_palette.setColor(m_countdownFrame->foregroundRole(), palette().color(QPalette::Window).dark()); m_countdownFrame->setPalette(tmp_palette); // m_countdownFrame->setPaletteForegroundColor( paletteBackgroundColor().dark() ); label = new QLabel( this );//, "image" ); label->setObjectName("image"); hbox->addWidget( label ); label->hide(); alabel = new QLabel( "Details of the tasks: ", this );//, "label"); alabel->setObjectName("label"); //alabel = new KActiveLabel( this, "label" ); //alabel->setTextFormat( Qt::RichText ); alabel->setSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::Preferred ); hbox->addWidget( alabel ); hbox = new QHBoxLayout; m_layout->addLayout(hbox); hbox->addItem( new QSpacerItem( 4, 4, QSizePolicy::Expanding, QSizePolicy::Preferred ) ); //FIXME: add icon QPushButton * tmp_button = new QPushButton( "Close", this ); tmp_button->setObjectName( "closeButton" ); hbox->addWidget( tmp_button );//, "closeButton" ) ); connect( findChild( "closeButton" ), SIGNAL(clicked()), SLOT(close()) ); } void PopupMessage::addWidget( QWidget *widget ) { m_layout->addWidget( widget ); adjustSize(); } void PopupMessage::showCloseButton( const bool show ) { findChild( "closeButton" )->setVisible( show ); adjustSize(); } void PopupMessage::showCounter( const bool show ) { m_showCounter = show; findChild( "counterVisual" )->setVisible( show ); adjustSize(); } void PopupMessage::setText( const QString &text ) { findChild( "label" )->setText( text ); adjustSize(); } void PopupMessage::setImage( const QString &location ) { findChild( "image" )->setPixmap( QPixmap( location ) ); adjustSize(); } //////////////////////////////////////////////////////////////////////// // Public Slots //////////////////////////////////////////////////////////////////////// void PopupMessage::close() //SLOT { m_stage = 3; killTimer( m_timerId ); m_timerId = startTimer( 6 ); } void PopupMessage::display() //SLOT { m_dissolveSize = 24; m_dissolveDelta = -1; if( m_maskEffect == Dissolve ) { // necessary to create the mask m_mask = QBitmap( width(), height() ); // make the mask empty and hence will not show widget with show() called below dissolveMask(); m_timerId = startTimer( 1000 / 30 ); } else { m_timerId = startTimer( 6 ); } show(); } //////////////////////////////////////////////////////////////////////// // Protected //////////////////////////////////////////////////////////////////////// void PopupMessage::timerEvent( QTimerEvent* ) { switch( m_maskEffect ) { case Plain: plainMask(); break; case Slide: slideMask(); break; case Dissolve: dissolveMask(); break; } } void PopupMessage::countDown() { if( !m_timeout ) { killTimer( m_timerId ); return; } QFrame *&h = m_countdownFrame; if( m_counter < h->height() - 3 ) QPainter( h ).fillRect( 2, 2, h->width() - 4, m_counter, palette().color(QPalette::Active,QPalette::Highlight) ); if( !testAttribute(Qt::WA_UnderMouse) ) m_counter++; if( m_counter > h->height() ) { m_stage = 3; killTimer( m_timerId ); m_timerId = startTimer( 6 ); } else { killTimer( m_timerId ); m_timerId = startTimer( m_timeout / h->height() ); } } void PopupMessage::dissolveMask() { if( m_stage == 1 ) { //repaint( false ); QPainter maskPainter(&m_mask); m_mask.fill(Qt::black); maskPainter.setBrush(Qt::white); maskPainter.setPen(Qt::white); maskPainter.drawRect( m_mask.rect() ); m_dissolveSize += m_dissolveDelta; if( m_dissolveSize > 0 ) { //maskPainter.setCompositionMode( Qt::EraseROP ); //FIXME: QRubberBand int x, y, s; const int size = 16; for (y = 0; y < height() + size; y += size) { x = width(); s = m_dissolveSize * x / 128; for ( ; x > size; x -= size, s -= 2 ) { if (s < 0) break; maskPainter.drawEllipse(x - s / 2, y - s / 2, s, s); } } } else if( m_dissolveSize < 0 ) { m_dissolveDelta = 1; killTimer( m_timerId ); if( m_timeout ) { m_timerId = startTimer( 40 ); m_stage = 2; } } setMask(m_mask); } else if ( m_stage == 2 ) { countDown(); } else { deleteLater(); } } void PopupMessage::plainMask() { switch( m_stage ) { case 1: // Raise killTimer( m_timerId ); if( m_timeout ) { m_timerId = startTimer( 40 ); m_stage = 2; } break; case 2: // Counter countDown(); break; case 3: // Lower/Remove deleteLater(); } } void PopupMessage::slideMask() { switch( m_stage ) { case 1: //raise move( 0, m_parent->y() - m_offset ); m_offset++; if( m_offset > height() ) { killTimer( m_timerId ); if( m_timeout ) { m_timerId = startTimer( 40 ); m_stage = 2; } } break; case 2: //fill in pause timer bar countDown(); break; case 3: //lower m_offset--; move( 0, m_parent->y() - m_offset ); if( m_offset < 0 ) deleteLater(); } } } //#include "popupMessage.moc" #include qterm-0.7.3/src/popupMessage.h000066400000000000000000000072551332762052600163000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * 2005 by Seb Ruiz * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ //WARNING this is not meant for use outside this unit! #ifndef QTERM_POPUPMESSAGE_H #define QTERM_POPUPMESSAGE_H #include "overlayWidget.h" // #include // #include // #include //Added by qt3to4: #include #include #include #include #include namespace QTerm { /** * @class PopupMessage * @short Widget that animates itself into a position relative to an anchor widget */ class PopupMessage : public OverlayWidget { Q_OBJECT public: /** * @param anchor : which widget to tie the popup widget to. * @param timeout : how long to wait before auto closing. A value of 0 means close * only on pressing the closeButton or close() is called. */ PopupMessage( QWidget *parent, QWidget *anchor, int timeout = 5000 /*milliseconds*/); enum MaskEffect { Plain, Slide, Dissolve }; void addWidget( QWidget *widget ); void showCloseButton( const bool show ); void showCounter( const bool show ); void setImage( const QString &location ); void setMaskEffect( const MaskEffect type ) { m_maskEffect = type; } void setText( const QString &text ); void setTimeout( const int time ) { m_timeout = time; } public slots: void close(); void display(); protected: void timerEvent( QTimerEvent* ); void countDown(); /** * @short Gradually show widget by dissolving from background */ void dissolveMask(); /** * @short instantly display widget */ void plainMask(); /** * @short animation to slide the widget into view */ void slideMask(); private: QVBoxLayout *m_layout; QFrame *m_countdownFrame; QWidget *m_anchor; QWidget *m_parent; QBitmap m_mask; MaskEffect m_maskEffect; int m_dissolveSize; int m_dissolveDelta; int m_offset; int m_counter; int m_stage; int m_timeout; int m_timerId; bool m_showCounter; }; } #endif qterm-0.7.3/src/popwidget.cpp000066400000000000000000000063251332762052600161620ustar00rootroot00000000000000/******************************************************************************* FILENAME: popwidget.cpp REVISION: 2003.1.13 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "popwidget.h" #include "qtermframe.h" #include "qtermglobal.h" #include #include #include #include #include #include #include namespace QTerm { popWidget::popWidget( Window *win, QWidget *parent, const char *name) : QWidget(parent) { setWindowFlags(Qt::WindowStaysOnTopHint|Qt::X11BypassWindowManagerHint|Qt::Tool); QPixmap pxm(":/pic/popwidget.png"); if(!pxm.isNull()) { resize(pxm.width(), pxm.height()); QPalette palette; palette.setBrush(backgroundRole(), QBrush(pxm)); setPalette(palette); //setBackgroundPixmap(pxm); } else { resize(200, 120); } label = new QLabel(this); label->setGeometry( QRect( 5, height()/3, width()-10, height()*2/3 ) ); label->setAlignment( Qt::AlignTop ); label->setWordWrap(true); if(!pxm.isNull()){ QPalette palette; palette.setBrush(label->backgroundRole(), QBrush(pxm)); label->setPalette(palette); // label->setBackgroundPixmap(pxm); } else { QPalette palette; palette.setColor(label->backgroundRole(), QColor(249,250,229)); label->setPalette(palette); //label->setBackgroundColor(QColor(249,250,229)); } //label->setBackgroundOrigin( ParentOrigin ); label->setFont(QFont(qApp->font().family(), 12)); pTimer = new QTimer(this); connect(pTimer, SIGNAL(timeout()), this, SLOT(showTimer())); nState = -1; nStep = 2; nInterval = 500/(height()/nStep); setFocusPolicy(Qt::NoFocus); window = win; hide(); } popWidget::~popWidget() { delete pTimer; } void popWidget::mousePressEvent(QMouseEvent * me) { QWidgetList list = QApplication::topLevelWidgets(); //((Frame *)qApp->mainWidget())->popupFocusIn(window); if(nState==1) { nState = 2; pTimer->setInterval(nInterval); } } void popWidget::popup() { pTimer->start(nInterval); nState = 0; QDesktopWidget * desktop = qApp->desktop(); QWidget * mainWidget = parentWidget(); rcDesktop = desktop->screenGeometry(desktop->screenNumber(mainWidget)); ptPos = QPoint(rcDesktop.x()+rcDesktop.width()-width()-5, rcDesktop.y()+rcDesktop.height()-5 ); move(ptPos); if(!isVisible()) show(); } void popWidget::setText(const QString& str) { label->setText(str); } void popWidget::showTimer() { switch(nState) { case 0: // popup if(ptPos.y()+height()+5>rcDesktop.height()) ptPos.setY( ptPos.y()- nStep ); else { nState = 1; pTimer->setInterval(5000); } break; case 1: // wait nState = 2; pTimer->setInterval(nInterval); break; case 2: // hiding if(ptPos.y()stop(); } break; default: break; } move(ptPos); } } #include qterm-0.7.3/src/popwidget.h000066400000000000000000000012331332762052600156200ustar00rootroot00000000000000#ifndef POPWIDGET_H #define POPWIDGET_H #include //Added by qt3to4: #include #include class QTimer; class QLabel; namespace QTerm { class Window; class popWidget : public QWidget { Q_OBJECT public: popWidget(Window * win, QWidget *parent = 0, const char *name=0); ~popWidget(); void popup(); void setText(const QString&); public slots: void showTimer(); protected: QTimer *pTimer; int nState; // -1 hide, 0 popup, 1 wait, 2 hiding QPoint ptPos; QRect rcDesktop; int nStep; int nInterval; QLabel *label; Window *window; void mousePressEvent( QMouseEvent * ); }; } // namespace QTerm #endif // POPWIDGET_H qterm-0.7.3/src/prefdialog.cpp000066400000000000000000000161441332762052600162740ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'prefdialog.ui' ** ** Created: Sat Dec 14 15:21:48 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "prefdialog.h" #include "soundconf.h" #include "qtermconfig.h" #include "qtermglobal.h" //Added by qt3to4: #include #include #include namespace QTerm { //extern QString getOpenFileName(const QString&, QWidget*); /* * Constructs a prefDialog which is a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ prefDialog::prefDialog( QWidget* parent, Qt::WindowFlags fl ) : QDialog( parent, fl ) { ui.setupUi(this); connectSlots(); restoreGeometry(Global::instance()->loadGeometry("Pref")); loadSetting(); } /* * Destroys the object and frees any allocated resources */ prefDialog::~prefDialog() { // no need to delete child widgets, Qt does it all for us Global::instance()->saveGeometry("Pref",saveGeometry()); } void prefDialog::connectSlots() { connect(ui.okPushButton, SIGNAL(clicked()), this, SLOT(onOK()) ); connect(ui.cancelPushButton, SIGNAL(clicked()), this, SLOT(onCancel()) ); connect(ui.selectsoundPushButton, SIGNAL(clicked()), this, SLOT(onSound()) ); connect(ui.selectPlayerPushButton, SIGNAL(clicked()), this, SLOT(onPlayer()) ); connect(ui.choosehttpPushButton, SIGNAL(clicked()), this, SLOT(onHttp()) ); connect(ui.browsePushButton, SIGNAL(clicked()), this, SLOT(onBrowse()) ); connect(ui.imagePushButton, SIGNAL(clicked()), this, SLOT(onImage()) ); connect(ui.poolPushButton, SIGNAL(clicked()), this, SLOT(onPool()) ); connect(ui.resetPushButton, SIGNAL(clicked()), this, SLOT(onReset()) ); } void prefDialog::loadSetting() { Config * conf = Global::instance()->fileCfg(); QString strTmp; strTmp = conf->getItemValue("preference","xim").toString(); ui.ximComboBox->setCurrentIndex(strTmp.toInt()); strTmp = conf->getItemValue("preference","cursor").toString(); ui.cursorComboBox->setCurrentIndex(strTmp.toInt()); strTmp = conf->getItemValue("preference","wordwrap").toString(); ui.wordSpinBox->setValue(strTmp.toInt()); strTmp = conf->getItemValue("preference","wheel").toString(); ui.wheelCheckBox->setChecked(strTmp!="0"); strTmp = conf->getItemValue("preference","url").toString(); ui.urlCheckBox->setChecked(strTmp!="0"); strTmp = conf->getItemValue("preference","blinktab").toString(); ui.blinkCheckBox->setChecked(strTmp!="0"); strTmp = conf->getItemValue("preference","warn").toString(); ui.warnCheckBox->setChecked(strTmp!="0"); strTmp = conf->getItemValue("preference","wavefile").toString(); ui.wavefileLineEdit->setText( strTmp ); strTmp = conf->getItemValue("preference","externalplayer").toString(); ui.playerLineEdit->setText( strTmp ); strTmp = conf->getItemValue("preference","antialias").toString(); ui.aacheckBox->setChecked( strTmp!="0" ); strTmp = conf->getItemValue("preference","tray").toString(); ui.trayCheckBox->setChecked( strTmp!="0" ); strTmp = conf->getItemValue("preference","clearpool").toString(); ui.clearCheckBox->setChecked( strTmp!="0" ); strTmp = conf->getItemValue("preference","pool").toString(); if(strTmp.isEmpty()) strTmp = Global::instance()->pathCfg()+"pool/"; ui.poolLineEdit->setText( strTmp ); strTmp = conf->getItemValue("preference","http").toString(); ui.httpLineEdit->setText( strTmp ); strTmp = conf->getItemValue("preference","zmodem").toString(); if(strTmp.isEmpty()) strTmp = Global::instance()->pathCfg()+"zmodem/"; ui.zmodemLineEdit->setText( strTmp ); strTmp = conf->getItemValue("preference","image").toString(); ui.imageLineEdit->setText( strTmp ); } void prefDialog::saveSetting() { Config * conf = Global::instance()->fileCfg(); QString strTmp; strTmp.setNum(ui.ximComboBox->currentIndex()); conf->setItemValue("preference","xim", strTmp); strTmp.setNum(ui.wordSpinBox->value()); conf->setItemValue("preference","wordwrap", strTmp); strTmp.setNum(ui.cursorComboBox->currentIndex()); conf->setItemValue("preference","cursor", strTmp); strTmp.setNum(ui.wheelCheckBox->isChecked()?1:0); conf->setItemValue("preference","wheel", strTmp); strTmp.setNum(ui.urlCheckBox->isChecked()?1:0); conf->setItemValue("preference","url", strTmp); strTmp.setNum(ui.blinkCheckBox->isChecked()?1:0); conf->setItemValue("preference","blinktab", strTmp); strTmp.setNum(ui.warnCheckBox->isChecked()?1:0); conf->setItemValue("preference","warn", strTmp); strTmp.setNum(ui.aacheckBox->isChecked()?1:0); conf->setItemValue("preference","antialias", strTmp); strTmp.setNum(ui.trayCheckBox->isChecked()?1:0); conf->setItemValue("preference","tray", strTmp); conf->setItemValue("preference","wavefile", ui.wavefileLineEdit->text()); conf->setItemValue("preference","externalplayer", ui.playerLineEdit->text()); strTmp.setNum(ui.clearCheckBox->isChecked()?1:0); conf->setItemValue("preference","clearpool", strTmp); strTmp=ui.poolLineEdit->text(); if(strTmp.isEmpty()) strTmp = Global::instance()->pathCfg()+"pool/"; conf->setItemValue("preference","pool",strTmp); strTmp=ui.zmodemLineEdit->text(); if(strTmp.isEmpty()) strTmp = Global::instance()->pathCfg()+"zmodem/"; conf->setItemValue("preference","zmodem",strTmp); conf->setItemValue("preference","http",ui.httpLineEdit->text()); conf->setItemValue("preference","image",ui.imageLineEdit->text()); conf->save(); } void prefDialog::closeEvent(QCloseEvent *) { reject(); } void prefDialog::onOK() { saveSetting(); done(1); } void prefDialog::onCancel() { done(0); } void prefDialog::onReset() { loadSetting(); } void prefDialog::onSound() { QString sound = QFileDialog::getOpenFileName( this, "Choose a sound file", QDir::currentPath(), "*" ); if ( !sound.isNull() ) { ui.wavefileLineEdit->setText(sound); } } void prefDialog::onHttp() { QString http = QFileDialog::getOpenFileName( this, "Choose a browser", QDir::currentPath(), "*" ); if ( !http.isNull() ) { ui.httpLineEdit->setText("\"" + http + "\"" + " %L"); } } void prefDialog::onPlayer() { QString player= QFileDialog::getOpenFileName( this, "Choose a program", QDir::currentPath(), "*" ); if ( !player.isNull() ) { ui.playerLineEdit->setText("\"" + player + "\""); } } void prefDialog::onBrowse() { //qDebug(ui.zmodemLineEdit->text()); QString dir = QFileDialog::getExistingDirectory(this, "Choose a directory", ui.zmodemLineEdit->text()); if( !dir.isNull() ) ui.zmodemLineEdit->setText(dir); } void prefDialog::onImage() { QString image = QFileDialog::getOpenFileName( this, "Choose a program", QDir::currentPath(), "*" ); if ( !image.isNull() ) { ui.imageLineEdit->setText("\"" + image + "\""); } } void prefDialog::onPool() { QString pool = QFileDialog::getExistingDirectory( this, "Choose a directory", ui.poolLineEdit->text()); if ( !pool.isEmpty() ) { ui.poolLineEdit->setText(pool); } } } // namespace QTerm #include qterm-0.7.3/src/prefdialog.h000066400000000000000000000020171332762052600157330ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'prefdialog.ui' ** ** Created: Sat Dec 14 15:21:34 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef PREFDIALOG_H #define PREFDIALOG_H #include "ui_prefdialog.h" //Added by qt3to4: //#include class QCloseEvnt; namespace QTerm { class prefDialog : public QDialog { Q_OBJECT public: prefDialog( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); ~prefDialog(); protected slots: void onOK(); void onCancel(); void onSound(); void onPlayer(); void onHttp(); // void onBeep(int); void onBrowse(); void onImage(); void onPool(); void onReset(); protected: void closeEvent( QCloseEvent * ); void connectSlots(); void loadSetting(); void saveSetting(); private: Ui::prefDialog ui; }; } // namespace QTerm #endif // PREFDIALOG_H qterm-0.7.3/src/progressBar.cpp000066400000000000000000000061061332762052600164460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "progressBar.h" #include "qtermglobal.h" //Added by qt3to4: #include #include #include #include namespace QTerm { ProgressBar::ProgressBar( QWidget *parent, QLabel *label ) : QProgressBar( parent ) , m_label( label ) , m_done( false ) { //DEBUG_FUNC_INFO setMaximum(100); m_label->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); m_abort = new QPushButton("Abort", parent); m_abort->setObjectName("Abort"); m_abort->hide(); //m_abort->setText( tr("Abort") ); m_abort->setIcon( QIcon( ":/pic/messagebox_critical.png" )); m_label->show(); show(); } ProgressBar::~ProgressBar() { //DEBUG_FUNC_INFO } ProgressBar& ProgressBar::setDescription( const QString &text ) { m_description = text; m_label->setText( text ); return *this; } ProgressBar& ProgressBar::setStatus( const QString &text ) { QString s = m_description; s += " ["; s += text; s += ']'; m_label->setText( s ); parentWidget()->adjustSize(); return *this; } ProgressBar& ProgressBar::setAbortSlot( QObject *receiver, const char *slot ) { connect( m_abort, SIGNAL(clicked()), receiver, slot ); connect( m_abort, SIGNAL(clicked()), this, SLOT(hide()) ); m_abort->show(); parentWidget()->adjustSize(); return *this; } void ProgressBar::setDone() { if( !m_done ) { m_done = true; m_abort->setEnabled( false ); setStatus( tr("Done") ); } else // then we we're aborted setStatus( tr("Aborted") ); } void ProgressBar::hide() { //NOTE naughty m_done = true; m_abort->setEnabled( false ); setStatus( tr("Aborting...") ); } } qterm-0.7.3/src/progressBar.h000066400000000000000000000050051332762052600161100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2005 by Max Howell * * * * 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 Steet, Fifth Floor, Boston, MA 02111-1307, USA. * ***************************************************************************/ //WARNING this is not meant for use outside this unit! #ifndef QTERM_PROGRESSBAR_H #define QTERM_PROGRESSBAR_H #include //Added by qt3to4: #include class QLabel; class QPushButton; namespace QTerm { /** * @class KDE::ProgressBar * @short ProgressBar class with some useful additions */ class ProgressBar : public QProgressBar { friend class StatusBar; public: /** @param text a 1-6 word description of the progress operation */ ProgressBar &setDescription( const QString &text ); /** @param text eg. Scanning, Reading. The state of the operation */ ProgressBar &setStatus( const QString &text ); /** set the recipient slot for the abort button */ ProgressBar &setAbortSlot( QObject *receiver, const char *slot ); void setDone(); QString description() const { return m_description; } protected: ProgressBar( QWidget *parent, QLabel *label ); ~ProgressBar(); virtual void hide(); QLabel *m_label; QString m_description; bool m_done; QPushButton *m_abort; }; } #endif qterm-0.7.3/src/qterm.cfg000066400000000000000000000016431332762052600152630ustar00rootroot00000000000000[General] version=1.11 [global] max=1 font=Sans pointsize=10 quickfont=Monospace fullscreen=0 theme=0 language=eng clipcodec=0 vscrollpos=0 statusbar=0 switchbar=1 pixelsize=12 menubar=true [key] num=1 key0=0^Ptest^M^Mhehe^M^X^M^M name0=post [quick%20list] num=1 [preference] xim=0 wordwrap=72 smartww=1 wheel=1 url=1 logmsg=1 blinktab=1 warn=1 beep=1 http=${HTTP} antialias=1 tray=0 [quick%200] addr=debian port=23 [Shortcuts] actionAbout=F1 actionAddress=F2 actionQuickConnect=F3 actionRefresh=F5 actionFull=F6 actionScriptRun=F7 actionScriptStop=F8 actionCopyArticle=F9 actionViewMessage=F10 actionBoss=F12 actionCopy=Ctrl+Ins actionPaste=Shift+Ins [ToolBars] ButtonStyle=3 IconSize=@Size(22 22) mainToolBar=actionCopy, actionPaste, actionRefresh, actionCopy_Article, actionCurrent_Session_Setting terminalToolBar=actionConnect, actionQuick_Login, actionDisconnect ansiToolBar=actionUnderline, actionBlink, actionPallete qterm-0.7.3/src/qterm.desktop000066400000000000000000000004161332762052600161720ustar00rootroot00000000000000[Desktop Entry] Categories=Network; Type=Application Name=QTerm Exec=qterm -caption "%c" %i %u GenericName=BBS Client GenericName[zh_CN]=BBS 客户端程序 GenericName[zh_TW]=BBS 客戶端程式 Comment=BBS client based on Qt library in linux Terminal=false Icon=qterm qterm-0.7.3/src/qterm.h000066400000000000000000000071741332762052600147600ustar00rootroot00000000000000/******************************************************************************* FILENAME: qterm.h REVISION: 2001.8.12 first created. AUTHOR: smartfish kafa *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #ifndef GLOBAL_H #define GLOBAL_H #ifdef HAVE_CONFIG_H #include "config.h" #else #define QTERM_VERSION "0.5.6" #endif #ifndef BUFSIZE #define BUFSIZE (1024) #endif // every character has a 16-bit description // low 8 for colors // hight 8 for attributes #define COLORMASK 0x00ff #define ATTRMASK 0xff00 // set #define SETCOLOR(a) ( (a) & COLORMASK ) #define SETATTR(a) ( ( (a) << 8 ) & ATTRMASK ) // get #define GETCOLOR(a) ( (a) & COLORMASK ) #define GETATTR(a) ( ( (a) & ATTRMASK ) >> 8 ) // color 8-bit // 0-2 background // 0 black // 1 red // 2 green // 3 yellow // 4 blue // 5 magenta // 6 cyan // 7 white // 4-6 foreground // 0 black // 1 red // 2 green // 3 yellow // 4 blue // 5 magenta // 6 cyan // 7 white // 3 highlight // 0 no // 1 highlight #define FGMASK 0x0f #define BGMASK 0xf0 #define HIGHLIGHTMASK 0x08 //set color #define SETFG(c) ( (c) & FGMASK ) #define SETBG(c) ( ( (c) << 4 ) & BGMASK ) #define SETHIGHLIGHT(c) ( (c) | HIGHLIGHTMASK ); //get color #define GETFG(c) ( (c) & FGMASK ) #define GETBG(c) ( ( (c) & BGMASK ) >> 4 ) #define GETHIGHLIGHT(c) ( (c) & HIGHLIGHTMASK ) //reverse bg and fg color #define REVERSECOLOR(c) ( SETBG( GETFG(c) ) | SETFG( GETBG(c) ) | GETHIGHLIGHT(c) ) // mask for attr #define BOLDMASK 0x01 #define DIMMASK 0x02 #define UNDERLINEMASK 0x08 #define BLINKMASK 0x10 #define RAPIDBLINKMASK 0x20 #define REVERSEMASK 0x40 #define INVISIBLEMASK 0x80 //set attributes #define SETBOLD(a) ( (a) | BOLDMASK ) #define SETDIM(a) ( (a) | DIMMASK ) #define SETUNDERLINE(a) ( (a) | UNDERLINEMASK ) #define SETBLINK(a) ( (a) | BLINKMASK ) #define SETRAPIDBLINK(a) ( (a) | RAPIDBLINKMASK ) #define SETREVERSE(a) ( (a) | REVERSEMASK ) #define SETINVISIBLE(a) ( (a) | INVISIBLEMASK ) //get attributes #define GETBOLD(a) ( (a) & BOLDMASK ) #define GETDIM(a) ( (a) & BLINKMASK ) #define GETUNDERLINE(a) ( (a) & UNDERLINEMASK ) #define GETBLINK(a) ( (a) & BLINKMASK ) #define GETRAPIDBLINK(a) ( (a) & RAPIDBLINKMASK ) #define GETREVERSE(a) ( (a) & REVERSEMASK ) #define GETINVISIBLE(a) ( (a) & INVISIBLEMASK ) //default color #define NO_COLOR ( SETFG(7) | SETBG(0) ) //default attribute #define NO_ATTR 0x04 // other definations #ifndef NULL #define NULL 0 #endif #define DAE_FINISH 10001 #define DAE_TIMEOUT 10002 #define PYE_ERROR 10003 #define PYE_FINISH 10004 // some keys #define CHAR_CR 0x0d // ^M #define CHAR_LF 0x0a // ^J #define CHAR_FF 0x0c // ^L #define CHAR_VT 0x0b // ^K #define CHAR_TAB 0x09 // ^I #define CHAR_BS 0x08 // ^H #define CHAR_BELL 0x07 // ^G #define CHAR_ESC 0x1b // #define CHAR_NORMAL -1 // telnet state #define TSRESOLVING 30 #define TSHOSTFOUND 31 #define TSHOSTNOTFOUND 32 #define TSCONNECTING 33 #define TSHOSTCONNECTED 34 #define TSPROXYCONNECTED 35 #define TSPROXYAUTH 36 #define TSPROXYFAIL 38 #define TSREFUSED 39 #define TSREADERROR 40 #define TSCLOSED 41 #define TSCLOSEFINISH 42 #define TSCONNECTVIAPROXY 43 #define TSEGETHOSTBYNAME 44 #define TSEINIWINSOCK 45 #define TSERROR 46 #define TSPROXYERROR 47 #define TSWRITED 48 // proxy type #define NOPROXY 0 #define WINGATE 1 #define SOCKS4 2 #define SOCKS5 3 #define HTTP 4 #endif //QTERM_H qterm-0.7.3/src/qterm.ico000066400000000000000000002040761332762052600153030ustar00rootroot00000000000000 ((   #')+,---+*(&"   #&*.258;>ACEFGHGGFFDB@=:73/+($   %,-//000///000///000///0//..*' %.5<CINSVY[]^`abbbbbba`_^\ZXTPKE?80(  %7ALOQRSSSRRRSSSRRRSSSRRRSRRQPIC6  (19BIPW]bfiklmnoopppppppoonmkjgd_YSLD<3*# $7JU`cffgggfffgggfffgggfffgfeb_TI: $+3<ENV]ekrvz|~~~~~~~~~~~~~~~~~}|zxsmgaYQG>6/' (5I^iuwzz{{{{{{{{{{{{{{{{{{{yxsn^O= #.8BIQW]bhlptxz|}~~|{xuqnid_ZSMD<3+.1?N\jry{||}}}}}}}}}}}}}}}}}||xulcP<, &5DR_gorvwy|!##698EHGPTSX]\^cbcgffkjhmlinmjoninmhmlejiaee\`_UYXKNN>A@,.-~}|{yxwupkaXLADGVfow{~~~}xsfYA) #-7ALXakqv=@?RVU`edlqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqplqpfjiX\[EHH)++~~}||{zwslf^V9<AA577aff5$ $8LZ/11Y]]rxxrxxkppkqplqplqpelk􉒐hmm3"  .=M%''xX\\w}}x~}kppkppkpppvu9$  "1CXPTTyzkppw~9&  $3C?BAmrrꋒ~!#"I'  $4LX\\033Y, &8AEEzu|{甛@DCb- &7OSSǬm{lHlX-`JY@T:T:V= y_Hqq_5kbgfnKPOj+ $8bgfŀwZdO#Q6P5P5P5Q5R7S7U7U7U7S7Q5P5P5P5P5P5P5P5P5{qLbl|ۗQVUx+  $365Iw}}ԜscO$P6Q5W8];`>c@hBmEqGtIvIwKxKyKxKwKuIsHpGlDgA`>X:Q5P5P5P5P5~h}֑V[Z-"JMMY䢪~aM"Q5Y:`>fAjDsHzLPRUVXYZZZZZZYXWUSQNxKqGiB^=U7P5P5P5l͌᯷SXW8&  UYX`𧯯wkLS9\;c@jBqH{MQVY\^`abceffffffeecb`^\YWSPyKoEb>X:P5P5nX-lŠѮLQPI0[`_an^, kU)kDtIPX_ekruxyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuurm ie`ZU{LiB_=P5fnttkqpkppRVVzvaM9&~~dEpGyLU]cjqrsttyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuurl hc^XQrGfAV8lqqkqpkppBFE|yk\I6! |O|dhBtI~NX`gn wuyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuutpkfa\UyLjB];ñlqqkqpkqp+--~}tlYG,  ֽyoRmExLR\bjrstzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuusm hc^WNmDa>￴|lqqlqpbgf~~xsbR8 xjIoGzMU^fm vuvvvzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuutoie_YQoEe@tyylqplqpRUU|zl^E, RwiHqH|NV_gpuyzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuurkf`ZRqGgAĸlqqlqplqp7:9}|qfP:'  znNrI}NW`hrvx{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuuslga\RrHhAȷlqqlqpfkj ~vn[I1w\sI~PXaisvxyy{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuusogb\SsHjDv}|lqplqpPSSytfW=""qrH~PWajsxyyyyy{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuutl hb\RtHsPlqplqplqp+--}zpfI+qI~PWajux{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuutl haZRsHj9lqplqp\a`~|tmQ6# +uX"}NU`itxxy{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuusm gaZPrHxrwwlqplqq:<<~ysZA-zkH{NS^hsxxxxx{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuuslf`X~MqGkpplqpbgfzv`K7#&wwLS\fpz|}}}}}{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuuqjf_WyL{Xw}|kqpkqp=A@|ygUA-vVRYcoy{|||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuuoic]SwKokppkqpbgf}{m_K7 lrq {oP~PVal xzz||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuutm hbZPtHx~}kppkpp9;;~|siUA& hyMU]huzwww||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuskf`X|Mq>kpokpp\aa~}vp\I+|g>RYcp|!{{{{{||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxxwwwwwwwwvvvvvvvvuuuuuuuuoie]SyKv|{kpokpo'))~zwdQ1 -}NV`k x{y|||ywwwwwwwwxy{{{{{{{zzxwvttsssuwxyyyyxvttttstuvxxxvtsrrrrrtutrrqqqqprtsqppoh c]WNh.kppjpoNSR|zhV7}i?SZft~#|||{{l]\[[[[[_bo{{{{{{{tmd\ZXXXXXZ\gsvywvgYYYYY^dnxxxnd]WWWXXfti`[VVVWWdrh]YVVSN}LRU{Lpuujpoflk~}l[<~PWam|#|z||{z_jDgBc?c?c?c?c?nFxMd|{{{{{zm`~PfAc?a=`=_<`=a=d?hAWmsyvsYd?c>b>b>b>tISfxxxfTsHa=a=a=b=c>Xq`}NoEa<a<a<b=c>Wp\uHkBa<`<`; ^9[7zIXPs=kppjpo688~~n_B& $rPU\gv%}}}|=0%#|lExLd||{{{vqe\~eCb>d?vJVfv©òhrHSexxžoa=W{vb=Wf]8}L]V|MkqpjpoSWW~pbH.j}WXan~'|y}}}IlEvKd|||{{q_fEb>e@ZtŻqHSfxxī`<Wña<Vź^8M`ZPqt{zkpoflk~reM4"ҭuSZfwā)|||}}IlEvKd||||{peCb>ShĺqHSfyxī`<Wña<Vź^9 Od_UYkppjpo,..~shR;' ~j>W`m~)À#}}}}}IlEvKd||||ŒC`=yL]¹rHSfyyī`<Wña<Vź`; PgbYPkppjpoGKK~tjU@+ -WYctń.}{}}}}IlEvKd|||{ŲpoQ(tJV¸rHSfyyī`<Wña<Vźa<S hf^Qcqvvjpo[`_vmYE. b|V]i|'ƃ+~~~}}}IlEvKd|||~"|a;iC}epGQrHSfyyī`<Xña<Vźa<S ihaW^{jpohmmvn\I1 ГqOX`oÃ0Ł'y~~~}}IlEvKd|||=sU,iCjpGPrHSfyyī`<Xòa=Vźa<UlicZQjpojoo#%%wp_N4ܿb)Zevdž3!{{~~~}IlEvKd|||‘MrS)iCepG~PrHSfyyī`<Xòa=Wźa<Vnjf^Sjpojoo;==xqaP6X \i~+ɇ3~|||~~~IlEvKd|||”UrS)hBd\bùrHSfyyū`<Xòa=Wźa=Vnkg`VYntsjooKNNyscS8 W_mą3ȅ.~~~~~~~IlEvKd|||•WsS)hBdqsŻqGSfyyū`<Xòa=Wźa=WplibYg#t{zjooW[[ysdU9-hYbrɉ:Ȅ+~~~~~~IlEwKd|||•WpR(e@vNx\bùpFQeyyū`<Xòa=Wźa=Wrmje\W{joo_ddyteV:IsO\ey#͍>ǃ'z~~~~~IlEwKd|||•WoR(a>b>c?c?c?c?c?c?b?pG~PnE|Ndyyū`<Xòa=Wźa=Wsokf^SjoofkkyteW;_j:]g-ώ@Ƃ#{{~~~~IlEwKd|||•WvoG}OiBrH_vwī`=Xòa=Wźa=Wtqlh`UjoojooytfW;qe*^j„3Ϗ@Ł!|||~~~IlEwLd|||•WoF|Pd?gAZsuī`=Xòa=Wźa=WtqmiaVƭjoojooyteV:`_m Ȋ=Џ@ŀ!}}}}~~IlEwLd|||•WpGRa>d?yLY\`=Xòa=Wźa=WtrmjcXjpojooyteV:݉^`p͎BЎ>}}}}}~IlEwLd}||ÕWrHS~eD`=a=d?iB`=Xòa=Xźa=WtrmjeZ{jpojoo"$$yscT8]brГHя>ŀ~~~~~~IlEwLd}}|ĕVqQcWtrnkf\nlrqjoo&((xrbR7\ btԖMґ@ŀIlEwLd}}}ÓRsS)hC|OaùrR)a=W²`<WĻc>Xtrnkg]hmtsjpo&((wq`O5] cv֚QӒAŀIlEwLd}}}ďGqS)e@wUkĺrR)`<wK`<vJc>Yurnlg]hnusjpo$'&wo^L3߄^cv؛SԓBƁIlFwLd}}}Ä/tW1a>vYZuŻrR)`<c>_<c>d?Yusnlg^qnutjpo ""vm[H0 x`cvڝV֕GƁ~~~IlFwMd}}}}ǿvYjJc+gxŻtT)|a>xT&{Z1e=utH_vsolg^nusjpoulXD- ibeu۟XٚMȃ#~~~~IlFwMe}}}}Ťvir|ƻuU)`Rdwsomh]mtsjpotjT>) Te)cu۟XݟUȄ'}}}}}ImFwMe~}}}Á&ǿ¿u2rw|Ƽh.p8dmwromh]êkrqion~shP9& ;i9cr۟X]ʆ+||||||ImFwMe~~}}}É9ǿAz|||Ƽpwz3¹júu&Įqvvwr omh]jpodih~qeK3!qLap ٛSeƁƁƁƁŀJmFxMe}}}}}}Ă(Ʀz¼½}|){|}}}Ƽtp5ĺpdþz-vy äzt"uxxwr omgZjpo\aa~pbG, ~d`nԖLmҎ:ŀŀŀ~~}|IlEwLczzz{{|}}}ĎCśbšršrę`ÍD||||||||Ë@ÎGÎGÎGÎGŽGŽG‡7{{-Ù`)7GGGGGG@yy}%’SàrÜi;yyyyy/—^ßr˜a4xxxxxvqomg`jpoSXW~n^A$ `l͎AtՔAyŀŀwoh_ooDgBmFR^^^gov}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxxvpolfv3jpoFJJ}l[;` jņ3vߠUȄ%~ŀpaRgCMY?b?c?eAfBfBfBRbp}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxxxuqolcijpo588zhV6 {d(i}#si͉.|BVwJu>xt2pr&|1or1or1pr2pr2prNU:~Qap~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxxxwtqpkaļ{jpowdQ1 HpJftgzʆ+z `q6jh}Pbp~~~~~~~}}}}}}}}}}}}}}}}||||||||{{{{{{{{zzzzzzzzzzzzzzzyyyxs qpk^u|{flkvp\I+rbpڛRņٗG{`n5jg|Pao~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxxvsqoip(ntsX]\sjUA& amʉ7ņï.au5jg|Pao~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyyyyxurqngujpoFJIm`K7 g8j|zƒ̇-czCsj\it~~~~~~~}}}}}}}}}}}}}}}}||||||||{{{{{{{{zzzzzzzzzzzzzzytrqmb̽jpo)++hVB.J}jfs\ҕWd|Q|khow~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyyywtspkn"|ekjwaL8$cő7ϑ|i_msxz~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyyxwstoh{rxwSWWt[B.mGkyu֙mat`nbybybybybybybybybybybybybybybybybyE~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyyyxu v sncjpo7:9oS8$ VcrؘI۠zҎ7||ŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyyxxtyrkOgllujK- |e6n~ĄܠݜLȃ#ƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyyxu ytpgx~SWWi\@%xgsݝPńԒ=ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyyxvʂ'sm}Ajoo133_O67|d6oƅ^ˇ)ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyw ͅ-uqhaeeiT@+ }}g t٘G֙Ҏ5}ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyyyyyͅ-tnNv}|DGGbJ2 X|iBo{v|Ӑ:~ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzyywUvrjýgkk mW=# fsϋ0ڜ_͈-ŀƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzzxב@~tmr~KNN^L0 d{t`lwSژE{ ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzzzzzɀWvqu-hmmpO<%|g=q}sԕό2~}ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zzzz{zljxskNQQS?,Z|i$u̅#ώȆٕB}}ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{zz{y Җz vouioocD2uwplwՏ5ޠ}֕@~~ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{{{|zŅІ)wrJFJIN5$ :xoVpyݙDx֔>~~ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{{{}|yߙHxtu*󵾽`edU>' ~mIs{Mzו@~~ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{{{{~}u_yuo󰴯8::E/~kAt|QāژDŀ~ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||||||||{|~azwn TXXG2! Kzj=v}MώݛIȃ}ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}|||||||||||||||~~ӕQ{wn outQ6x~k=v}BݞߞN͉-|ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}|||||||||||||ʂ!َ͂3{xn >AA~=( w~}mCv}ڒ3ҏjו@Ɓƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||||}ǁ#̃!ӈ)ς{xoPTT?- %x~pMt|Ӊ!t͊ߜL͈+ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||||||ǀ!̄%̓SDŽ~|xp!eji;+N{yq[q|΃RlڗDʅ%ƀƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}||||!ʄ'φ'ц!āۏ2~|wv:{F& olqnn+{ۑ.yؗ\֔=ʅ%ƀƀŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}}}|!ʃ%Љ-ц#E^~{tZ@CC`+msrnEv~ЄGҎЎYٕĂ)ŀŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}}}}}Ȃ#ʅ'Ҋ.Ӊ)َ.V҄~znSXVp% w}{spcp&{̀ՉS֒ӑeۘEь3ȃ!ŀŀŀŀŀŀŀŀŀŀŀŀ~~~~~~~~}ƀ!˅'ψ-Վ3֍.׍+>ԅЀ|uyJZ^^}'kqppLt~ς،QΆۛxSٕAэ3Ʉ%ŀŀŀŀŀŀŀŀ~~~~~Ȃ#̆)Ћ0֎7ِ7ُ2َ+ڎ+҃ тπ~yn'~`ee& v}|kppo?w ς։@nٔҐw\ٕA֓=ь2͇+Ȅ#ŀŀŀŀŀŀŀȃ#ʅ)͇-ы2Ԏ5ڔ=ݕ>ݕ;ۑ2ٍ'ֆӃ҂Ё{oeekk}" qvvkppo?wςԅ ܏%IlψٕڗԑɄscUݚGٕA֒=Ԑ8Ԏ7Ҏ5ҍ3Ҏ5Ҏ5Ԏ7Ћ0Ԏ8ڕ@ޙEHIHAߕ7ێ)։ԅ Ӄ҂с{o{\kpprpuukpoqIt~͂҄Ն ۍ8QgvɁ˄ʃǀ{upkgeb`^ZWQI@ߔ2ێ%؈Յ Ԅԃ҃ρxo/{djoob esyykpowq_m9wς҃ԅֆ ًݐ%2>GMPRQNLHA:2ސ)ۍىֆ Յԅԃ҃Ё{q rHx~}fkkF Bzlrqkppxq^q?u"{̀ς҄ӅԅՅօֆֆֆֆֆֆֆօՅՅԄԄ҃тρ~vq.rKuwq;>>$ zotskppkpp{r[rDq0vz~̀΁ρςςЂςςρ̀~{wt%n8rMtreryx}{ wy~qwwkppkqpkqplqpurd|s[sTsOsLsKsMsQsVyr`qqilqqmrqtzy{ށW 6~{zx~x~~x~y|HLLuҒR 󕜛|  cursor/prev.xpm cursor/end.xpm cursor/enter.xpm cursor/exit.xpm cursor/hand.xpm cursor/home.xpm cursor/next.xpm cursor/pagedown.xpm cursor/pageup.xpm pic/addr.png pic/anti-idle.png pic/appearance.png pic/article.png pic/auto-reply.png pic/color-copy.png pic/connect.png pic/copy.png pic/disconnect.png pic/fonts.png pic/keys.png pic/folder_favorite.png pic/folder.png pic/message.png pic/messagebox_critical.png pic/messagebox_info.png pic/messagebox_warning.png pic/mouse.png pic/paste.png pic/popwidget.png pic/pref.png pic/qterm.png pic/qterm_32x32.png pic/qterm_48x48.png pic/qterm_tray.png pic/quick.png pic/reconnect.png pic/rect.png pic/refresh.png pic/shadow.png pic/sound.png pic/tabpad.png pic/tabpad_favorite.png qterm-0.7.3/src/qterm.rc000066400000000000000000000000741332762052600151250ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "qterm.ico" qterm-0.7.3/src/qtermbbs.cpp000066400000000000000000000503371332762052600160010ustar00rootroot00000000000000/******************************************************************************* * FILENAME: qtermbbs.cpp * REVISION: 2002.9.3 first created. * * AUTHOR: kingson fiasco * *****************************************************************************/ /******************************************************************************* * NOTE * This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermbbs.h" #include "qtermbuffer.h" #include "qtermtextline.h" #include "qterm.h" //Added by qt3to4: #include #include #include #include #include #include #ifdef SCRIPT_ENABLED #include "scripthelper.h" #include #endif namespace QTerm { BBS::BBS(Buffer * buffer) :m_urlPosList() { m_pBuffer = buffer; #ifdef SCRIPT_ENABLED m_scriptEngine = NULL; m_scriptHelper = NULL; #endif } BBS::~BBS() { } #ifdef SCRIPT_ENABLED void BBS::setScript(QScriptEngine * engine, ScriptHelper * script) { m_scriptEngine = engine; m_scriptHelper = script; } #endif void BBS::setScreenStart(int nStart) { m_nScreenStart = nStart; } int BBS::getScreenStart() { return m_nScreenStart; } bool BBS::setCursorPos(const QPoint& pt, QRect& rc_old, QRect& rc_new) { QRect rectOld = getSelectRect(); m_ptCursor = pt; updateSelectRect(); QRect rectNew = getSelectRect(); rc_old = rectOld; rc_new = rectNew; return rectOld != rectNew; } QString BBS::getMessage() { TextLine * line; QString message; if (!isUnicolor(m_pBuffer->screen(0))) return message; int i = 1; message = (m_pBuffer->screen(0)->getText().simplified()); line = m_pBuffer->screen(i); while (isUnicolor(line)) { message += "\n" + (line->getText().simplified()); i++; line = m_pBuffer->screen(i); } return message; } void BBS::setPageState() { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("setPageState"); if (func.isFunction()) { int ret = func.call().toInt32(); if (m_scriptHelper->accepted()) { m_nPageState = ret; return; } } else { qDebug("setPageState is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif m_nPageState = -1; TextLine * line; // Q3CString color; line = m_pBuffer->screen(0); // first line if (isUnicolor(line)) { line = m_pBuffer->screen(2); // third line if (isUnicolor(line)) m_nPageState = 1; //board and article list else m_nPageState = 0; //menu } else { line = m_pBuffer->screen(m_pBuffer->line() - 1); // last line if (isUnicolor(line)) { if (line->getText().indexOf("Ctrl-Q")!=-1 || line->getText().indexOf("^X/^Q")!=-1) m_nPageState = 4; // editing else m_nPageState = 2; // reading } } } int BBS::getCursorType(const QPoint& pt) { if (m_nScreenStart != (m_pBuffer->lines() - m_pBuffer->line())) return 8; QRect rc = getSelectRect(); int nCursorType = 9; #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) { m_scriptHelper->setAccepted(false); TextLine * line = m_pBuffer->at(pt.y()); int x = pt.x(); int y = pt.y() - m_nScreenStart; QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("setCursorType"); if (func.isFunction()) { int ret = func.call(QScriptValue(), QScriptValueList() << x << y).toInt32(); if (m_scriptHelper->accepted()) { return ret; } } else { qDebug("setCursorType is not a function"); } } #endif switch (m_nPageState) { case -1: // not recognized nCursorType = 9; break; case 0: // menu if (pt.x() < 5) // LEFT nCursorType = 6; else if (rc.contains(pt))// HAND nCursorType = 7; else nCursorType = 9; break; case 1: // list if (pt.x() < 12) // LEFT nCursorType = 6; else if (pt.y() - m_nScreenStart < 3) // HOME nCursorType = 0; else if (pt.y() == m_pBuffer->lines() - 1) // END nCursorType = 1; else if (pt.x() > m_pBuffer->columns() - 16 && pt.y() - m_nScreenStart <= m_pBuffer->line() / 2) //PAGEUP nCursorType = 2; else if (pt.x() > m_pBuffer->columns() - 16 && pt.y() - m_nScreenStart > m_pBuffer->line() / 2) // PAGEDOWN nCursorType = 3; else if (rc.contains(pt)) nCursorType = 7; else nCursorType = 9; break; case 2: // read if (pt.x() < 12) // LEFT nCursorType = 6; else if (pt.x() > (m_pBuffer->columns() - 16) && (pt.y() - m_nScreenStart) <= m_pBuffer->line() / 2) // PAGEUP nCursorType = 2; else if (pt.x() > (m_pBuffer->columns() - 16) && (pt.y() - m_nScreenStart) > m_pBuffer->line() / 2) // PAGEDOWN nCursorType = 3; else nCursorType = 9; break; case 3: break; case 4: nCursorType = 8; default: break; } return nCursorType; } bool BBS::isSelected(int index) { QRect rect = getSelectRect(); // nothing selected if (rect.isNull()) return false; return (index >= rect.top() && index <= rect.bottom()); } bool BBS::isSelected(const QPoint& pt) { QRect rect = getSelectRect(); // nothing selected if (rect.isNull()) return false; return (pt.y() >= rect.top() && pt.y() <= rect.bottom() && pt.x() >= rect.left() && pt.x() <= rect.right()); } int BBS::getPageState() { return m_nPageState; } char BBS::getMenuChar() { return m_cMenuChar; } void BBS::updateSelectRect() { QRect rect(0, 0, 0, 0); TextLine *line = m_pBuffer->at(m_rcSelection.y()); if (line == NULL) return; line->setChanged(-1,-1); // current screen scrolled if (m_nScreenStart != (m_pBuffer->lines() - m_pBuffer->line())) { m_rcSelection = rect; return; } #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) { m_scriptHelper->setAccepted(false); rect.setRect(0,0,0,0); int x = m_ptCursor.x(); int y = m_ptCursor.y() - m_nScreenStart; QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("setSelectRect"); if (func.isFunction()) { QScriptValue rectArray = func.call(QScriptValue(), QScriptValueList() << x << y); if (m_scriptHelper->accepted() && rectArray.isArray()) { rect.setX(rectArray.property(0).toInteger()); // x rect.setY(rectArray.property(1).toInteger() + m_nScreenStart); //y rect.setWidth(rectArray.property(2).toInteger()); rect.setHeight(rectArray.property(3).toInteger()); m_rcSelection = rect; return; } } else { qDebug("setSelectRect is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif switch (m_nPageState) { case -1: break; case 0: if (m_ptCursor.y() - m_nScreenStart >= 7 && m_ptCursor.x() > 5) { line = m_pBuffer->at(m_ptCursor.y()); if (line == NULL) break; QString cstr = line->getText(); QRegExp reg("[a-zA-Z0-9][).\\]]"); int indexChar = cstr.lastIndexOf(reg, m_ptCursor.x()); if (indexChar != -1) { m_cMenuChar = cstr.at(indexChar).toLatin1(); int nMenuStart = indexChar; if (indexChar > 0 && (cstr[indexChar-1] == '(' || cstr[indexChar-1] == '[')) nMenuStart--; reg = QRegExp("[^ ]"); int nMenuBaseLength = 20; int nMenuEnd = cstr.lastIndexOf(reg, nMenuStart + nMenuBaseLength); if (nMenuEnd == -1) { nMenuEnd = cstr.indexOf(" ", nMenuStart + nMenuBaseLength); } int nMenuLength = nMenuBaseLength + 1; if (nMenuEnd != -1) { nMenuLength = line->beginIndex(nMenuEnd) - line->beginIndex(nMenuStart) + line->size(line->beginIndex(nMenuEnd)); } if (m_ptCursor.x() >= line->beginIndex(nMenuStart) && m_ptCursor.x() <= line->beginIndex(nMenuStart) + nMenuLength) { rect.setX(line->beginIndex(nMenuStart)); rect.setY(m_ptCursor.y()); rect.setWidth(nMenuLength); rect.setHeight(1); } } } break; case 1: if ((m_ptCursor.y() - m_nScreenStart) >= 3 && (m_ptCursor.y() - m_nScreenStart) < m_pBuffer->line() - 1 && m_ptCursor.x() >= 12 && m_ptCursor.x() <= m_pBuffer->columns() - 16) { line = m_pBuffer->at(m_ptCursor.y()); if (line == NULL) break; QString str = line->getText(); if (str.count(" ") != (int) str.length()) { rect.setX(0); rect.setY(m_ptCursor.y()); rect.setWidth(m_pBuffer->columns()); rect.setHeight(1); } } break; case 2: break; case 3: break; default: break; } m_rcSelection = rect; } QRect BBS::getSelectRect() { return m_rcSelection; } bool BBS::isUnicolor(TextLine *line) { QByteArray color = line->getColor(); bool bSame = true; int clr = GETBG(color[0]); for (int i = 0; i < color.length() / 2; i++) { if (GETBG(color[i]) != clr || GETBG(color[i]) == GETBG(NO_COLOR)) { bSame = false; break; } } return bSame; } bool BBS::isIllChar(QChar ch) { static QString illChars = ",;'\"()<>^[]"; return ch > '~' || ch < '#' || illChars.contains(ch); } bool BBS::isUrl(QRect& rcUrl, QRect& rcOld) { //return checkUrl(rcUrl, rcOld, false); return checkUrl(rcUrl, rcOld); } bool BBS::isIP(QRect& rcUrl, QRect& rcOld) { return checkIP(rcUrl, rcOld); } bool BBS::checkUrl(QRect & rcUrl, QRect & rcOld) { m_strUrl = ""; #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("checkUrl"); if (func.isFunction()) { QString url= func.call(QScriptValue(), QScriptValueList() << m_ptCursor.x() << m_ptCursor.y()-m_nScreenStart).toString(); if (m_scriptHelper->accepted()) { if (url.isEmpty()) { return false; } m_strUrl = url; return true; } } else { qDebug("checkUrl is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif int pt = (m_ptCursor.y()-m_nScreenStart)*m_pBuffer->columns()+m_ptCursor.x(); if (!m_urlPosList.isEmpty()) { QPair url; foreach (url, m_urlPosList) { if (pt > url.first && pt < url.second) { //qDebug() << "get text: " << getText(url.first, url.second); m_strUrl = getText(url.first, url.second); QRegExp urlRe("(mailto:|(https?|mms|rstp|ftp|gopher|telnet|ed2k|file)://)"); QRegExp emailRe("^[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}"); if (urlRe.indexIn(m_strUrl)==-1) { if (emailRe.indexIn(m_strUrl)==-1) { m_strUrl = "http://"+m_strUrl; } else { m_strUrl = "mailto:"+m_strUrl; } } return true; } } } return false; } // TODO: I do not know whether we need to support ip addr in multiple lines // TODO: Further Simplification bool BBS::checkIP(QRect& rcUrl, QRect& rcOld) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("checkIP"); if (func.isFunction()) { QString ipAddr= func.call(QScriptValue(), QScriptValueList() << m_ptCursor.x() << m_ptCursor.y()-m_nScreenStart).toString(); if (m_scriptHelper->accepted()) { if (ipAddr.isEmpty()) { return false; } m_strIP = ipAddr; return true; } } else { qDebug("checkIP is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif QString strText = m_pBuffer->at(m_ptCursor.y())->getText(); int at = m_pBuffer->at(m_ptCursor.y())->pos(m_ptCursor.x()); if (at == -1 || at >= strText.length()) { return false; } if (at > m_rcUrl.left() && at < m_rcUrl.right() && m_rcUrl.y() == m_ptCursor.y()) { rcUrl = m_rcUrl; rcOld = m_rcUrl; return true; } QRegExp rx("(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|\\*)"); int pos = 0; int ip_begin = 0; int ip_end = 0; while ((pos = rx.indexIn(strText, pos)) != -1) { if (pos < at && (pos + rx.matchedLength()) > at) { break; } pos += rx.matchedLength(); } if (rx.matchedLength() <= 0) { return false; } ip_begin = pos; ip_end = pos+rx.matchedLength(); m_strIP = strText.mid(ip_begin, ip_end - ip_begin);//get the pure ip address if (m_strIP[ m_strIP.length()-1 ] == '*') m_strIP.replace(m_strIP.length() - 1 , 1, "1"); rcUrl = QRect(ip_begin, m_ptCursor.y(), ip_end - ip_begin, 1); return true; } QString BBS::getUrl() { return m_strUrl; } QString BBS::getIP() { return m_strIP; } bool BBS::isPageComplete() { return m_pBuffer->caret().y() == (m_pBuffer->line() - 1) && m_pBuffer->caret().x() == (m_pBuffer->columns() - 1); } void BBS::updateUrlList() { m_urlPosList.clear(); for (int i = 0; i < m_pBuffer->line(); i++) { TextLine * lineBegin = m_pBuffer->screen(i); if (lineBegin == NULL) { break; } for (int j = 0; j < m_pBuffer->columns(); j++) { int index = checkUrlBegin(lineBegin->getText(),j); if (index != -1) { int urlBegin = i*m_pBuffer->columns() + lineBegin->beginIndex(index); int index2 = checkUrlEnd(lineBegin->getText(), index); bool multiline = false; if (index2 == -1) { while (m_pBuffer->screen(i+1) != NULL&&index2 == -1&&i < m_pBuffer->line()) { i++; TextLine * lineCurrent = m_pBuffer->screen(i); index2 = checkUrlEnd(lineCurrent->getText(), 0); } multiline = true; } if (index2 == -1) { index2 = m_pBuffer->screen(i)->getText().length() - 1; } int urlEnd = i*m_pBuffer->columns() + m_pBuffer->screen(i)->beginIndex(index2); if (verifyUrl(urlBegin, urlEnd)) m_urlPosList.append(qMakePair(urlBegin, urlEnd)); if (multiline) break; j = index2; } } } // if (!m_urlPosList.isEmpty()) { // QPair url; // foreach (url, m_urlPosList) { // qDebug() << getText(url.first, url.second); // } // } } //FIXME: The function use the assumption that the Url is latin only bool BBS::verifyUrl(int urlBegin, int urlEnd) { int i, index, begin, end, dot, url, host, ata; int ip_begin = 0; int ip_end = 0; if (urlEnd < urlBegin) { return false; } QString strText = getText(urlBegin, urlEnd); int nNoType = -1; url = 0; host = 0; end = strText.length()-1; QRegExp urlRe("^(mailto:|(https?|mms|rstp|ftp|gopher|telnet|ed2k|file)://)"); if ((begin = urlRe.indexIn(strText))!=-1) { if (urlRe.capturedTexts().contains("mailto:")) { if ((ata = strText.indexOf('@', begin + 1)) == -1) host = url + (ata - begin) + 1; else return false; } else { host = url+urlRe.matchedLength(); } } else { begin = url; if ((ata = strText.indexOf('@', begin + 1)) != -1) { host = url + (ata - begin) + 1; nNoType = 0; } else { host = url; nNoType = 1; } } ip_begin = host; ip_end = end; for (index = host, dot = host - 1, i = 0; index < end && strText.at(index) != '/'; index++) { if (strText.at(index) == '.') { if (index <= dot + 1) // xxx..x is illegal return false; dot = index; i++; } else { if (!strText.at(index).isLetterOrNumber() && strText.at(index) != '-' && strText.at(index) != '_' && strText.at(index) != '~' && strText.at(index) != ':' && strText.at(index) != '[' && strText.at(index) != ']' && strText.at(index) != '%' && strText.at(index) != '|' && strText.at(index) != '=' && strText.at(index) != '@' ) return false; } } if (index > 0 && strText.at(index - 1) == '.') return false; if (i < 1 || end <= url) return false; return true; } QString BBS::getText(int startpt, int endpt) { QString text; QPoint start((int)(startpt%m_pBuffer->columns()),(int)(startpt/m_pBuffer->columns())); QPoint end((int)(endpt%m_pBuffer->columns()),(int)(endpt/m_pBuffer->columns())); TextLine * line; if (start.y() == end.y()) { line = m_pBuffer->screen(start.y()); if (line != NULL) text = line->getText(start.x(), end.x()-start.x()); } else if (end.y() > start.y()) { line = m_pBuffer->screen(start.y()); if (line != NULL) text = line->getText(start.x(), -1); for (int i = start.y()+1; i < end.y(); i++) { line = m_pBuffer->screen(i); if (line == NULL) { return text; } text += line->getText(0,-1); } line = m_pBuffer->screen(end.y()); if (line != NULL && end.x() != 0) text += m_pBuffer->screen(end.y())->getText(0,end.x()); } else { qDebug() << start << end; } return text; } int BBS::checkUrlBegin( const QString & lineText, int index) { int i = 0; QString urlText = lineText; for (i = index; i < urlText.length() && isIllChar(urlText.at(i)); i++) ; if (i < urlText.length()) { return i; } return -1; } int BBS::checkUrlEnd( const QString & lineText, int index) { int i = 0; QString urlText = lineText; if (urlText.isEmpty()) { return 0; } for (i = index; i< urlText.length() && !isIllChar(urlText.at(i)); i++) ; if (i < urlText.length()) { return i; } return -1; } } // namespace QTerm qterm-0.7.3/src/qtermbbs.h000066400000000000000000000035131332762052600154400ustar00rootroot00000000000000#ifndef QTERMBBS_H #define QTERMBBS_H #include #include #include #include #include class QRect; #ifdef SCRIPT_ENABLED class QScriptEngine; #endif namespace QTerm { class TextLine; class Buffer; #ifdef SCRIPT_ENABLED class ScriptHelper; #endif class BBS { public: BBS(Buffer *); ~BBS(); #ifdef SCRIPT_ENABLED void setScript(QScriptEngine *, ScriptHelper *); #endif /* -1 -- undefined * 0 -- menu * 1 -- article or board list * 2 -- read * 3 -- edit */ void setPageState(); void setScreenStart(int); int getScreenStart(); bool setCursorPos(const QPoint&, QRect&, QRect&); bool isSelected(int); bool isSelected(const QPoint&); bool isUrl(QRect&, QRect&); bool isIP(QRect&, QRect&); bool isPageComplete(); bool checkUrl(QRect&, QRect&); bool checkIP(QRect&, QRect&); QString getUrl(); QString getIP(); int getPageState(); char getMenuChar(); QRect getSelectRect(); void updateSelectRect(); int getCursorType(const QPoint&); QString getMessage(); QString getText(int startpt, int endpt); void updateUrlList(); int checkUrlBegin(const QString & lineText, int index); int checkUrlEnd(const QString & lineText, int index); bool verifyUrl(int urlBegin, int urlEnd); protected: bool isUnicolor(TextLine *); bool isIllChar(QChar); Buffer *m_pBuffer; QRect m_rcUrl; QRect m_rcSelection; QString m_strUrl; QString m_strIP; char m_cMenuChar; int m_nPageState; QPoint m_ptCursor; int m_nScreenStart; QList< QPair > m_urlPosList; QString m_url; #ifdef SCRIPT_ENABLED QScriptEngine * m_scriptEngine; ScriptHelper * m_scriptHelper; #endif }; } // namespace QTerm #endif // QTERMBBS_H qterm-0.7.3/src/qtermbuffer.cpp000066400000000000000000000343651332762052600165070ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermbuffer.cpp REVISION: 2002.6.15 first created. AUTHOR: kingson *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. ******************************************************************************/ #include "qterm.h" #include "qtermbuffer.h" #include "qtermtextline.h" #include "termstring.h" #include #include #include //#include namespace QTerm { Buffer::Buffer(int line, int column, int limit) { m_lin = line; m_col = column; m_limit = limit; m_lines = 0; while (m_lineList.count() < m_lin) m_lineList.append(new TextLine(this)); m_curAttr = SETCOLOR(NO_COLOR) | SETATTR(NO_ATTR); m_caretX = 0; m_caretY = 0; m_oldCaretX = 0; m_oldCaretY = 0; m_tmpX = 0; m_tmpY = 0; m_tmpAttr = 0; m_top = 0; m_bottom = m_lin - 1; Insert_Mode = false; NewLine_Mode = false; m_ptSelStart = QPoint(-1, -1); m_ptSelEnd = QPoint(-1, -1); } Buffer::~Buffer() { } void Buffer::setSize(int col, int lin) { if (m_col == col && m_lin == lin) return; if (m_lin < lin) for (int i = 0; i < lin - m_lin; i++) m_lineList.append(new TextLine(this)); else if (m_lin > lin) for (int i = 0; i < m_lin - lin; i++) delete m_lineList.takeAt(m_lines + m_top); m_col = col; m_lin = lin; m_top = 0; m_bottom = m_lin - 1; m_caretY = qMin(m_caretY, lin - 1); m_oldCaretY = qMin(m_caretY, lin - 1); clearSelect(); emit windowSizeChanged(m_col, m_lin); emit bufferSizeChanged(); } int Buffer::columns() { return m_col; } int Buffer::lines() { return m_lin + m_lines; } int Buffer::line() { return m_lin; } TextLine * Buffer::at(int y) { return m_lineList.value(y , NULL); } TextLine * Buffer::screen(int y) { return m_lineList.value(y + m_lines , NULL); } void Buffer::setCurAttr(short attr) { m_curAttr = attr; } void Buffer::setBuffer(const QString & str, int n) { TextLine * line = m_lineList.value(m_lines + m_caretY, NULL); if (line == NULL) { qWarning("setBuffer null line"); return; } if (Insert_Mode /*bInsert*/) line->insertText(str, m_curAttr, m_caretX); else line->replaceText(str, m_curAttr, m_caretX); // FIXME: optimization moveCursorOffset(TermString(str).length(), 0); } void Buffer::saveAttr() { m_tmpAttr = m_curAttr; m_tmpX = m_caretX; m_tmpY = m_caretY; } void Buffer::restoreAttr() { TextLine * line = m_lineList.value(m_lines + m_tmpY, NULL); if (line == NULL) { qWarning("setBuffer null line"); return; } line->setAttr(m_tmpAttr, m_tmpX); } //nextline void Buffer::newLine() { if (NewLine_Mode) { moveCursor(0, m_caretY); return; } if (m_caretY == m_bottom) { if (m_bottom == m_lin - 1) addHistoryLine(1); else scrollLines(m_top, 1); } else if (m_caretY < m_lin - 1) moveCursorOffset(0, 1); } //table void Buffer::tab() { int x = (m_caretX + 8) & -8; // or ( caretX/8 + 1 ) * 8 moveCursor(x, m_caretY); QByteArray cstr; cstr.fill(' ', x - m_caretX); setBuffer(cstr, x - m_caretX); } void Buffer::setMargins(int top, int bottom) { m_top = qMax(top - 1, 0); m_bottom = qMin(qMax(bottom - 1, 0), m_lin - 1); } // cursor functions void Buffer::moveCursor(int x, int y) { // detect index boundary if (x >= m_col) x = m_col; if (x < 0) x = 0; int stop = m_caretY < m_top ? 0 : m_top; if (y < stop) y = stop; stop = m_caretY > m_bottom ? m_lin - 1 : m_bottom; if (y > stop) y = stop; m_caretX = x; m_caretY = y; } // void Buffer::restoreCursor() { moveCursor(m_saveX, m_saveY); } void Buffer::moveCursorOffset(int x, int y) { moveCursor(m_caretX + x, m_caretY + y); } void Buffer::saveCursor() { m_saveX = m_caretX; m_saveY = m_caretY; } void Buffer::cr() { m_caretX = 0; } // the screen oriented caret QPoint Buffer::caret() { return QPoint(m_caretX, m_caretY); } // the buffer oriented caret int Buffer::caretX() { return m_caretX; } int Buffer::caretY() { return m_caretY + m_lines; } // erase functions void Buffer::eraseStr(int n) { TextLine * line = m_lineList.at(m_caretY + m_lines); int x = line->getLength() - m_caretX; clearArea(m_caretX, m_caretY, qMin(n, x), 1, m_curAttr); } // delete functions void Buffer::deleteStr(int n) { TextLine * line = m_lineList.at(m_caretY + m_lines); int x = line->getLength() - m_caretX; if (n >= x) clearArea(m_caretX, m_caretY, x, 1, m_curAttr); else shiftStr(m_caretY, m_caretX, x, -n); } // insert functions void Buffer::insertStr(int n) { TextLine * line = m_lineList.at(m_caretY + m_lines); int x = line->getLength() - m_caretX; if (n >= x) clearArea(m_caretX, m_caretY, x, m_caretY, m_curAttr); else shiftStr(m_caretY, m_caretX, x, n); } // shift str in one line // num > 0 shift right void Buffer::shiftStr(int index, int startX, int len, int num) { if (!num) return; QByteArray cstr; cstr.fill(' ', qAbs(num)); TextLine * line = m_lineList.at(index + m_lines); if (num > 0) { // insert line->insertText(cstr, m_curAttr, startX); return; } if (len + startX > line->getLength()) len = line->getLength() - startX; if (num < 0) { // delete line->deleteText(startX + num, -num); line->insertText(cstr, m_curAttr, startX + len + num); return; } } void Buffer::reverseIndex() { if (m_caretY == m_top) { scrollLines(m_caretY, -1); } else { moveCursorOffset(0, -1); } } void Buffer::index() { if (m_caretY == m_bottom) { scrollLines(m_caretY, 1); } else { moveCursorOffset(0, 1); } } void Buffer::deleteLine(int n) { int y = m_bottom - m_caretY; if (n >= y) clearArea(0, m_caretY, -1, y, m_curAttr); else scrollLines(m_caretY, n); } void Buffer::insertLine(int n) { int y = m_bottom - m_caretY; if (n >= y) clearArea(0, m_caretY, -1, y, m_curAttr); else scrollLines(m_caretY, -n); } void Buffer::eraseToEndLine() { clearArea(m_caretX, m_caretY, -1, 1, m_curAttr); } void Buffer::eraseToBeginLine() { clearArea(0, m_caretY, m_caretX, 1, m_curAttr); } void Buffer::eraseEntireLine() { clearArea(0, m_caretY, -1, 1, m_curAttr); } //scroll line //num > 0 scroll up void Buffer::scrollLines(int startY, int num) { if (!num) return; if (num > 0) { // delete while (num) { delete m_lineList.takeAt(m_lines + startY); m_lineList.insert(m_lines + m_bottom, new TextLine(this)); num--; } } if (num < 0) { // insert while (num) { delete m_lineList.takeAt(m_lines + m_bottom); m_lineList.insert(m_lines + startY, new TextLine(this)); num++; } } for (int i = m_lines + startY; i < m_lines + m_bottom; i++) m_lineList.at(i)->setChanged(-1, -1); } void Buffer::eraseToEndScreen() { if (m_caretX == 0 && m_caretY == 0) { eraseEntireScreen(); return; } clearArea(m_caretX, m_caretY, -1, 1, m_curAttr); // erase to end line if (m_caretY < m_bottom - 1) // erase clearArea(0, m_caretY + 1, -1, m_bottom - m_caretY - 1, m_curAttr); } void Buffer::eraseToBeginScreen() { if (m_caretX == m_col - 1 && m_caretY == m_lin - 1) { eraseEntireScreen(); return; } clearArea(0, m_caretY, m_caretX, 1, m_curAttr); // erase to begin line if (m_caretY > 0) // erase clearArea(0, 0, -1, m_caretY - 1, m_curAttr); } void Buffer::eraseEntireScreen() { addHistoryLine(m_lin); clearArea(0, 0, m_col, m_bottom, m_curAttr); } // width = -1 : clear to end void Buffer::clearArea(int startX, int startY, int width, int height, short attr) { QByteArray cstr; TextLine * line; if (startY < m_top) startY = m_top; if (height > (int)(m_bottom - startY + 1)) height = m_bottom - startY; for (int i = startY; i < height + startY; i++) { line = m_lineList.at(i + m_lines); if (width == -1) { cstr.fill(' ', line->getLength() - startX); } else cstr.fill(' ', width); line->replaceText(cstr, attr, startX); } } void Buffer::addHistoryLine(int n) { while (n) { if (m_lines == m_limit) { delete m_lineList.takeFirst(); //m_ptSelStart.setY( m_ptSelStart.y()-1 ); //m_ptSelEnd.setY( m_ptSelEnd.y()-1 ); //if(m_ptSelStart.y()<0) // m_ptSelStart=m_ptSelEnd=QPoint(-1,-1); } m_lineList.append(new TextLine(this)); m_lines = qMin(m_lines + 1, m_limit); n--; } for (int i = m_lines + 0; i < m_lines + m_bottom; i++) m_lineList.at(i)->setChanged(-1, -1); emit bufferSizeChanged(); } void Buffer::startDecode() { m_oldCaretX = m_caretX; m_oldCaretY = m_caretY; } void Buffer::endDecode() { TextLine * line = m_lineList.at(m_oldCaretY + m_lines); line->setChanged(m_oldCaretX, m_oldCaretX + 1); line = m_lineList.at(m_caretY + m_lines); line->setChanged(m_caretX, m_caretX + 1); clearSelect(); } void Buffer::setMode(int mode) { switch (mode) { case INSERT_MODE: Insert_Mode = true; break; case NEWLINE_MODE: NewLine_Mode = true; break; default: break; } } void Buffer::resetMode(int mode) { switch (mode) { case INSERT_MODE: Insert_Mode = false; break; case NEWLINE_MODE: NewLine_Mode = false; break; default: break; } } void Buffer::setSelect(const QPoint& pt1, const QPoint& pt2, bool rect) { QPoint ptSelStart, ptSelEnd; if (pt1.y() == pt2.y()) { ptSelStart = pt1.x() < pt2.x() ? pt1 : pt2; ptSelEnd = pt1.x() > pt2.x() ? pt1 : pt2; } else { ptSelStart = pt1.y() < pt2.y() ? pt1 : pt2; ptSelEnd = pt1.y() > pt2.y() ? pt1 : pt2; } if (m_ptSelStart == m_ptSelEnd) { // the first for (int i = ptSelStart.y(); i <= m_ptSelEnd.y(); i++) at(i)->setChanged(-1, -1); } else { // find the changed area if (rect) { for (int i = qMin(ptSelStart.y(), m_ptSelStart.y()); i <= qMax(ptSelEnd.y(), m_ptSelEnd.y()); i++) at(i)->setChanged(-1, -1); } else { if (ptSelStart == m_ptSelStart) for (int i = qMin(ptSelEnd.y(), m_ptSelEnd.y()); i <= qMax(ptSelEnd.y(), m_ptSelEnd.y()); i++) at(i)->setChanged(-1, -1); else if (ptSelEnd == m_ptSelEnd) for (int i = qMin(ptSelStart.y(), m_ptSelStart.y()); i <= qMax(ptSelStart.y(), m_ptSelStart.y()); i++) at(i)->setChanged(-1, -1); else for (int i = qMin(ptSelStart.y(), m_ptSelStart.y()); i <= qMax(ptSelEnd.y(), m_ptSelEnd.y()); i++) at(i)->setChanged(-1, -1); } } m_ptSelStart = ptSelStart; m_ptSelEnd = ptSelEnd; } void Buffer::clearSelect() { if (m_ptSelStart == QPoint(-1,-1) || m_ptSelEnd == QPoint(-1,-1)) return; for (int i = m_ptSelStart.y(); i <= m_ptSelEnd.y(); i++) at(i)->setChanged(-1, -1); m_ptSelStart = m_ptSelEnd = QPoint(-1, -1); } bool Buffer::isSelected(int index) { return index >= m_ptSelStart.y() && index <= m_ptSelEnd.y(); } bool Buffer::isSelected(const QPoint& pt, bool rect) { if (rect) { int x1, x2; x1 = qMin(m_ptSelStart.x(), m_ptSelEnd.x()); x2 = qMax(m_ptSelStart.x(), m_ptSelEnd.x()); return pt.x() <= x2 && pt.x() >= x1 && pt.y() >= m_ptSelStart.y() && pt.y() <= m_ptSelEnd.y(); } if (pt.y() == m_ptSelStart.y() && m_ptSelStart.y() == m_ptSelEnd.y()) return pt.x() >= m_ptSelStart.x() && pt.x() <= m_ptSelEnd.x(); else if (pt.y() == m_ptSelStart.y()) return pt.x() >= m_ptSelStart.x(); else if (pt.y() == m_ptSelEnd.y()) return pt.x() <= m_ptSelEnd.x(); else return pt.y() > m_ptSelStart.y() && pt.y() < m_ptSelEnd.y(); } QString Buffer::getSelectText(bool rect, bool color, const QString & escape) { if (m_ptSelStart == QPoint(-1,-1) || m_ptSelEnd == QPoint(-1,-1)) return ""; QString strSelect = ""; QRect rc; QString strTemp; for (int i = m_ptSelStart.y(); i <= m_ptSelEnd.y(); i++) { rc = getSelectRect(i, rect); if (color) strTemp = m_lineList.at(i)->getAttrText(rc.left(), rc.width(), escape); else strTemp = m_lineList.at(i)->getText(rc.left(), rc.width()); //qDebug() << strTemp; //FIXME: potential problem? int pos = strTemp.lastIndexOf(QRegExp("[\\S]")); strTemp.truncate(pos + 1); strSelect += strTemp; // add newline except the last line if (i != m_ptSelEnd.y()) { #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) strSelect += '\r'; #endif strSelect += '\n'; } } return strSelect; } QRect Buffer::getSelectRect(int index, bool rect) { if (rect) return QRect(qMin(m_ptSelStart.x(), m_ptSelEnd.x()), index, qAbs(m_ptSelEnd.x() - m_ptSelStart.x()) + 1, 1); else if (m_ptSelStart.y() == m_ptSelEnd.y()) return QRect(m_ptSelStart.x(), index, qMin(m_ptSelEnd.x(), m_col) - m_ptSelStart.x() + 1, 1); else if (index == m_ptSelStart.y()) return QRect(m_ptSelStart.x(), index, qMax(0, m_col - m_ptSelStart.x()), 1); else if (index == m_ptSelEnd.y()) return QRect(0, index, qMin(m_col, m_ptSelEnd.x()+1), 1); else return QRect(0, index, m_col, 1); } } // namespace QTerm #include qterm-0.7.3/src/qtermbuffer.h000066400000000000000000000046741332762052600161540ustar00rootroot00000000000000#ifndef QTERMBUFFER_H #define QTERMBUFFER_H #include #include #include #define INSERT_MODE 0 #define NEWLINE_MODE 1 class QString; class QByteArray; class QRect; namespace QTerm { class TextLine; class Buffer : public QObject { Q_OBJECT public: Buffer(int, int, int); ~Buffer(); TextLine * at(int); TextLine * screen(int); void setSize(int, int); int columns(); int lines(); int line(); int caretX(); int caretY(); QPoint caret(); // string void setBuffer(const QString&, int n); void saveAttr(); void restoreAttr(); // attribute void setCurAttr(short); // string functions void deleteStr(int); void insertStr(int); void eraseStr(int); void deleteLine(int); void insertLine(int); void eraseToBeginLine(); void eraseToEndLine(); void eraseEntireLine(); void eraseToBeginScreen(); void eraseToEndScreen(); void eraseEntireScreen(); // cursor functions void moveCursorOffset(int, int); void moveCursor(int, int); void saveCursor(); void restoreCursor(); void reverseIndex(); void index(); void cr(); // non-printing characters void newLine(); void tab(); void setMargins(int, int); // mode set void setMode(int); void resetMode(int); // for test void startDecode(); void endDecode(); // selecting function void setSelect(const QPoint&, const QPoint&, bool); void clearSelect(); bool isSelected(const QPoint&, bool); bool isSelected(int); QString getSelectText(bool, bool, const QString &); QRect getSelectRect(int, bool); signals: void bufferSizeChanged(); void windowSizeChanged(int, int); protected: void shiftStr(int, int, int, int); void scrollLines(int, int); void clearArea(int, int, int, int, short); void addHistoryLine(int); // margins int m_top, m_bottom; // int m_col, m_lin, m_lines, m_limit; TextLine * m_pCurrentLine; QList m_lineList; // caret int m_caretX, m_caretY, m_saveX, m_saveY; int m_tmpX, m_tmpY; // attribute short m_curAttr; short m_tmpAttr; // Modes bool Insert_Mode, NewLine_Mode; // for test int m_oldCaretX, m_oldCaretY; // selecting QPoint m_ptSelStart; QPoint m_ptSelEnd; bool m_bPage; }; } // namespace QTerm #endif // QTERMBUFFER_H qterm-0.7.3/src/qtermcanvas.cpp000066400000000000000000000201521332762052600164760ustar00rootroot00000000000000#include "qtermcanvas.h" #include "qterm.h" #include "qtermconfig.h" #include "qtermglobal.h" #include #include #include #include #include #include #include #include #include namespace QTerm { // extern QString getSaveFileName(const QString&, QWidget*); Canvas::Canvas(QWidget *parent, Qt::WindowFlags f) : QScrollArea(parent) { setWindowFlags(f); //dirty trick if (f == 0) bEmbed = true; else bEmbed = false; m_pMenu = new QMenu(this); addAction(m_pMenu->addAction(tr("Original Size"), this, SLOT(oriSize()), Qt::Key_Z)); m_fitAction = m_pMenu->addAction(tr("Fit Window")); m_fitAction->setCheckable(true); m_fitAction->setShortcut(Qt::Key_X); m_fitAction->setChecked(true); connect(m_fitAction, SIGNAL(toggled(bool)), this, SLOT(fitWin(bool))); addAction(m_fitAction); m_pMenu->addSeparator(); addAction(m_pMenu->addAction(tr("Zoom In"), this, SLOT(zoomIn()), Qt::Key_Equal)); addAction(m_pMenu->addAction(tr("Zoom Out"), this, SLOT(zoomOut()), Qt::Key_Minus)); if (!bEmbed) addAction(m_pMenu->addAction(tr("Fullscreen"), this, SLOT(fullScreen()), Qt::Key_F)); m_pMenu->addSeparator(); addAction(m_pMenu->addAction(tr("Rotate CW 90"), this, SLOT(cwRotate()), Qt::Key_BracketRight)); addAction(m_pMenu->addAction(tr("Rotate CCW 90"), this, SLOT(ccwRotate()), Qt::Key_BracketLeft)); if (!bEmbed) { m_pMenu->addSeparator(); addAction(m_pMenu->addAction(tr("Save As..."), this, SLOT(saveImage()), Qt::Key_S)); addAction(m_pMenu->addAction(tr("Copy To..."), this, SLOT(copyImage()), Qt::Key_C)); addAction(m_pMenu->addAction(tr("Silent Copy"), this, SLOT(silentCopy()), Qt::Key_S + Qt::SHIFT)); addAction(m_pMenu->addAction(tr("Delete"), this, SLOT(deleteImage()), Qt::Key_D)); m_pMenu->addSeparator(); addAction(m_pMenu->addAction(tr("Exit"), this, SLOT(close()), Qt::Key_Q)); } bFitWin = true; label = new QLabel(viewport()); label->setScaledContents(true); label->setAlignment(Qt::AlignCenter); label->setText("No Preview Available"); setWidget(label); resize(200, 100); setAlignment(Qt::AlignCenter); } Canvas::~Canvas() { //delete label; //delete m_pMenu; } void Canvas::oriSize() { m_fitAction->setChecked(false); szImage = img.size(); if (!bEmbed) resize(img.size()+QSize(frameWidth()*2,frameWidth()*2)); adjustSize(viewport()->size()); } void Canvas::zoomIn() { m_fitAction->setChecked(false); resizeImage(0.05); } void Canvas::zoomOut() { m_fitAction->setChecked(false); resizeImage(-0.05); } void Canvas::fitWin(bool checked) { bFitWin = checked; if (bFitWin) adjustSize(maximumViewportSize()); } void Canvas::cwRotate() { rotateImage(90); } void Canvas::ccwRotate() { rotateImage(-90); } void Canvas::fullScreen() { if (!isFullScreen()) showFullScreen(); else showNormal(); } void Canvas::loadImage(QString name) { img.load(name); if (!img.isNull()) { strFileName = name; setWindowTitle(QFileInfo(name).fileName()); QSize szView(img.size()); szView.scale(1024, 768, Qt::KeepAspectRatio); if (szView.width() < img.width()) { szImage = szView; label->resize(szImage); label->setPixmap(scaleImage(szImage)); if (!bEmbed) resize(szView+QSize(frameWidth()*2,frameWidth()*2)); } else { szImage = img.size(); label->resize(szImage); label->setPixmap(QPixmap::fromImage(img)); if (!bEmbed) resize(szImage+QSize(frameWidth()*2,frameWidth()*2)); } if (bEmbed) fitWin(true); } else qWarning("cant load image"); } void Canvas::resizeImage(double ratio) { if (label->pixmap() == NULL) return; QSize szImg = szImage; QSize origSize = img.size(); szImg *= (1 + ratio); //we dont need so big if (szImg.width()/origSize.width() > 4 || szImg.height()/origSize.height() > 4) return; szImage = szImg; if (!isFullScreen() && !bEmbed) resize(szImage+QSize(frameWidth()*2,frameWidth()*2)); else adjustSize(viewport()->size()); } void Canvas::rotateImage(double ang) { QMatrix wm; wm.rotate(ang); img = img.transformed(wm); szImage = img.size(); adjustSize(viewport()->size()); } void Canvas::copyImage() { QFileInfo fi(strFileName); QString strSave = QFileDialog::getSaveFileName(this, "Choose a filename to save under", QDir::currentPath() + fi.fileName()); if (strSave.isEmpty()) return; QFile file(strFileName); if (file.open(QIODevice::ReadOnly)) { QFile save(strSave); if (save.open(QIODevice::WriteOnly)) { QByteArray ba = file.readAll(); QDataStream ds(&save); ds.writeRawData(ba, ba.size()); save.close(); } file.close(); } } void Canvas::silentCopy() { // save it to $savefiledialog QString strPath = Global::instance()->fileCfg()->getItemValue("global", "savefiledialog").toString(); QFileInfo fi(strFileName); QString strSave = strPath + "/" + fi.fileName(); fi.setFile(strSave); // add (%d) if exist int i = 1; while (fi.exists()) { strSave = QString("%1/%2(%3).%4") .arg(fi.dir().path()) .arg(fi.completeBaseName()) .arg(i) .arg(fi.suffix()); fi.setFile(strSave); } // copy it QFile file(strFileName); if (file.open(QIODevice::ReadOnly)) { QFile save(strSave); if (save.open(QIODevice::WriteOnly)) { QByteArray ba = file.readAll(); QDataStream ds(&save); ds.writeRawData(ba, ba.size()); save.close(); } file.close(); } } QPixmap Canvas::scaleImage(const QSize& sz) { return QPixmap::fromImage(img.scaled(sz)); } void Canvas::moveImage(double dx, double dy) { scrollContentsBy(widget()->width()*dx, widget()->height()*dy); } void Canvas::saveImage() { QFileInfo fi(strFileName); QString strSave = QFileDialog::getSaveFileName(this, tr("Choose a filename to save under"), QDir::currentPath() + fi.fileName()); if (strSave.isEmpty()) return; QString fmt = fi.suffix().toUpper(); if (!img.save(strSave, fmt.toLatin1())) QMessageBox::warning(this, tr("Failed to save file"), tr("Cant save file, maybe format not supported")); } void Canvas::deleteImage() { QFile::remove(strFileName); close(); } void Canvas::closeEvent(QCloseEvent *ce) { if (!bEmbed) delete this; } void Canvas::resizeEvent(QResizeEvent *re) { adjustSize(re->size()); } void Canvas::mousePressEvent(QMouseEvent *me) { if(me->button()&Qt::LeftButton && !bEmbed) { close(); return; } if (me->button()&Qt::RightButton) { m_pMenu->popup(me->globalPos()); } } void Canvas::keyPressEvent(QKeyEvent *ke) { switch (ke->key()) { case Qt::Key_Escape: if (isFullScreen()) showNormal(); else close(); break; case Qt::Key_Left: moveImage(-0.05, 0); break; case Qt::Key_Right: moveImage(0.05, 0); break; case Qt::Key_Up: moveImage(0, -0.05); break; case Qt::Key_Down: moveImage(0, 0.05); break; } } void Canvas::adjustSize(const QSize& szView) { if (label->pixmap() == NULL) { label->resize(width(), height()); return; } QSize szImg = szImage; if (bFitWin) { if (szImg.width() > szView.width() || szImg.height() > szView.height() || szImg.width() < img.width()) { szImg.scale(szView, Qt::KeepAspectRatio); } szImg = szImg.boundedTo(img.size()); } szImage = szImg; label->resize(szImage); label->setPixmap(scaleImage(szImage)); } } // namespace QTerm #include qterm-0.7.3/src/qtermcanvas.h000066400000000000000000000024041332762052600161430ustar00rootroot00000000000000#ifndef QTERMCANVAS_H #define QTERMCANVAS_H //Added by qt3to4: #include #include // #include // #include class QLabel; class QMenu; class QCloseEvent; class QMouseEvent; class QKeyEvent; class QResizeEvent; class QImage; namespace QTerm { class Canvas : public QScrollArea { Q_OBJECT public: Canvas(QWidget *parent = NULL, Qt::WindowFlags f = 0); ~Canvas(); void loadImage(QString); protected slots: void oriSize(); void zoomIn(); void zoomOut(); void fitWin(bool); void fullScreen(); void saveImage(); void copyImage(); void silentCopy(); void cwRotate(); void ccwRotate(); void deleteImage(); protected: void moveImage(double, double); void resizeImage(double); void rotateImage(double); void closeEvent(QCloseEvent *); void mousePressEvent(QMouseEvent*); void keyPressEvent(QKeyEvent *ke); void resizeEvent(QResizeEvent *re); void adjustSize(const QSize&); QPixmap scaleImage(const QSize&); protected: QLabel *label; bool bFitWin; QSize szImage; QString strFileName; QImage img; QMenu *m_pMenu; QAction * m_fitAction; //Very dirty trick, I hate it bool bEmbed; }; } // namespace QTerm #endif qterm-0.7.3/src/qtermconfig.cpp000066400000000000000000000141611332762052600164730ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermconfig.cpp REVISION: 2001.10.10 first created. 2004.5.3 rewritten by cppgx.bbs@smth.org 2008.5.6 rewritten by hooey *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermconfig.h" #include #include #include #include #include #include namespace QTerm { const QString Config::m_version = "1.11"; Config::Config(const QString & szFileName) { if (QFile::exists(szFileName)) { m_settings = new QSettings(szFileName, QSettings::IniFormat); checkVersion(szFileName); } else { m_settings = new QSettings(szFileName, QSettings::IniFormat); m_settings->setValue("version", m_version); } } Config::~Config() { save(); delete m_settings; } void Config::upgrade() { QStringList keys = m_settings->allKeys(); //QByteArray data; //foreach (QString eachKey, keys) { // data = m_settings->value(eachKey).toByteArray(); // m_settings->setValue(eachKey,QString::fromUtf8(data.data())); //} if (!m_settings->contains("version")) { m_settings->setValue("version", m_version); } addShortcuts(); addToolBars(); save(); } void Config::addShortcuts() { if (hasSection("Shortcuts")) return; m_settings->beginGroup("Shortcuts"); m_settings->setValue("actionAbout","F1"); m_settings->setValue("actionAddress","F2"); m_settings->setValue("actionQuickConnect","F3"); m_settings->setValue("actionRefresh","F5"); m_settings->setValue("actionFull","F6"); m_settings->setValue("actionScriptRun","F7"); m_settings->setValue("actionScriptStop","F8"); m_settings->setValue("actionCopyArticle","F9"); m_settings->setValue("actionViewMessage","F10"); m_settings->setValue("actionBoss","F12"); m_settings->setValue("actionCopy","Ctrl+Ins"); m_settings->setValue("actionPaste","Shift+Ins"); m_settings->endGroup(); } void Config::addToolBars() { if (hasSection("ToolBars")) return; m_settings->beginGroup("ToolBars"); QStringList listActions; listActions << "actionQuickConnect"; m_settings->setValue("terminalToolBar", listActions); listActions.clear(); listActions << "actionDisconnect" << "Separator" << "actionCopy" << "actionPaste" << "actionRect" << "actionColorCopy" << "Separator" << "actionFont" << "actionColor" << "actionRefresh" << "Separator" << "actionCurrentSession" << "Separator" << "actionCopyArticle" << "actionAntiIdle" << "actionAutoReply" << "actionViewMessage" << "actionMouse" << "actionBeep" << "actionReconnect"; m_settings->setValue("mainToolBar",listActions); m_settings->setValue("terminalToolBarShown", true); m_settings->setValue("keyToolBarShown", true); m_settings->setValue("mainToolBarShown",true); m_settings->endGroup(); } bool Config::checkVersion(const QString & szFileName) { QString version = m_settings->value("version").toString(); if (version.isEmpty()) { QMessageBox::warning(0, "Old Version","The version of your config file is outdated.\n" "It will be automatically updated, but you should check for errors"); upgrade(); } else if (m_version != version) { QString bakFile = szFileName+".bak"; QMessageBox::warning(0, "Version Mismath","The version of your config file is not match the current QTerm version.\n" "The old config file will be backed up as: "+bakFile); if (QFile::exists(bakFile)) { QFile::remove(bakFile); } QFile::copy(szFileName, bakFile); m_settings->setValue("version", m_version); upgrade(); return false; } return true; } bool Config::checkError() { QSettings::Status status = m_settings->status(); if (status == QSettings::NoError) { return true; } return false; } bool Config::save(const QString & szFileName) { if (!szFileName.isEmpty()) { QFileInfo fi(szFileName); Q_ASSERT(QString::compare(fi.absoluteFilePath(), m_settings->fileName()) == 0); } m_settings->sync(); return checkError(); } bool Config::hasSection(const QString & szSection) { QStringList section = m_settings->childGroups(); return section.contains(szSection); } bool Config::hasItem(const QString & szSection, const QString & szItemName) { QString key = szSection+"/"+szItemName; return m_settings->contains(key); } bool Config::setItemValue(const QString & szSection, const QString & szItemName, const QVariant & szItemValue) { QString key = szSection+"/"+szItemName; m_settings->setValue(key, szItemValue); return checkError(); } QVariant Config::getItemValue(const QString & szSection, const QString & szItemName) { QString key = szSection+"/"+szItemName; QVariant data = m_settings->value(key); return data; } bool Config::renameSection(const QString & szSection, const QString & szNewName) { if (hasSection(szNewName) || !hasSection(szSection)) { return false; } m_settings->beginGroup(szSection); QStringList keys = m_settings->allKeys(); m_settings->endGroup(); QVariant data; foreach (QString eachKey, keys) { data = m_settings->value(szSection+"/"+eachKey); m_settings->setValue(szNewName+"/"+eachKey,data); } deleteSection(szSection); return checkError(); } bool Config::deleteSection(const QString & szSection) { m_settings->beginGroup(szSection); m_settings->remove(""); m_settings->endGroup(); return checkError(); } bool Config::deleteItem(const QString & szSection, const QString & szItemName) { QString key = szSection+"/"+szItemName; m_settings->remove(key); return checkError(); } } // namespace QTerm qterm-0.7.3/src/qtermconfig.h000066400000000000000000000020101332762052600161260ustar00rootroot00000000000000#ifndef QTERMCFG_H #define QTERMCFG_H #include class QSettings; class QVariant; namespace QTerm { class Config { public: Config(const QString & szFileName ); ~Config(); bool save(const QString & szFileName = ""); bool setItemValue(const QString & szSection, const QString & szItemName,const QVariant & szItemValue); QVariant getItemValue(const QString & szSection, const QString & szItemName); bool deleteItem(const QString & szSection, const QString & szItemName); bool deleteSection(const QString & szSection); bool renameSection(const QString & szSection, const QString & szNewName); bool hasSection(const QString & szSection); bool hasItem(const QString & szSection, const QString & szItemName); private: bool checkError(); bool checkVersion(const QString & szFileName); void upgrade(); void addShortcuts(); void addToolBars(); static const QString m_version; QSettings * m_settings; }; } // namespace QTerm #endif //QTERMCONFIG_H qterm-0.7.3/src/qtermconvert.cpp000066400000000000000000007266721332762052600167270ustar00rootroot00000000000000/******************************************************************* * FILENAME: qtermconvert.cpp * REVISION: 2001.12.21 first created * * AUTHOR: kingson * hack from zh-autoconvert ******************************************************************/ /****************************************************************** * NOTE * This file may be used, distributed and modified without limitation. *******************************************************************/ #include "qtermconvert.h" #include #include #define BtoG_bad1 '\xa1' #define BtoG_bad2 '\xf5' #define GtoB_bad1 '\xa1' #define GtoB_bad2 '\xbc' #define HIGHBYTE(word) (word)>>8 & 0x00ff #define LOWBYTE(word) (word) & 0x00ff #define MAKEWORD(c1,c2) ( (c1)<<8 & 0xff00 ) | c2 namespace QTerm { Convert::Convert() { m_gbk = QTextCodec::codecForName("GBK"); m_big5 = QTextCodec::codecForName("Big5"); } Convert::~Convert( ){} QString Convert::S2T(const QString & source) { QByteArray tmp = m_gbk->fromUnicode(source); char * str = G2B(tmp.data(), tmp.size()); QString result = m_big5->toUnicode(str); return result; } QString Convert::T2S(const QString & source) { QByteArray tmp = m_big5->fromUnicode(source); char * str = B2G(tmp.data(), tmp.size()); QString result = m_gbk->toUnicode(str); return result; } char * Convert::G2B( const char * string, int length ) { static char save='\0'; if( length ==0 ) return 0; char * s = new char[length+2]; //because we may have the save char int len = length; const char * p = string; int n=0; if( save != '\0' ) { g2b( save, *p, s ); n=2; p++; save='\0'; len++; } while( p < string+length && *p != '\0' ) { if( *p & 0x80 ) { // reach the end this is half of a word, save it if( p == string+length-1 ) { save = *p; len--; break; } g2b( *p, *(p+1), s+n); n+=2; p+=2; } else { s[n]=*p; p++; n++; } } s[len]='\0'; return s; } void Convert::g2b( unsigned char c1, unsigned char c2, char * s) { unsigned int i; if( (c2 >= 0xa1) && (c2 <= 0xfe) ) { if( (c1 >= 0xa1) && (c1 <= 0xa9) ) { i = ( (c1-0xa1)*94 + (c2-0xa1) )*2; s[0] = GtoB[i++]; s[1] = GtoB[i]; return; } else if( (c1 >= 0xb0) && (c1 <= 0xf7) ) { i = ( (c1-0xb0+9)*94 + (c2-0xa1) )*2; s[0] = GtoB[i++]; s[1] = GtoB[i]; return; } } s[0] = GtoB_bad1; s[1] = GtoB_bad2; } char * Convert::B2G( const char * string, int length ) { static char save='\0'; if( length ==0 ) return 0; char * s = new char[length+2]; //because we may have the save char int len = length; const char * p = string; int n=0; if( save != '\0' ) { b2g( save, *p, s ); n=2; p++; save='\0'; len++; } while( p < string+length && *p != '\0' ) { if( *p & 0x80 ) { // reach the end this is half of a word, save it if( p == string+length-1 ) { save = *p; len--; break; } b2g( *p, *(p+1), s+n); p+=2; n+=2; } else { s[n]=*p; p++; n++; } } s[len]='\0'; return s; } void Convert::b2g( unsigned char c1, unsigned char c2, char * s) { unsigned int i; if( (c1 >= 0xa1) && (c1 <= 0xf9) ) { if( (c2 >= 0x40) && (c2 <= 0x7e) ) { i = ( (c1-0xa1)*157 + (c2-0x40) )*2; s[0] = BtoG[i++]; s[1] = BtoG[i]; return; } else if( (c2 >= 0xa1) && (c2 <= 0xfe) ) { i = ( (c1-0xa1)*157 + (c2-0xa1) + 63 )*2; s[0] = BtoG[i++]; s[1] = BtoG[i]; return; } } s[0] = BtoG_bad1; s[1] = BtoG_bad2; } unsigned char Convert::GtoB[] = { 0xa1,0x40, 0xa1,0x42, 0xa1,0x43, 0xa1,0x4f, 0xa1,0xc2, 0xa1,0xbc, 0xa1,0x4c, 0xa1,0xb2, 0xa1,0xbc, 0xa2,0x77, 0xa1,0xe3, 0xa1,0xfc, 0xa1,0x4b, 0xa1,0xa5, 0xa1,0xa6, 0xa1,0xa7, 0xa1,0xa8, 0xa1,0x65, 0xa1,0x66, 0xa1,0x71, 0xa1,0x72, 0xa1,0x6d, 0xa1,0x6e, 0xa1,0x75, 0xa1,0x76, 0xa1,0x79, 0xa1,0x7a, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0x69, 0xa1,0x6a, 0xa1,0xd3, 0xa1,0xd1, 0xa1,0xd2, 0xa1,0x4a, 0xa3,0x4e, 0xa1,0xbc, 0xa3,0x55, 0xa3,0x53, 0xa1,0xe5, 0xa1,0xe4, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xd4, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xe7, 0xa1,0xbc, 0xa1,0xf3, 0xa1,0xec, 0xa1,0xed, 0xa1,0xdd, 0xa1,0xbc, 0xa1,0xdc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xda, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xd8, 0xa1,0xd9, 0xa1,0xdb, 0xa1,0xee, 0xa1,0xef, 0xa1,0xf1, 0xa1,0xf0, 0xa2,0x58, 0xa1,0xac, 0xa1,0xaa, 0xa2,0x4a, 0xa2,0x43, 0xa1,0xbc, 0xa2,0x46, 0xa2,0x47, 0xa1,0xbc, 0xa1,0xb1, 0xa1,0xbc, 0xa1,0xb8, 0xa1,0xb9, 0xa1,0xb3, 0xa1,0xb4, 0xa1,0xb7, 0xa1,0xba, 0xa1,0xbb, 0xa1,0xbc, 0xa1,0xbd, 0xa1,0xb5, 0xa1,0xb6, 0xa1,0xb0, 0xa1,0xf7, 0xa1,0xf6, 0xa1,0xf4, 0xa1,0xf5, 0xa2,0xa4, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0xb9, 0xa2,0xba, 0xa2,0xbb, 0xa2,0xbc, 0xa2,0xbd, 0xa2,0xbe, 0xa2,0xbf, 0xa2,0xc0, 0xa2,0xc1, 0xa2,0xc2, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0x49, 0xa1,0xa9, 0xa1,0xad, 0xa2,0x43, 0xa2,0x48, 0xa1,0xae, 0xa1,0xac, 0xa1,0x5d, 0xa1,0x5e, 0xa1,0xaf, 0xa1,0xcf, 0xa1,0x41, 0xa1,0xd0, 0xa1,0x44, 0xa1,0xfe, 0xa2,0xaf, 0xa2,0xb0, 0xa2,0xb1, 0xa2,0xb2, 0xa2,0xb3, 0xa2,0xb4, 0xa2,0xb5, 0xa2,0xb6, 0xa2,0xb7, 0xa2,0xb8, 0xa1,0x47, 0xa1,0x46, 0xa1,0xd5, 0xa1,0xd7, 0xa1,0xd6, 0xa1,0x48, 0xa2,0x49, 0xa2,0xcf, 0xa2,0xd0, 0xa2,0xd1, 0xa2,0xd2, 0xa2,0xd3, 0xa2,0xd4, 0xa2,0xd5, 0xa2,0xd6, 0xa2,0xd7, 0xa2,0xd8, 0xa2,0xd9, 0xa2,0xda, 0xa2,0xdb, 0xa2,0xdc, 0xa2,0xdd, 0xa2,0xde, 0xa2,0xdf, 0xa2,0xe0, 0xa2,0xe1, 0xa2,0xe2, 0xa2,0xe3, 0xa2,0xe4, 0xa2,0xe5, 0xa2,0xe6, 0xa2,0xe7, 0xa2,0xe8, 0xa1,0xa3, 0xa2,0x40, 0xa1,0xa4, 0xa1,0x73, 0xa1,0x5a, 0xa1,0xab, 0xa2,0xe9, 0xa2,0xea, 0xa2,0xeb, 0xa2,0xec, 0xa2,0xed, 0xa2,0xee, 0xa2,0xef, 0xa2,0xf0, 0xa2,0xf1, 0xa2,0xf2, 0xa2,0xf3, 0xa2,0xf4, 0xa2,0xf5, 0xa2,0xf6, 0xa2,0xf7, 0xa2,0xf8, 0xa2,0xf9, 0xa2,0xfa, 0xa2,0xfb, 0xa2,0xfc, 0xa2,0xfd, 0xa2,0xfe, 0xa3,0x40, 0xa3,0x41, 0xa3,0x42, 0xa3,0x43, 0xa1,0x61, 0xa1,0x55, 0xa1,0x62, 0xa1,0xc2, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa3,0x44, 0xa3,0x45, 0xa3,0x46, 0xa3,0x47, 0xa3,0x48, 0xa3,0x49, 0xa3,0x4a, 0xa3,0x4b, 0xa3,0x4c, 0xa3,0x4d, 0xa3,0x4e, 0xa3,0x4f, 0xa3,0x50, 0xa3,0x51, 0xa3,0x52, 0xa3,0x53, 0xa3,0x54, 0xa3,0x55, 0xa3,0x56, 0xa3,0x57, 0xa3,0x58, 0xa3,0x59, 0xa3,0x5a, 0xa3,0x5b, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa3,0x5c, 0xa3,0x5d, 0xa3,0x5e, 0xa3,0x5f, 0xa3,0x60, 0xa3,0x61, 0xa3,0x62, 0xa3,0x63, 0xa3,0x64, 0xa3,0x65, 0xa3,0x66, 0xa3,0x67, 0xa3,0x68, 0xa3,0x69, 0xa3,0x6a, 0xa3,0x6b, 0xa3,0x6c, 0xa3,0x6d, 0xa3,0x6e, 0xa3,0x6f, 0xa3,0x70, 0xa3,0x71, 0xa3,0x72, 0xa3,0x73, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa3,0x74, 0xa3,0x75, 0xa3,0x76, 0xa3,0x77, 0xa3,0x78, 0xa3,0x79, 0xa3,0x7a, 0xa3,0x7b, 0xa3,0x7c, 0xa3,0x7d, 0xa3,0x7e, 0xa3,0xa1, 0xa3,0xa2, 0xa3,0xa3, 0xa3,0xa4, 0xa3,0xa5, 0xa3,0xa6, 0xa3,0xa7, 0xa3,0xa8, 0xa3,0xa9, 0xa3,0xaa, 0xa3,0xab, 0xa3,0xac, 0xa3,0xad, 0xa3,0xae, 0xa3,0xaf, 0xa3,0xb0, 0xa3,0xb1, 0xa3,0xb2, 0xa3,0xb3, 0xa3,0xb4, 0xa3,0xb5, 0xa3,0xb6, 0xa3,0xb7, 0xa3,0xb8, 0xa3,0xb9, 0xa3,0xba, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x77, 0xa1,0xbc, 0xa2,0x78, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x7a, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x7b, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x7c, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x7d, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x75, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x74, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x73, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x72, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa2,0x71, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xb0,0xda, 0xaa,0xfc, 0xae,0x4a, 0xae,0xc1, 0xab,0x75, 0xad,0xfc, 0xab,0x73, 0xbd,0x4a, 0xc0,0xf9, 0xc4,0xa7, 0xb8,0x47, 0xa6,0xe3, 0xc3,0xaa, 0xb7,0x52, 0xb9,0x69, 0xbe,0x62, 0xae,0xf2, 0xa6,0x77, 0xad,0xcd, 0xab,0xf6, 0xb7,0x74, 0xa9,0xa4, 0xd3,0x69, 0xae,0xd7, 0xbb,0xea, 0xa9,0xf9, 0xaf,0x73, 0xa5,0x57, 0xb1,0xce, 0xbc,0xf5, 0xbf,0xac, 0xc3,0xcd, 0xb6,0xc6, 0xb6,0xf8, 0xbe,0xd2, 0xbf,0x44, 0xaa,0xdd, 0xae,0xc3, 0xa5,0xb6, 0xa5,0x7a, 0xa7,0x61, 0xaf,0xb9, 0xa4,0x4b, 0xac,0xcd, 0xa4,0xda, 0xa9,0xde, 0xb6,0x5b, 0xb9,0x76, 0xa7,0xe2, 0xaf,0xd2, 0xc5,0xf2, 0xc5,0x51, 0xbd,0x7d, 0xaa,0xa8, 0xa5,0xd5, 0xac,0x66, 0xa6,0xca, 0xc2,0x5c, 0xa8,0xd5, 0xb1,0xd1, 0xab,0xf4, 0xde,0xfb, 0xb4,0xb3, 0xaf,0x5a, 0xb7,0x68, 0xa7,0xe6, 0xaf,0xeb, 0xb9,0x7b, 0xaa,0x4f, 0xaa,0xa9, 0xa7,0xea, 0xa9,0xd5, 0xa6,0xf1, 0xc3,0xa4, 0xa5,0x62, 0xbf,0xec, 0xb2,0xcc, 0xa8,0xb9, 0xc0,0xb0, 0xb1,0xf5, 0xba,0x5d, 0xbb,0x48, 0xb8,0x6a, 0xb4,0xce, 0xbd,0x53, 0xb0,0x46, 0xc2,0xe9, 0xb3,0xc4, 0xc1,0xbd, 0xad,0x63, 0xad,0x4d, 0xa5,0x5d, 0xbd,0xc7, 0xad,0xe9, 0xc1,0xa1, 0xb9,0x72, 0xab,0x4f, 0xb3,0xf9, 0xb9,0xa1, 0xc4,0x5f, 0xa9,0xea, 0xb3,0xf8, 0xbc,0xc9, 0xb0,0x5c, 0xc0,0x6a, 0xc3,0x7a, 0xaa,0x4d, 0xb8,0x4f, 0xb4,0x64, 0xa8,0xf5, 0xa5,0x5f, 0xbd,0xfa, 0xad,0x49, 0xa8,0xa9, 0xbe,0x58, 0xad,0xbf, 0xaf,0x56, 0xb3,0xc6, 0xbe,0xce, 0xb5,0x48, 0xb3,0x51, 0xa9,0x62, 0xad,0x66, 0xa5,0xbb, 0xb2,0xc2, 0xb1,0x59, 0xc1,0x5e, 0xac,0xc7, 0xac,0xa6, 0xc2,0xdb, 0xb0,0x6e, 0xb9,0x47, 0xbb,0xf3, 0xa4,0xf1, 0xbb,0xc0, 0xb5,0xa7, 0xa9,0xbc, 0xba,0xd1, 0xe3,0xc9, 0xbd,0xaa, 0xb2,0xa6, 0xc0,0xc5, 0xcf,0x68, 0xb9,0xf4, 0xa7,0xc8, 0xde,0xcd, 0xb3,0xac, 0xb1,0xcd, 0xb9,0xfa, 0xa5,0xb2, 0xb9,0x40, 0xbe,0xc0, 0xc1,0x75, 0xc1,0xd7, 0xb0,0xa1, 0xc3,0x40, 0xc3,0xe4, 0xbd,0x73, 0xb6,0x53, 0xab,0xf3, 0xab,0x4b, 0xc5,0xdc, 0xa4,0xcb, 0xbf,0xeb, 0xc5,0x47, 0xc4,0x7c, 0xb9,0x4d, 0xbc,0xd0, 0xb3,0x43, 0xbd,0xa8, 0xaa,0xed, 0xc5,0xbe, 0xe5,0x78, 0xa7,0x4f, 0xc3,0xa7, 0xb1,0x6c, 0xd9,0x79, 0xc3,0x78, 0xc0,0xd8, 0xbb,0xab, 0xec,0xe8, 0xa7,0x4c, 0xa6,0x42, 0xac,0x60, 0xa4,0xfe, 0xaa,0xc3, 0xbb,0xe6, 0xac,0xb1, 0xaf,0x66, 0xa8,0xc3, 0xac,0xc1, 0xb5,0xd4, 0xbc,0xbd, 0xbc,0xb7, 0xd2,0xdc, 0xaa,0x69, 0xb3,0xd5, 0xab,0x6b, 0xb7,0x69, 0xb9,0x60, 0xba,0xe4, 0xa7,0x42, 0xa9,0xad, 0xb2,0xed, 0xb2,0xe4, 0xbb,0x4b, 0xb4,0xf1, 0xaa,0x79, 0xbb,0xe9, 0xae,0xb7, 0xa4,0x52, 0xad,0xf7, 0xb8,0xc9, 0xb0,0xf0, 0xa4,0xa3, 0xa5,0xac, 0xa8,0x42, 0xc3,0xaf, 0xb3,0xa1, 0xa9,0xc6, 0xc0,0xbf, 0xb2,0x71, 0xb5,0xf4, 0xa7,0xf7, 0xa4,0x7e, 0xb0,0x5d, 0xb8,0x42, 0xbd,0xf2, 0xb1,0xc4, 0xb1,0x6d, 0xb5,0xe6, 0xbd,0xb2, 0xc0,0x5c, 0xb0,0xd1, 0xc5,0xfa, 0xb4,0xdd, 0xba,0x46, 0xba,0x47, 0xc0,0xe9, 0xbb,0x61, 0xbf,0xb5, 0xad,0xdc, 0xb7,0xc9, 0xc2,0xc3, 0xbe,0xde, 0xc1,0x57, 0xbc,0xd1, 0xb1,0xe4, 0xaf,0xf3, 0xb4,0x5a, 0xb5,0xa6, 0xb0,0xbc, 0xa5,0x55, 0xb4,0xfa, 0xbc,0x68, 0xf3,0x4f, 0xb4,0xa1, 0xa4,0x65, 0xd3,0xb3, 0xaf,0xf9, 0xac,0x64, 0xe2,0xed, 0xb7,0x67, 0xb9,0xee, 0xa7,0xc3, 0xae,0x74, 0xb8,0xd2, 0xa9,0xee, 0xae,0xe3, 0xb0,0x5b, 0xc4,0x65, 0xba,0x55, 0xc2,0xcd, 0xc6,0x61, 0xc5,0xfe, 0xc4,0xf1, 0xc3,0xea, 0xb2,0xa3, 0xc4,0xc4, 0xc5,0xb8, 0xa9,0xf7, 0xb2,0x73, 0xb3,0xf5, 0xb9,0xc1, 0xb1,0x60, 0xaa,0xf8, 0xc0,0x76, 0xb8,0x7a, 0xbc,0x74, 0xb4,0xaf, 0xba,0x5a, 0xb0,0xdb, 0xad,0xd2, 0xb6,0x57, 0xa7,0xdb, 0xb6,0x72, 0xb4,0xc2, 0xbc,0x4a, 0xbc,0xe9, 0xb1,0x5f, 0xa7,0x6e, 0xaa,0xa3, 0xa8,0xae, 0xa7,0xe8, 0xba,0x4d, 0xb4,0x77, 0xb9,0xfd, 0xba,0xab, 0xd7,0xeb, 0xa6,0xda, 0xa8,0xb0, 0xb9,0xd0, 0xb1,0xe1, 0xa7,0xd5, 0xa8,0x49, 0xb3,0xaf, 0xb6,0x58, 0xc5,0xa8, 0xbc,0xb5, 0xba,0xd9, 0xab,0xb0, 0xbe,0xed, 0xa6,0xa8, 0xa7,0x65, 0xad,0xbc, 0xb5,0x7b, 0xc3,0x67, 0xbc,0xe1, 0xb8,0xdb, 0xa9,0xd3, 0xb3,0x78, 0xc1,0xfe, 0xaf,0xaf, 0xa6,0x59, 0xb7,0xf6, 0xab,0xf9, 0xb0,0xcd, 0xa6,0xc0, 0xbf,0xf0, 0xa6,0xa2, 0xb9,0xa3, 0xae,0xa2, 0xbe,0xa6, 0xa8,0xd7, 0xa4,0xd8, 0xa8,0xaa, 0xaf,0xcd, 0xa5,0xb8, 0xbf,0x4b, 0xa5,0x52, 0xa8,0x52, 0xc2,0xce, 0xb1,0x52, 0xc3,0x64, 0xa9,0xe2, 0xb9,0x53, 0xc3,0xa5, 0xc5,0x43, 0xb8,0x59, 0xb7,0x54, 0xc4,0x77, 0xa4,0xb3, 0xba,0xf7, 0xe2,0xe4, 0xc1,0xe0, 0xaf,0xe4, 0xaa,0xec, 0xa5,0x58, 0xc3,0x6f, 0xbc,0x70, 0xc3,0xdc, 0xbe,0x53, 0xc2,0xfa, 0xde,0x51, 0xb0,0xa3, 0xb7,0xa1, 0xc2,0xa6, 0xc0,0x78, 0xc5,0xf7, 0xdd,0x7a, 0xc4,0xb2, 0xb3,0x42, 0xb4,0xa2, 0xa4,0x74, 0xac,0xef, 0xdd,0xdc, 0xb6,0xc7, 0xb2,0xee, 0xb3,0xdd, 0xa6,0xea, 0xbd,0x48, 0xb5,0xa1, 0xbc,0x6c, 0xa7,0xc9, 0xc2,0xf4, 0xb3,0xd0, 0xa7,0x6a, 0xaa,0xa4, 0xb4,0xa8, 0xc1,0xe8, 0xab,0xab, 0xac,0x4b, 0xdd,0xcf, 0xbe,0x4a, 0xae,0x42, 0xb2,0x45, 0xaf,0xc2, 0xc4,0xf8, 0xc2,0x57, 0xba,0xef, 0xb2,0xab, 0xaf,0xfd, 0xba,0xcf, 0xbb,0xdb, 0xc3,0xe3, 0xb7,0x4f, 0xb2,0xa1, 0xb5,0xfc, 0xa6,0xb9, 0xa8,0xeb, 0xbd,0xe7, 0xa6,0xb8, 0xc1,0x6f, 0xbd,0xb5, 0xa7,0x77, 0xa5,0x5e, 0xb1,0x71, 0xc2,0x4f, 0xb4,0xea, 0xb2,0xca, 0xbe,0x4c, 0xc1,0x4c, 0xab,0x50, 0xf9,0x4f, 0xbf,0x79, 0xc2,0xab, 0xba,0x52, 0xb1,0x5a, 0xb6,0xca, 0xaf,0xdc, 0xb7,0xf1, 0xba,0xe9, 0xb2,0x66, 0xbb,0x41, 0xa7,0xf8, 0xa6,0x73, 0xa4,0x6f, 0xbd,0x52, 0xbc,0xbc, 0xb7,0x62, 0xb1,0xb9, 0xae,0xc0, 0xbf,0xf9, 0xb7,0x66, 0xb9,0x46, 0xb5,0xaa, 0xbd,0x44, 0xa5,0xb4, 0xa4,0x6a, 0xa7,0x62, 0xa4,0xef, 0xd8,0x56, 0xc0,0xb9, 0xb1,0x61, 0xac,0x70, 0xa5,0x4e, 0xb6,0x55, 0xb3,0x55, 0xab,0xdd, 0xb6,0x65, 0xab,0xe5, 0xaf,0xd4, 0xbe,0xe1, 0xa4,0xa6, 0xb3,0xe6, 0xe8,0x58, 0xe5,0xb8, 0xc1,0x78, 0xa5,0xb9, 0xb4,0xe1, 0xa6,0xfd, 0xbc,0xaa, 0xb2,0x48, 0xbd,0xcf, 0xbc,0x75, 0xb3,0x4a, 0xb7,0xed, 0xbe,0xd7, 0xc4,0xd2, 0xc0,0xfa, 0xc0,0xc9, 0xa4,0x4d, 0xb7,0x6f, 0xc1,0xd0, 0xad,0xcb, 0xae,0x71, 0xc3,0xab, 0xbe,0xc9, 0xa8,0xec, 0xbd,0x5f, 0xb1,0xa5, 0xb9,0x44, 0xb5,0x73, 0xbc,0x77, 0xb1,0x6f, 0xaa,0xba, 0xc3,0xde, 0xbf,0x4f, 0xb5,0x6e, 0xb5,0xa5, 0xc0,0xfc, 0xb9,0xb9, 0xbe,0x48, 0xb3,0xf6, 0xa7,0x43, 0xba,0x77, 0xad,0x7d, 0xbc,0xc4, 0xb2,0xc3, 0xa8,0x66, 0xba,0xb0, 0xbb,0x43, 0xb9,0xde, 0xa9,0xe8, 0xa9,0xb3, 0xa6,0x61, 0xb8,0xa6, 0xb2,0xc4, 0xab,0xd2, 0xa7,0xcc, 0xbb,0xbc, 0xbd,0x6c, 0xc4,0x41, 0xd5,0x69, 0xb7,0xbf, 0xb8,0x4b, 0xc2,0x49, 0xa8,0xe5, 0xc0,0x51, 0xb9,0xd4, 0xb9,0x71, 0xa6,0xfa, 0xa8,0x6c, 0xa9,0xb1, 0xb1,0x7d, 0xb3,0xfe, 0xbe,0xfd, 0xb7,0xb5, 0xb8,0x4d, 0xa5,0x70, 0xc0,0x4a, 0xad,0xe4, 0xa4,0x4e, 0xb1,0xbc, 0xa6,0x51, 0xb3,0xa8, 0xbd,0xd5, 0xb6,0x5e, 0xaf,0x52, 0xba,0xd0, 0xbd,0xba, 0xad,0xa1, 0xbf,0xd2, 0xc5,0x7c, 0xa4,0x42, 0xa8,0x6e, 0xa5,0x6d, 0xb0,0x76, 0xb3,0xbb, 0xb9,0xa9, 0xbf,0xf5, 0xa9,0x77, 0xad,0x71, 0xa5,0xe1, 0xaa,0x46, 0xa5,0x56, 0xb8,0xb3, 0xc0,0xb4, 0xb0,0xca, 0xb4,0xc9, 0xcb,0xbe, 0xab,0xf0, 0xad,0xe1, 0xac,0x7d, 0xb0,0xc2, 0xa7,0xdd, 0xb0,0xab, 0xb0,0x7e, 0xa8,0xa7, 0xb3,0x72, 0xb5,0x6b, 0xb3,0xa3, 0xb7,0xfe, 0xac,0x72, 0xc3,0x7d, 0xbf,0x57, 0xc5,0xaa, 0xb0,0xf4, 0xb8,0x40, 0xbd,0xe4, 0xa7,0xf9, 0xc1,0xe1, 0xa8,0x7b, 0xab,0xd7, 0xb4,0xe7, 0xa7,0xaa, 0xba,0xdd, 0xb5,0x75, 0xc1,0xeb, 0xac,0x71, 0xc2,0x5f, 0xbd,0x76, 0xb0,0xef, 0xa7,0x49, 0xb6,0xa4, 0xb9,0xef, 0xbc,0x5b, 0xbe,0xb7, 0xc3,0xdb, 0xb4,0xb0, 0xb9,0x79, 0xa7,0x79, 0xb6,0x77, 0xac,0xde, 0xb9,0x50, 0xd5,0x73, 0xce,0x47, 0xa6,0x68, 0xb9,0xdc, 0xce,0x57, 0xb8,0xfa, 0xa6,0xb7, 0xb8,0xf6, 0xb2,0xeb, 0xa8,0xef, 0xb4,0x6b, 0xbc,0x5a, 0xb8,0xbf, 0xae,0x6f, 0xc3,0x5a, 0xab,0x58, 0xc3,0x42, 0xb3,0x5f, 0xae,0x5a, 0xb4,0x63, 0xa4,0xcc, 0xa7,0xe3, 0xb9,0x4b, 0xb6,0x6b, 0xbe,0x6a, 0xae,0xa6, 0xa6,0xd3, 0xa8,0xe0, 0xa6,0xd5, 0xba,0xb8, 0xbb,0xe7, 0xac,0x7c, 0xa4,0x47, 0xb6,0x4c, 0xb5,0x6f, 0xbb,0x40, 0xb5,0xad, 0xa5,0xef, 0xa5,0x46, 0xbb,0xd6, 0xaa,0x6b, 0xb5,0x57, 0xc3,0xbf, 0xa6,0x7c, 0xb5,0x66, 0xc2,0xbd, 0xbc,0xd4, 0xc4,0x73, 0xb3,0xab, 0xc1,0x63, 0xa4,0x5a, 0xb7,0xd0, 0xa4,0xcf, 0xaa,0xf0, 0xad,0x53, 0xb3,0x63, 0xa5,0xc7, 0xb6,0xba, 0xaa,0x78, 0xa7,0x7b, 0xaa,0xda, 0xa4,0xe8, 0xaa,0xd5, 0xa9,0xd0, 0xa8,0xbe, 0xa7,0xab, 0xa5,0xe9, 0xb3,0x58, 0xaf,0xbc, 0xa9,0xf1, 0xb5,0xe1, 0xab,0x44, 0xb0,0xd8, 0xad,0xb8, 0xaa,0xce, 0xad,0xea, 0xbd,0xda, 0xa7,0x70, 0xaa,0xcd, 0xbc,0x6f, 0xaa,0x6d, 0xb6,0x4f, 0xaa,0xe2, 0xd7,0xf4, 0xa7,0x68, 0xaa,0x5e, 0xa4,0xc0, 0xaf,0xc9, 0xbc,0x58, 0xb5,0x49, 0xa8,0x57, 0xaf,0xbb, 0xbe,0xc4, 0xa5,0xf7, 0xa9,0xc1, 0xbc,0xab, 0xc1,0x54, 0xc2,0xd7, 0xab,0xca, 0xb7,0xac, 0xb8,0xc1, 0xae,0x70, 0xbe,0x57, 0xad,0xb7, 0xba,0xc6, 0xb2,0x6c, 0xb3,0x7b, 0xb6,0xbe, 0xc1,0x5f, 0xbf,0xd8, 0xa9,0x5e, 0xbb,0xf1, 0xa6,0xf2, 0xa7,0x5f, 0xa4,0xd2, 0xbc,0xc5, 0xbd,0xa7, 0xb9,0xe5, 0xa7,0xdf, 0xa9,0xd8, 0xbf,0xe7, 0xb4,0x54, 0xac,0x74, 0xb2,0xc5, 0xa5,0xf1, 0xab,0x52, 0xaa,0x41, 0xaf,0x42, 0xb2,0x65, 0xba,0xd6, 0xb5,0xf6, 0xa5,0xb1, 0xa8,0x6a, 0xbc,0xbe, 0xbb,0xb2, 0xad,0xc1, 0xb0,0x79, 0xa9,0xf2, 0xb2,0xe3, 0xb5,0xc6, 0xa9,0xb2, 0xbb,0x47, 0xad,0x75, 0xb0,0xc6, 0xc2,0xd0, 0xbd,0xe1, 0xb4,0x5f, 0xb3,0xc5, 0xa5,0x49, 0xaa,0xfa, 0xa4,0xf7, 0xb8,0xa1, 0xad,0x74, 0xb4,0x49, 0xad,0x72, 0xaa,0xfe, 0xb0,0xfc, 0xbf,0xa3, 0xa9,0x4a, 0xbe,0xbf, 0xb9,0xc7, 0xb8,0xd3, 0xa7,0xef, 0xb7,0xa7, 0xb6,0x74, 0xbb,0x5c, 0xb5,0x40, 0xb7,0x46, 0xa5,0xcc, 0xb1,0xec, 0xac,0x61, 0xac,0xf1, 0xa8,0x78, 0xbb,0xb0, 0xb7,0x50, 0xb5,0x7a, 0xb4,0xb1, 0xc6,0x42, 0xa9,0xa3, 0xad,0xe8, 0xbf,0xfb, 0xac,0xfb, 0xa8,0x7a, 0xba,0xf5, 0xb1,0x5e, 0xb4,0xe4, 0xba,0x62, 0xbf,0x74, 0xaf,0x6f, 0xb0,0xaa, 0xbb,0x49, 0xaf,0xcc, 0xbf,0x7c, 0xb7,0x64, 0xc2,0xee, 0xbd,0x5a, 0xa7,0x69, 0xad,0xf4, 0xba,0x71, 0xc0,0xc1, 0xa4,0xe0, 0xc2,0x46, 0xaf,0xde, 0xaa,0xb8, 0xb3,0xce, 0xad,0xb2, 0xb8,0xaf, 0xae,0xe6, 0xb5,0xf0, 0xbb,0xd5, 0xb9,0x6a, 0xbb,0xcc, 0xad,0xd3, 0xa6,0x55, 0xb5,0xb9, 0xae,0xda, 0xb8,0xf2, 0xaf,0xd1, 0xa7,0xf3, 0xa9,0xb0, 0xc3,0xbc, 0xae,0x47, 0xaf,0xd5, 0xb1,0xf0, 0xa4,0x75, 0xa7,0xf0, 0xa5,0x5c, 0xae,0xa5, 0xc5,0xc7, 0xa8,0xd1, 0xb0,0x60, 0xa4,0xbd, 0xae,0x63, 0xa4,0x7d, 0xbe,0x64, 0xa8,0x45, 0xab,0xfd, 0xb0,0x5e, 0xa6,0x40, 0xb9,0x5f, 0xa4,0xc4, 0xb7,0xbe, 0xad,0x65, 0xaa,0xaf, 0xab,0xaf, 0xba,0x63, 0xc1,0xca, 0xb0,0xf7, 0xb6,0x64, 0xdb,0xa3, 0xa9,0x42, 0xe3,0x54, 0xa6,0xf4, 0xaa,0x66, 0xa9,0x74, 0xa9,0x68, 0xb9,0xaa, 0xa5,0x6a, 0xc5,0xdb, 0xb0,0xa9, 0xa8,0xa6, 0xaa,0xd1, 0xac,0x47, 0xc5,0x55, 0xa9,0x54, 0xb6,0xb1, 0xa8,0xed, 0xa5,0xca, 0xd4,0x6c, 0xb9,0xe8, 0xb1,0xbe, 0xbb,0x6f, 0xa8,0xc4, 0xa9,0xe4, 0xa9,0xc7, 0xb4,0xc3, 0xc3,0xf6, 0xa9,0x78, 0xab,0x61, 0xc6,0x5b, 0xba,0xde, 0xc0,0x5d, 0xc5,0xf8, 0xba,0x44, 0xc4,0xe9, 0xb3,0x65, 0xa5,0xfa, 0xbc,0x73, 0xb3,0x7d, 0xba,0xc0, 0xb3,0x57, 0xa6,0x63, 0xd6,0xba, 0xc2,0x6b, 0xc0,0x74, 0xbb,0xd3, 0xad,0x79, 0xb0,0xad, 0xb8,0xde, 0xac,0xd1, 0xae,0xdb, 0xc2,0x64, 0xb8,0xf7, 0xb6,0x51, 0xbc,0x44, 0xbe,0x40, 0xba,0x75, 0xb4,0xd2, 0xc1,0xe7, 0xb3,0xa2, 0xb0,0xea, 0xaa,0x47, 0xbb,0x71, 0xb9,0x4c, 0xab,0xa2, 0xc0,0x65, 0xab,0xc4, 0xae,0xfc, 0xae,0xf3, 0xa5,0xe8, 0xae,0x60, 0xc0,0x62, 0xb6,0x6f, 0xe9,0x77, 0xcd,0xd5, 0xc1,0xfa, 0xa7,0x74, 0xb2,0x5b, 0xb4,0x48, 0xa8,0xe7, 0xb3,0xdb, 0xa8,0x75, 0xbf,0xab, 0xbe,0xd9, 0xae,0xc2, 0xa7,0xf2, 0xbe,0xd1, 0xae,0xab, 0xb2,0x6b, 0xa6,0xbd, 0xba,0x7e, 0xc9,0x71, 0xaa,0x43, 0xaf,0xe8, 0xc0,0xa2, 0xc0,0x7a, 0xbb,0xa8, 0xb2,0x40, 0xb0,0x71, 0xa6,0x6e, 0xaf,0xd3, 0xb8,0xb9, 0xaf,0x45, 0xa8,0xfe, 0xb3,0xdc, 0xb2,0xfc, 0xdb,0x5d, 0xae,0xd6, 0xa5,0xdd, 0xa9,0x4d, 0xa6,0xf3, 0xa6,0x58, 0xb2,0xb0, 0xb8,0xe8, 0xbb,0xd2, 0xaa,0x65, 0xb2,0x55, 0xbb,0xae, 0xbd,0xc5, 0xc5,0x62, 0xb6,0x50, 0xbc,0x4b, 0xb6,0xc2, 0xb2,0xaa, 0xab,0xdc, 0xac,0xbd, 0xab,0xeb, 0xad,0xf3, 0xa6,0xeb, 0xbe,0xee, 0xbf,0xc5, 0xab,0xed, 0xc5,0x46, 0xab,0xa1, 0xaf,0x4d, 0xad,0x69, 0xc2,0x45, 0xac,0x78, 0xa7,0xbb, 0xa5,0xb0, 0xac,0xf5, 0xb3,0xef, 0xab,0x4a, 0xb5,0x55, 0xa7,0x71, 0xab,0x70, 0xad,0xd4, 0xab,0xe1, 0xa9,0x49, 0xa5,0x47, 0xa9,0xbf, 0xb7,0xe4, 0xb3,0xfd, 0xb8,0xac, 0xad,0x4a, 0xbd,0xb9, 0xaa,0xb0, 0xbd,0x6b, 0xb4,0xf2, 0xa9,0xb7, 0xaa,0xea, 0xb0,0xe4, 0xc5,0x40, 0xa4,0xac, 0xba,0xad, 0xa4,0xe1, 0xaa,0xe1, 0xbc,0x4d, 0xb5,0xd8, 0xb7,0xe2, 0xb7,0xc6, 0xb5,0x65, 0xb9,0xba, 0xa4,0xc6, 0xb8,0xdc, 0xba,0x69, 0xab,0xde, 0xc3,0x68, 0xb2,0x61, 0xc3,0x61, 0xc5,0x77, 0xc0,0xf4, 0xae,0xd9, 0xc1,0xd9, 0xbd,0x77, 0xb4,0xab, 0xb1,0x77, 0xb3,0xea, 0xba,0xc8, 0xb8,0xe6, 0xb7,0xd8, 0xb5,0x41, 0xab,0xc6, 0xa4,0xdb, 0xaf,0xee, 0xb7,0x57, 0xb6,0xc0, 0xc1,0x44, 0xbd,0xc0, 0xc2,0xae, 0xac,0xd3, 0xb0,0xc4, 0xb4,0x71, 0xb7,0xd7, 0xae,0xcc, 0xb7,0x45, 0xab,0xe9, 0xc1,0xc0, 0xa6,0xc7, 0xb4,0xa7, 0xbd,0xf7, 0xc0,0xb2, 0xab,0xec, 0xb5,0xee, 0xa6,0x5e, 0xb7,0xb4, 0xae,0xac, 0xbc,0x7a, 0xa5,0x63, 0xb4,0x66, 0xb1,0xe2, 0xb8,0xec, 0xc2,0xa9, 0xb7,0x7c, 0xc0,0xed, 0xb6,0xd7, 0xbf,0xd0, 0xbb,0xa3, 0xc3,0xb8, 0xb8,0xa7, 0xa9,0xfc, 0xb1,0x42, 0xbb,0xee, 0xb4,0xfd, 0xb2,0x56, 0xc1,0xc5, 0xac,0xa1, 0xa5,0xeb, 0xa4,0xf5, 0xc0,0xf2, 0xa9,0xce, 0xb4,0x62, 0xc0,0x4e, 0xb3,0x66, 0xba,0xd7, 0xc0,0xbb, 0xa7,0xa3, 0xb0,0xf2, 0xbe,0xf7, 0xb7,0xee, 0xbd,0x5d, 0xbf,0x6e, 0xba,0xdf, 0xa6,0xd9, 0xc4,0xc8, 0xb8,0xf1, 0xbf,0x45, 0xc3,0xd5, 0xc2,0xfb, 0xae,0x56, 0xc1,0x5a, 0xbd,0x72, 0xa6,0x4e, 0xb7,0xa5, 0xb4,0xc6, 0xbf,0xe8, 0xc4,0x79, 0xb6,0xb0, 0xa4,0xce, 0xab,0xe6, 0xaf,0x65, 0xa8,0x56, 0xa7,0x59, 0xb6,0xfa, 0xaf,0xc5, 0xc0,0xbd, 0xb4,0x58, 0xaf,0xe1, 0xa4,0x76, 0xc1,0xaa, 0xa7,0xde, 0xbe,0xac, 0xa9,0x75, 0xc9,0xab, 0xb2,0xbd, 0xbe,0xaf, 0xb1,0xaa, 0xc0,0xd9, 0xb1,0x48, 0xb1,0x49, 0xad,0x70, 0xb0,0x4f, 0xac,0x4a, 0xa7,0xd2, 0xbb,0xda, 0xa7,0xb2, 0xc4,0x7e, 0xac,0xf6, 0xb9,0xc5, 0xcf,0x45, 0xa7,0xa8, 0xa8,0xce, 0xae,0x61, 0xa5,0x5b, 0xb2,0xf3, 0xc0,0x55, 0xb8,0xeb, 0xa5,0xd2, 0xb9,0x5b, 0xb0,0xb2, 0xbd,0x5b, 0xbb,0xf9, 0xac,0x5b, 0xbe,0x72, 0xb6,0xf9, 0xc4,0xe8, 0xba,0xca, 0xb0,0xed, 0xa6,0x79, 0xba,0xe0, 0xb6,0xa1, 0xb7,0xce, 0xad,0xdd, 0xaa,0xd3, 0xc1,0x7d, 0xab,0xc1, 0xbd,0x70, 0xc3,0xb5, 0xc0,0xcb, 0xac,0x5a, 0xc6,0x50, 0xc6,0x50, 0xb4,0x7a, 0xbe,0xdf, 0xc2,0xb2, 0xbb,0xfc, 0xb0,0xc5, 0xb4,0xee, 0xc2,0xcb, 0xc2,0x65, 0xc5,0xb3, 0xbd,0xee, 0xbd,0xe2, 0xa8,0xa3, 0xc1,0xe4, 0xbd,0x62, 0xa5,0xf3, 0xb0,0xb7, 0xc4,0xa5, 0xbc,0x43, 0xc0,0x5e, 0xba,0xa5, 0xc2,0x71, 0xbc,0xee, 0xab,0xd8, 0xbb,0xf8, 0xab,0xb8, 0xb1,0x4e, 0xbc,0xdf, 0xa6,0xbf, 0xc3,0xa6, 0xbd,0xb1, 0xbc,0xd5, 0xbc,0xfa, 0xc1,0xbf, 0xa6,0x4b, 0xc2,0xe6, 0xad,0xb0, 0xbf,0xbc, 0xb4,0xd4, 0xc1,0x47, 0xb5,0x4a, 0xbd,0xa6, 0xa5,0xe6, 0xad,0xa5, 0xbc,0xe5, 0xc5,0xba, 0xbc,0x62, 0xc4,0x5a, 0xc5,0xcd, 0xbb,0xc7, 0xc1,0x42, 0xb9,0xae, 0xb8,0x7d, 0xac,0xbe, 0xa8,0xa4, 0xbb,0xe5, 0xc3,0xba, 0xb5,0xb1, 0xb6,0xcf, 0xb1,0xd0, 0xbb,0xc3, 0xc3,0xe2, 0xb8,0xfb, 0xa5,0x73, 0xb5,0xa2, 0xb4,0xa6, 0xb1,0xb5, 0xac,0xd2, 0xd6,0xc5, 0xb5,0xf3, 0xb6,0xa5, 0xba,0x49, 0xa7,0x54, 0xb8,0x60, 0xae,0xdc, 0xb3,0xc7, 0xb1,0xb6, 0xb7,0xfb, 0xba,0xdc, 0xbc,0xe4, 0xb5,0xb2, 0xb8,0xd1, 0xa9,0x6a, 0xa7,0xd9, 0xc2,0xc7, 0xaa,0xe3, 0xac,0xc9, 0xad,0xc9, 0xa4,0xb6, 0xac,0xce, 0xbb,0x7c, 0xa9,0xa1, 0xa4,0x79, 0xb5,0xac, 0xa4,0xe7, 0xaa,0xf7, 0xa4,0xb5, 0xac,0x7a, 0xc3,0xcc, 0xba,0xf2, 0xc0,0x41, 0xb6,0xc8, 0xc2,0xd4, 0xb6,0x69, 0xe0,0xda, 0xae,0xca, 0xb8,0x54, 0xaa,0xf1, 0xc2,0x75, 0xae,0xfb, 0xba,0xc9, 0xab,0x6c, 0xaf,0xf0, 0xb9,0xb8, 0xb2,0xf4, 0xb7,0xfa, 0xb4,0xb9, 0xc4,0x48, 0xa8,0xca, 0xc5,0xe5, 0xba,0xeb, 0xb8,0x65, 0xb8,0x67, 0xa4,0xab, 0xc4,0xb5, 0xb4,0xba, 0xc0,0x56, 0xc0,0x52, 0xb9,0xd2, 0xb7,0x71, 0xc3,0xe8, 0xae,0x7c, 0xb5,0x6a, 0xb9,0x74, 0xb3,0xba, 0xc4,0x76, 0xd0,0xe4, 0xac,0xb3, 0xb5,0x7e, 0xb4,0xaa, 0xa8,0x73, 0xaa,0xc8, 0xa8,0x68, 0xad,0xb4, 0xa4,0x5b, 0xa8,0x62, 0xa4,0x45, 0xb0,0x73, 0xb4,0x5c, 0xb1,0xcf, 0xc2,0xc2, 0xa6,0xdd, 0xb8,0xa4, 0xa9,0x53, 0xb4,0x4e, 0xaa,0xb9, 0xc1,0xf9, 0xa9,0xeb, 0xaa,0xae, 0xaf,0x6a, 0xa9,0x7e, 0xbe,0x73, 0xb5,0xe2, 0xa7,0xbd, 0xa9,0x43, 0xaf,0x78, 0xc1,0x7c, 0xaa,0x71, 0xbb,0x45, 0xa9,0xda, 0xbe,0xda, 0xa5,0xa8, 0xa8,0xe3, 0xb6,0x5a, 0xbd,0xf5, 0xbf,0xf7, 0xad,0xd1, 0xa5,0x79, 0xc4,0xdf, 0xac,0xb2, 0xbc,0x40, 0xae,0xbd, 0xc3,0x59, 0xae,0x53, 0xad,0xc2, 0xb2,0xb2, 0xa8,0xf7, 0xb8,0x68, 0xe5,0xb1, 0xc5,0xcc, 0xa7,0xe0, 0xb1,0xb8, 0xad,0xcf, 0xc0,0xef, 0xc4,0xb1, 0xa8,0x4d, 0xb3,0x5a, 0xb5,0xb4, 0xa7,0xa1, 0xb5,0xdf, 0xb6,0x76, 0xad,0x78, 0xa7,0x67, 0xae,0x6d, 0xab,0x54, 0xb5,0xa4, 0xc0,0xe0, 0xb0,0x70, 0xc2,0x40, 0xb3,0xd8, 0xa9,0x40, 0xa5,0x64, 0xab,0xa3, 0xb6,0x7d, 0xb4,0x7b, 0xb7,0xa2, 0xb3,0xcd, 0xb4,0x6e, 0xa5,0x5a, 0xb3,0xf4, 0xb0,0xc9, 0xa7,0xa2, 0xac,0xe5, 0xac,0xdd, 0xb1,0x64, 0xba,0x42, 0xc1,0x52, 0xa6,0xaa, 0xa7,0xdc, 0xa4,0xae, 0xaa,0xa1, 0xa6,0xd2, 0xab,0xfe, 0xaf,0x4e, 0xbe,0x61, 0xa9,0x56, 0xad,0x56, 0xac,0x5f, 0xb4,0xca, 0xbd,0x57, 0xc1,0xfb, 0xac,0xec, 0xb4,0xdf, 0xab,0x79, 0xa5,0x69, 0xb4,0xf7, 0xa7,0x4a, 0xa8,0xe8, 0xab,0xc8, 0xbd,0xd2, 0xaa,0xd6, 0xb0,0xd9, 0xbe,0xc1, 0xc0,0xb5, 0xa7,0x7c, 0xa7,0x5c, 0xaa,0xc5, 0xae,0xa3, 0xa4,0xd5, 0xb1,0xb1, 0xe1,0xe0, 0xa4,0x66, 0xa6,0xa9, 0xb1,0x46, 0xac,0x5c, 0xad,0xfa, 0xb8,0x5d, 0xad,0x57, 0xbb,0xc5, 0xae,0x77, 0xbf,0xc7, 0xa6,0x6a, 0xab,0xb1, 0xce,0xd8, 0xb8,0xf3, 0xaf,0xe3, 0xb6,0xf4, 0xb8,0x5f, 0xbb,0xfb, 0xa7,0xd6, 0xbc,0x65, 0xb4,0xda, 0xa6,0x4a, 0xb5,0xa8, 0xa8,0x67, 0xae,0xd8, 0xc4,0x71, 0xb2,0xb5, 0xc3,0x6d, 0xaa,0x70, 0xc1,0xab, 0xb2,0xaf, 0xf5,0xc9, 0xbf,0x73, 0xb8,0xaa, 0xab,0xb6, 0xbb,0xed, 0xb3,0xc8, 0xf5,0x58, 0xb7,0x5c, 0xbc,0xec, 0xa9,0x5b, 0xa9,0xf8, 0xae,0xb9, 0xa7,0x78, 0xac,0x41, 0xc2,0x58, 0xb9,0xf8, 0xc1,0xef, 0xa9,0x55, 0xa9,0xd4, 0xb3,0xe2, 0xc4,0xfa, 0xc3,0xbe, 0xbb,0xb6, 0xb0,0xd5, 0xb5,0xdc, 0xa8,0xd3, 0xbf,0xe0, 0xc2,0xc5, 0xb0,0xfd, 0xc4,0xe6, 0xc4,0x64, 0xc4,0x78, 0xc1,0xf1, 0xc4,0xf5, 0xc4,0x69, 0xf8,0xc2, 0xc5,0xf3, 0xc4,0xfd, 0xc3,0x69, 0xc6,0x6c, 0xc4,0xea, 0xc0,0xdd, 0xb2,0x77, 0xb7,0x7d, 0xaf,0x54, 0xb4,0x59, 0xad,0xa6, 0xae,0xd4, 0xae,0xf6, 0xbc,0xb4, 0xb3,0xd2, 0xa8,0x63, 0xa6,0xd1, 0xa8,0xd0, 0xab,0xbe, 0xb9,0x54, 0xaf,0x4f, 0xe5,0xfc, 0xb0,0xc7, 0xbc,0xd6, 0xb9,0x70, 0xc5,0x4a, 0xc1,0xa2, 0xbd,0x55, 0xb2,0xd6, 0xc0,0x77, 0xc2,0x53, 0xbe,0xdd, 0xa6,0xd8, 0xc3,0xfe, 0xb2,0x5c, 0xd9,0xb1, 0xb7,0xab, 0xa7,0x4e, 0xcd,0xf9, 0xb1,0xf9, 0xb2,0x70, 0xbe,0xa4, 0xc6,0x58, 0xbb,0xa9, 0xc2,0xf7, 0xba,0x76, 0xb2,0x7a, 0xa7,0xf5, 0xb8,0xcc, 0xc3,0x55, 0xc2,0xa7, 0xb2,0xfa, 0xaf,0xef, 0xa6,0x4f, 0xae,0xdf, 0xc4,0x52, 0xbc,0x46, 0xc0,0x79, 0xc4,0x74, 0xbe,0xfa, 0xa7,0x51, 0xe0,0xf4, 0xa8,0xd2, 0xab,0x57, 0xb5,0x67, 0xa5,0xdf, 0xb2,0xc9, 0xc3,0x77, 0xc1,0xf5, 0xa4,0x4f, 0xbc,0xfe, 0xad,0xf9, 0xad,0xc7, 0xc1,0x70, 0xbd,0xac, 0xb3,0x73, 0xc5,0x49, 0xb7,0x47, 0xbc,0xa6, 0xba,0xa7, 0xc3,0xae, 0xc0,0xc4, 0xc1,0x79, 0xc3,0xec, 0xc5,0xca, 0xb7,0xd2, 0xbd,0x6d, 0xc2,0xb3, 0xb2,0x44, 0xbc,0xd9, 0xb8,0x64, 0xa8,0x7d, 0xa8,0xe2, 0xbd,0xf8, 0xb6,0x71, 0xb4,0xbd, 0xab,0x47, 0xbd,0xcc, 0xbc,0xba, 0xb2,0xe1, 0xb9,0xb1, 0xc0,0xf8, 0xbf,0x52, 0xb9,0xe9, 0xbf,0xf1, 0xbc,0xe3, 0xa4,0x46, 0xe1,0xe6, 0xf4,0xef, 0xb9,0xf9, 0xae,0xc6, 0xa6,0x43, 0xb5,0xf5, 0xaf,0x50, 0xa6,0x48, 0xc2,0x79, 0xb5,0x59, 0xaa,0x4c, 0xc1,0x43, 0xc0,0x4d, 0xc1,0x7b, 0xbe,0x46, 0xc5,0xec, 0xb2,0x4f, 0xbb,0xfe, 0xb8,0xee, 0xa7,0x5b, 0xa9,0xf0, 0xac,0xc2, 0xb5,0xd9, 0xb9,0x73, 0xc4,0xd6, 0xb9,0x61, 0xa7,0x44, 0xb2,0xdc, 0xad,0xe2, 0xc6,0x46, 0xb3,0xae, 0xc0,0xad, 0xbb,0xe2, 0xa5,0x74, 0xa5,0x4f, 0xb7,0xc8, 0xaf,0x5b, 0xba,0x68, 0xb2,0xb8, 0xc3,0x48, 0xaf,0x64, 0xbc,0x42, 0xbd,0x46, 0xac,0x79, 0xac,0x68, 0xa4,0xbb, 0xc0,0x73, 0xc5,0xa4, 0xc4,0x56, 0xc5,0xa2, 0xc1,0x4b, 0xb6,0xa9, 0xc3,0x62, 0xc3,0x6c, 0xc3,0xf7, 0xbc,0xd3, 0xb0,0xfa, 0xba,0x4f, 0xc1,0x4d, 0xba,0x7c, 0xad,0xae, 0xc4,0xaa, 0xbf,0x63, 0xc6,0x60, 0xc3,0x66, 0xc4,0x6c, 0xbe,0xdb, 0xb3,0xbf, 0xb8,0xb8, 0xbe,0x7c, 0xc4,0x53, 0xb8,0x4c, 0xc5,0x53, 0xb8,0xf4, 0xb8,0xef, 0xb3,0xc0, 0xe9,0xf0, 0xb8,0x53, 0xbf,0xfd, 0xb3,0xb0, 0xbc,0xae, 0xc6,0x6a, 0xa7,0x66, 0xbe,0x54, 0xab,0x51, 0xae,0xc8, 0xbc,0x69, 0xb9,0xf0, 0xc1,0x5c, 0xbc,0x7b, 0xb4,0xe2, 0xab,0xdf, 0xb2,0x76, 0xc2,0x6f, 0xba,0xf1, 0xc5,0x72, 0xc5,0xcb, 0xc5,0x70, 0xc6,0x65, 0xa7,0x5a, 0xb6,0xc3, 0xb1,0xb0, 0xb2,0xa4, 0xb1,0xc1, 0xbd,0xfc, 0xad,0xdb, 0xa8,0xda, 0xb2,0x5f, 0xba,0xfa, 0xbd,0xd7, 0xc5,0xda, 0xc1,0xb3, 0xc3,0xb9, 0xc5,0xde, 0xc6,0x72, 0xc6,0x59, 0xc5,0x5b, 0xbb,0x72, 0xb8,0xa8, 0xac,0xa5, 0xc0,0x64, 0xb5,0xb8, 0xb6,0xfd, 0xb3,0xc2, 0xba,0xbf, 0xbd,0x58, 0xbf,0xc2, 0xb0,0xa8, 0xbd,0x7c, 0xb9,0xc0, 0xb6,0xdc, 0xae,0x49, 0xb6,0x52, 0xb3,0xc1, 0xbd,0xe6, 0xc1,0xda, 0xaf,0xdf, 0xbf,0x66, 0xc4,0x43, 0xc6,0x5a, 0xba,0xa1, 0xbd,0xaf, 0xb0,0xd2, 0xba,0x43, 0xba,0xa9, 0xf0,0xe3, 0xa8,0x7e, 0xaf,0xed, 0xaa,0xbc, 0xaa,0x5d, 0xa6,0xa3, 0xb2,0xf5, 0xbf,0xdf, 0xad,0x54, 0xc1,0xe3, 0xa4,0xf2, 0xa5,0xd9, 0xb9,0x67, 0xa5,0x66, 0xad,0x5a, 0xab,0x5f, 0xb4,0x55, 0xbb,0xaa, 0xb6,0x54, 0xbb,0xf2, 0xaa,0xb4, 0xaa,0x54, 0xb1,0xf6, 0xa1,0xbc, 0xbe,0x60, 0xb7,0xd1, 0xa8,0x53, 0xac,0xdc, 0xb4,0x43, 0xc1,0xe2, 0xa8,0x43, 0xac,0xfc, 0xac,0x4e, 0xb4,0x4b, 0xa9,0x66, 0xb4,0x41, 0xaa,0xf9, 0xb4,0x65, 0xad,0xcc, 0xb5,0xde, 0xbb,0x58, 0xc2,0x63, 0xb7,0xf9, 0xbf,0xf8, 0xb2,0x72, 0xb9,0xda, 0xa9,0x73, 0xd6,0xa9, 0xee,0xc5, 0xc3,0xfb, 0xc1,0x53, 0xb0,0x67, 0xc1,0xbc, 0xc0,0xb1, 0xa6,0xcc, 0xaf,0xb5, 0xb3,0x56, 0xaa,0x63, 0xbb,0x65, 0xb1,0x4b, 0xbe,0xad, 0xb4,0xd6, 0xaf,0x76, 0xba,0xf8, 0xb0,0xc3, 0xa7,0x4b, 0xab,0x6a, 0xae,0x59, 0xbd,0x71, 0xad,0xb1, 0xad,0x5d, 0xb4,0x79, 0xba,0xcb, 0xc2,0xc6, 0xac,0xed, 0xb4,0xf9, 0xbc,0x71, 0xa7,0xae, 0xbd,0xb0, 0xb7,0xc0, 0xa5,0xc1, 0xa9,0xd7, 0xa5,0xd7, 0xb1,0xd3, 0xbc,0xa7, 0xbb,0xd4, 0xa9,0xfa, 0xbf,0xc1, 0xbb,0xef, 0xbb,0xca, 0xa6,0x57, 0xa9,0x52, 0xc2,0xd5, 0xba,0x4e, 0xbc,0xb1, 0xc4,0xa8, 0xbc,0xd2, 0xbd,0xa4, 0xbf,0x69, 0xbc,0xaf, 0xc5,0x5d, 0xa9,0xd9, 0xa5,0xbd, 0xb2,0xf6, 0xbe,0xa5, 0xc0,0x71, 0xaa,0x6a, 0xba,0x7a, 0xb9,0xe6, 0xad,0xaf, 0xbf,0xd1, 0xa6,0xc8, 0xac,0x59, 0xa9,0xe6, 0xa8,0x64, 0xaf,0x61, 0xa9,0x69, 0xa5,0xc0, 0xb9,0xd3, 0xbc,0xc7, 0xb9,0xf5, 0xb6,0xd2, 0xbc,0x7d, 0xa4,0xec, 0xa5,0xd8, 0xb7,0xfc, 0xaa,0xaa, 0xbf,0x70, 0xae,0xb3, 0xad,0xfe, 0xa7,0x6f, 0xb6,0x75, 0xa8,0xba, 0xae,0x52, 0xaf,0xc7, 0xa6,0xbb, 0xa4,0x44, 0xa5,0xa4, 0xad,0x40, 0xa9,0x60, 0xab,0x6e, 0xa8,0x6b, 0xc3,0xf8, 0xc5,0x6e, 0xbc,0xb8, 0xb8,0xa3, 0xb4,0x6f, 0xbe,0x78, 0xd5,0xef, 0xa9,0x4f, 0xbe,0x6b, 0xa4,0xba, 0xb9,0xe0, 0xaf,0xe0, 0xa9,0x67, 0xc0,0x4f, 0xad,0xd9, 0xaa,0x64, 0xa5,0xa7, 0xc0,0xc0, 0xa7,0x41, 0xb0,0xce, 0xbf,0xb0, 0xb0,0x66, 0xb7,0xc4, 0xe7,0x59, 0xa9,0xe0, 0xa6,0x7e, 0xbd,0x56, 0xc2,0x5b, 0xb1,0xc9, 0xa9,0xc0, 0xae,0x51, 0xc6,0x43, 0xb3,0xbe, 0xa7,0xbf, 0xae,0xba, 0xc2,0xbf, 0xc4,0x5e, 0xef,0xbf, 0xc6,0x68, 0xc2,0xec, 0xaf,0x49, 0xb1,0x7a, 0xc2,0x66, 0xc0,0xf1, 0xbe,0xae, 0xb9,0xe7, 0xc0,0xbe, 0xc0,0xd7, 0xa4,0xfb, 0xa7,0xe1, 0xb6,0x73, 0xaf,0xc3, 0xc1,0x77, 0xbf,0x40, 0xb9,0x41, 0xa7,0xcb, 0xa5,0xa3, 0xa7,0x56, 0xab,0xe3, 0xa4,0x6b, 0xb7,0x78, 0xad,0x68, 0xba,0xc4, 0xae,0xbf, 0xc0,0xb6, 0xc4,0x7a, 0xbf,0xd5, 0xae,0x40, 0xbc,0xda, 0xc5,0xc3, 0xbc,0xde, 0xc3,0xc2, 0xb9,0xc3, 0xb0,0xb8, 0xe2,0x78, 0xb0,0xd4, 0xad,0x77, 0xaa,0xa6, 0xa9,0xac, 0xa9,0xc8, 0xb5,0x5d, 0xa9,0xe7, 0xb1,0xc6, 0xb5,0x50, 0xb1,0x72, 0xb4,0xfb, 0xac,0xa3, 0xc3,0x6b, 0xbc,0xef, 0xbd,0x4c, 0xbd,0x59, 0xac,0xdf, 0xaf,0x60, 0xa7,0x50, 0xab,0x71, 0xa5,0xe3, 0xc3,0x65, 0xae,0xc7, 0xea,0xe5, 0xad,0x44, 0xa9,0xdf, 0xa9,0x48, 0xa7,0x53, 0xac,0xb6, 0xb3,0x54, 0xb6,0x5d, 0xaa,0x77, 0xa9,0x41, 0xad,0x46, 0xb0,0xf6, 0xbb,0x70, 0xbd,0xdf, 0xb3,0xad, 0xb0,0x74, 0xa8,0xd8, 0xa8,0x4b, 0xbc,0x51, 0xac,0xd6, 0xaf,0x79, 0xa9,0xe1, 0xb2,0x69, 0xbc,0xea, 0xb4,0x5e, 0xbd,0xb4, 0xb4,0xd7, 0xb8,0x4e, 0xc1,0x4f, 0xbf,0xb1, 0xaa,0x42, 0xc4,0x50, 0xb1,0xb7, 0xb8,0x49, 0xcb,0xf2, 0xcf,0xec, 0xc5,0x52, 0xa7,0xe5, 0xa9,0xdc, 0xbc,0x41, 0xb5,0x5c, 0xac,0x73, 0xb0,0xe0, 0xb5,0xca, 0xaf,0x68, 0xa5,0xd6, 0xa4,0xc7, 0xb5,0x6c, 0xbb,0xf7, 0xa7,0xbe, 0xc4,0xb4, 0xbd,0x67, 0xb0,0xbe, 0xa4,0xf9, 0xc4,0x46, 0xc4,0xc6, 0xba,0x7d, 0xbf,0x5d, 0xb2,0xbc, 0xba,0x4a, 0xbf,0x68, 0xab,0xf7, 0xc0,0x57, 0xb3,0x68, 0xab,0x7e, 0xb8,0x75, 0xa5,0xe2, 0xa9,0x57, 0xc4,0xab, 0xb5,0xd3, 0xa5,0xad, 0xbe,0xcc, 0xb2,0x7e, 0xb5,0xfb, 0xab,0xcc, 0xa9,0x59, 0xbc,0xe2, 0xbb,0xe1, 0xb1,0x43, 0xaf,0x7d, 0xbe,0x7a, 0xad,0xa2, 0xb2,0xcb, 0xad,0xe5, 0xbc,0xb3, 0xe7,0x45, 0xb9,0xb2, 0xb3,0x40, 0xb8,0xb2, 0xb5,0xd0, 0xbb,0x5a, 0xae,0x48, 0xbe,0xeb, 0xae,0x45, 0xb4,0xb6, 0xae,0xfa, 0xc3,0xd0, 0xc3,0x6e, 0xc2,0x72, 0xb4,0xc1, 0xb4,0xdb, 0xb4,0xcf, 0xb1,0xad, 0xa9,0x64, 0xa4,0x43, 0xd0,0xe2, 0xba,0xa3, 0xac,0x6d, 0xcb,0x50, 0xa8,0xe4, 0xb4,0xd1, 0xa9,0x5f, 0xaa,0x5b, 0xb2,0xa5, 0xb1,0x54, 0xc2,0xc0, 0xbb,0xf4, 0xba,0x58, 0xac,0xe8, 0xaa,0xc2, 0xc3,0x4d, 0xb0,0x5f, 0xb0,0x5a, 0xa4,0x5e, 0xa5,0xf8, 0xb1,0xd2, 0xab,0xb4, 0xac,0xe4, 0xbe,0xb9, 0xae,0xf0, 0xa8,0xb4, 0xb1,0xf3, 0xa8,0x54, 0xaa,0x5f, 0xb0,0x57, 0xd5,0x74, 0xab,0xea, 0xac,0xa2, 0xb2,0x6f, 0xc9,0xe7, 0xa1,0xbc, 0xb9,0x5d, 0xa4,0x64, 0xbe,0x45, 0xc3,0xb1, 0xa5,0x61, 0xc1,0xbe, 0xb0,0xae, 0xc0,0x72, 0xbf,0xfa, 0xb9,0x58, 0xab,0x65, 0xbc,0xe7, 0xbb,0xba, 0xb2,0x4c, 0xc4,0xfe, 0xb9,0xd5, 0xb4,0x4f, 0xa4,0xed, 0xba,0x70, 0xba,0x6a, 0xb6,0xe6, 0xb5,0xc4, 0xaa,0xca, 0xc0,0xf0, 0xc1,0xa5, 0xb1,0x6a, 0xb7,0x6d, 0xbe,0xf5, 0xc1,0xea, 0xba,0x56, 0xae,0xa8, 0xbe,0xf4, 0xc1,0x40, 0xb3,0xec, 0xb9,0xb4, 0xa5,0xa9, 0xc0,0x54, 0xbc,0xc0, 0xc2,0xbc, 0xae,0x6b, 0xab,0x4e, 0xc2,0xac, 0xa4,0xc1, 0xad,0x58, 0xa5,0x42, 0xa9,0xc4, 0xc5,0xd1, 0xb4,0xdc, 0xab,0x49, 0xbf,0xcb, 0xaf,0xb3, 0xb5,0x5e, 0xb6,0xd4, 0xaa,0xe0, 0xbe,0xe0, 0xb8,0x56, 0xb9,0xec, 0xa8,0x47, 0xab,0x43, 0xbb,0xb4, 0xb2,0x42, 0xb6,0xc9, 0xad,0xeb, 0xb2,0x4d, 0xc0,0xba, 0xb4,0xb8, 0xd9,0xe6, 0xb1,0xa1, 0xb3,0xbc, 0xbd,0xd0, 0xbc,0x79, 0xc3,0xa3, 0xbd,0x61, 0xac,0xee, 0xa5,0x43, 0xaa,0xf4, 0xb2,0x79, 0xa8,0x44, 0xa5,0x7d, 0xad,0xa9, 0xaa,0x73, 0xc1,0xcd, 0xb0,0xcf, 0xb3,0x49, 0xa6,0xb1, 0xc2,0xdf, 0xa9,0x7d, 0xc5,0x58, 0xb4,0xeb, 0xa8,0xfa, 0xb0,0xf9, 0xc6,0x54, 0xbd,0xec, 0xa5,0x68, 0xb0,0xe9, 0xf9,0xaf, 0xc5,0x76, 0xee,0xc7, 0xac,0x75, 0xa5,0xfe, 0xb2,0xac, 0xae,0xb1, 0xa4,0xfc, 0xa8,0xe9, 0xc4,0x55, 0xaf,0xca, 0xcd,0x50, 0xbf,0x61, 0xab,0x6f, 0xc4,0x4e, 0xba,0x65, 0xbd,0x54, 0xb3,0xb6, 0xb8,0xc8, 0xb8,0x73, 0xb5,0x4d, 0xbf,0x55, 0xa5,0x54, 0xac,0x56, 0xc5,0x7b, 0xc4,0x5b, 0xc4,0x63, 0xc4,0x57, 0xc5,0xfd, 0xc4,0xc7, 0xc2,0x5a, 0xc2,0xb6, 0xb7,0x53, 0xbc,0xf6, 0xa4,0xd0, 0xa4,0xaf, 0xa4,0x48, 0xa7,0xd4, 0xb6,0xb4, 0xa5,0xf4, 0xbb,0x7b, 0xa4,0x62, 0xa7,0xb3, 0xac,0xf7, 0xa5,0xb5, 0xa4,0xb4, 0xa4,0xe9, 0xa6,0xa5, 0xaf,0xf1, 0xbb,0x54, 0xba,0x61, 0xbf,0xc4, 0xba,0xb2, 0xb7,0xbb, 0xae,0x65, 0xb5,0xb3, 0xa4,0xbe, 0xb4,0x7c, 0xac,0x58, 0xa6,0xd7, 0xaf,0xf8, 0xc4,0xaf, 0xbe,0xa7, 0xc0,0xa9, 0xa6,0x70, 0xb0,0x64, 0xa8,0xc5, 0xa6,0xbc, 0xa4,0x4a, 0xbf,0xc8, 0xb3,0x6e, 0xa8,0xbf, 0xbf,0xb6, 0xb7,0xe7, 0xbe,0x55, 0xb6,0x7c, 0xbc,0xed, 0xad,0x59, 0xae,0x7a, 0xbc,0xbb, 0xcf,0x73, 0xc2,0xc4, 0xb8,0x7c, 0xc4,0xce, 0xb6,0xeb, 0xc1,0xc9, 0xa4,0x54, 0xa4,0x54, 0xb3,0xca, 0xb4,0xb2, 0xae,0xe1, 0xb6,0xda, 0xb3,0xe0, 0xb7,0x6b, 0xc4,0xcc, 0xb1,0xbd, 0xb7,0x41, 0xb7,0xe6, 0xa6,0xe2, 0xc0,0xdf, 0xb4,0xcb, 0xb9,0xac, 0xb2,0xef, 0xac,0xe2, 0xb1,0xfe, 0xab,0x62, 0xa8,0x46, 0xaf,0xbd, 0xb6,0xcc, 0xd4,0xa3, 0xb7,0xd9, 0xbf,0x7a, 0xc5,0xce, 0xac,0xc0, 0xd0,0x73, 0xa7,0xfc, 0xa4,0x73, 0xa7,0x52, 0xba,0xb4, 0xad,0x6d, 0xb0,0x7b, 0xb0,0xa2, 0xbe,0xd5, 0xc4,0xba, 0xbf,0xaf, 0xb5,0xbd, 0xa6,0xc2, 0xae,0xb0, 0xc2,0xb5, 0xe1,0x61, 0xb6,0xcb, 0xb0,0xd3, 0xbd,0xe0, 0xae,0xce, 0xa4,0x57, 0xa9,0x7c, 0xbb,0x6e, 0xb1,0xe9, 0xae,0xb4, 0xb5,0x79, 0xbf,0x4e, 0xa8,0xa2, 0xa4,0x63, 0xbb,0xe0, 0xa4,0xd6, 0xad,0xef, 0xaa,0xf2, 0xb2,0xd0, 0xb0,0xf8, 0xbb,0xad, 0xb3,0x44, 0xa6,0xde, 0xaa,0xd9, 0xb3,0x6a, 0xc4,0xe1, 0xae,0x67, 0xc4,0xe0, 0xaf,0x41, 0xaa,0xc0, 0xb3,0x5d, 0xaf,0x7e, 0xa5,0xd3, 0xa9,0x44, 0xa6,0xf9, 0xa8,0xad, 0xb2,0x60, 0xae,0x57, 0xb2,0xd4, 0xaf,0xab, 0xa8,0x48, 0xbc,0x66, 0xc2,0x54, 0xac,0xc6, 0xb5,0xc7, 0xb7,0x56, 0xba,0xaf, 0xc1,0x6e, 0xa5,0xcd, 0xb5,0x63, 0xac,0xb9, 0xa4,0xc9, 0xc3,0xb7, 0xac,0xd9, 0xb2,0xb1, 0xb3,0xd1, 0xb3,0xd3, 0xb8,0x74, 0xae,0x76, 0xa5,0xa2, 0xb7,0xe0, 0xac,0x49, 0xc0,0xe3, 0xb8,0xd6, 0xab,0xcd, 0xbd,0xbe, 0xa4,0x51, 0xa5,0xdb, 0xac,0x42, 0xae,0xc9, 0xa4,0xb0, 0xad,0xb9, 0xbb,0x6b, 0xb9,0xea, 0xc3,0xd1, 0xa5,0x76, 0xa5,0xda, 0xa8,0xcf, 0xab,0xcb, 0xbe,0x70, 0xa9,0x6c, 0xa6,0xa1, 0xa5,0xdc, 0xa4,0x68, 0xa5,0x40, 0xac,0x55, 0xa8,0xc6, 0xab,0xf8, 0xbb,0x7d, 0xb3,0x75, 0xb6,0xd5, 0xac,0x4f, 0xb6,0xdd, 0xbe,0xbd, 0xbe,0x41, 0xa5,0x4b, 0xa8,0xcd, 0xc4,0xc0, 0xb9,0xa2, 0xa4,0xf3, 0xa5,0xab, 0xab,0xee, 0xab,0xc7, 0xb5,0xf8, 0xb8,0xd5, 0xa6,0xac, 0xa4,0xe2, 0xad,0xba, 0xa6,0x75, 0xb9,0xd8, 0xb1,0xc2, 0xb0,0xe2, 0xa8,0xfc, 0xbd,0x47, 0xc3,0x7e, 0xbd,0xad, 0xbc,0xcf, 0xae,0xde, 0xae,0xed, 0xa7,0xe7, 0xbf,0xe9, 0xa8,0xfb, 0xb5,0xce, 0xb2,0x51, 0xb2,0xa8, 0xae,0xd1, 0xc5,0xab, 0xb1,0x45, 0xbc,0xf4, 0xc1,0xa6, 0xb4,0xbb, 0xc0,0xc6, 0xb8,0x70, 0xb8,0xbe, 0xb6,0xc1, 0xb9,0xab, 0xc4,0xdd, 0xb3,0x4e, 0xad,0x7a, 0xbe,0xf0, 0xa7,0xf4, 0xa6,0xa7, 0xbd,0xdd, 0xb9,0xd6, 0xb1,0x66, 0xbc,0xc6, 0xba,0xa4, 0xae,0xa4, 0xa8,0xea, 0xad,0x41, 0xba,0x4c, 0xb0,0x49, 0xa5,0xcf, 0xab,0xd3, 0xae,0xea, 0xac,0x43, 0xc1,0xf7, 0xc2,0xf9, 0xb2,0x6e, 0xbd,0xd6, 0xa4,0xf4, 0xba,0xce, 0xb5,0x7c, 0xa7,0x6d, 0xc0,0xfe, 0xb6,0xb6, 0xb5,0xcf, 0xbb,0xa1, 0xba,0xd3, 0xae,0xd2, 0xc3,0x7b, 0xb4,0xb5, 0xbc,0xb9, 0xbc,0x52, 0xab,0xe4, 0xa8,0x70, 0xa5,0x71, 0xb5,0xb7, 0xa6,0xba, 0xb8,0x76, 0xa6,0x78, 0xb6,0xe0, 0xa5,0x7c, 0xa6,0xf8, 0xa6,0xfc, 0xb9,0x7d, 0xa4,0x78, 0xc3,0x50, 0xc1,0x71, 0xbc,0xa3, 0xb9,0x7c, 0xb0,0x65, 0xa7,0xba, 0xb3,0x5e, 0xbb,0x77, 0xb7,0x6a, 0xbf,0xb4, 0xc2,0x5d, 0xb9,0xc2, 0xc4,0xac, 0xb6,0x70, 0xab,0x55, 0xaf,0xc0, 0xb3,0x74, 0xb5,0xaf, 0xe0,0xf4, 0xb6,0xec, 0xb7,0xb9, 0xb1,0x4a, 0xb6,0x44, 0xb5,0xc2, 0xbb,0xc4, 0xbb,0x5b, 0xba,0xe2, 0xc1,0xf6, 0xb6,0xa6, 0xc0,0x48, 0xb8,0x6b, 0xc5,0xe8, 0xb8,0x48, 0xb7,0xb3, 0xc1,0x4a, 0xb9,0x45, 0xc0,0x47, 0xaf,0xa9, 0xae,0x5d, 0xb7,0x6c, 0xb5,0xab, 0xbb,0x62, 0xb1,0xf4, 0xad,0xf6, 0xc1,0x59, 0xba,0xbe, 0xaf,0xc1, 0xc2,0xea, 0xa9,0xd2, 0xb6,0xf2, 0xa5,0x4c, 0xa5,0xa6, 0xa6,0x6f, 0xb6,0xf0, 0xc3,0xa1, 0xbe,0xd8, 0xc1,0xcf, 0xbd,0xf1, 0xad,0x4c, 0xad,0x61, 0xa9,0xef, 0xa5,0x78, 0xae,0xf5, 0xa1,0xbc, 0xa4,0xd3, 0xba,0x41, 0xa8,0x4f, 0xa7,0x7e, 0xc5,0x75, 0xb3,0x67, 0xc5,0xf5, 0xc5,0x79, 0xbe,0xc2, 0xc0,0xc8, 0xb7,0xf0, 0xbc,0xe6, 0xc3,0xd3, 0xbd,0xcd, 0xa9,0x5a, 0xb4,0xe0, 0xb3,0x52, 0xba,0xd2, 0xb1,0xb4, 0xb9,0xc4, 0xac,0xb4, 0xb4,0xf6, 0xb6,0xed, 0xb7,0x65, 0xb0,0xf3, 0xb4,0xc5, 0xbd,0xa3, 0xad,0xf0, 0xbf,0x7d, 0xad,0xd5, 0xbd,0xf6, 0xb2,0x49, 0xbd,0xeb, 0xbf,0x53, 0xb1,0xc7, 0xc0,0xdc, 0xb7,0xca, 0xb8,0x6c, 0xb5,0xe5, 0xae,0xe7, 0xb0,0x6b, 0xb2,0x5e, 0xb3,0xb3, 0xb0,0x51, 0xae,0x4d, 0xaf,0x53, 0xc4,0xf0, 0xc4,0xcb, 0xaf,0x6b, 0xc1,0xc3, 0xb1,0xe8, 0xad,0xe7, 0xbd,0xf0, 0xbe,0x4f, 0xb4,0xa3, 0xc3,0x44, 0xbf,0xe1, 0xb3,0xda, 0xc5,0xe9, 0xb4,0xc0, 0xc0,0xa1, 0xb1,0xa7, 0xae,0xf7, 0xab,0x63, 0xb1,0x50, 0xa4,0xd1, 0xb2,0x4b, 0xb6,0xf1, 0xa5,0xd0, 0xb2,0xa2, 0xab,0xef, 0xbb,0x51, 0xb5,0xc9, 0xac,0x44, 0xb1,0xf8, 0xad,0x7c, 0xb2,0xb7, 0xb8,0xf5, 0xb6,0x4b, 0xc5,0x4b, 0xa9,0xab, 0xc6,0x55, 0xc5,0xa5, 0xd6,0x4c, 0xa5,0xc5, 0xa7,0xca, 0xb0,0xb1, 0xab,0x46, 0xae,0x78, 0xae,0xbc, 0xb8,0xa5, 0xb3,0x71, 0xae,0xe4, 0xe0,0xac, 0xc0,0xfb, 0xa6,0x50, 0xbb,0xc9, 0xa7,0xcd, 0xb5,0xa3, 0xb1,0xed, 0xd1,0xb6, 0xb5,0xa9, 0xb2,0xce, 0xb5,0x68, 0xb0,0xbd, 0xa7,0xeb, 0xc0,0x59, 0xb3,0x7a, 0xa5,0x59, 0xa8,0x72, 0xac,0xf0, 0xb9,0xcf, 0xae,0x7b, 0xb3,0x7e, 0xb6,0xee, 0xb1,0x4f, 0xa4,0x67, 0xa6,0x52, 0xa8,0xdf, 0xb4,0xf8, 0xb9,0xce, 0xb1,0xc0, 0xc0,0x5a, 0xbb,0x4c, 0xb8,0xc0, 0xbf,0xc6, 0xb0,0x68, 0xa7,0x5d, 0xa4,0xd9, 0xc1,0x76, 0xa9,0xec, 0xa6,0xab, 0xb2,0xe6, 0xc0,0x6b, 0xaa,0xfb, 0xb9,0xa4, 0xbe,0x6d, 0xbe,0xf2, 0xa7,0xb4, 0xa9,0xdd, 0xb3,0xe8, 0xab,0xf5, 0xab,0x7a, 0xb5,0xec, 0xba,0xda, 0xab,0xbd, 0xa5,0xcb, 0xc4,0xfb, 0xac,0x6e, 0xa5,0x7e, 0xbd,0xdc, 0xc5,0x73, 0xc6,0x57, 0xaa,0xb1, 0xb9,0x78, 0xa4,0x59, 0xd6,0x4a, 0xa7,0xb9, 0xb8,0x4a, 0xae,0xbe, 0xb1,0xdf, 0xb5,0x70, 0xb1,0x7b, 0xa9,0x7b, 0xb0,0xfb, 0xb8,0x55, 0xb5,0xc3, 0xa8,0x4c, 0xa4,0xfd, 0xa4,0x60, 0xaa,0x50, 0xba,0xf4, 0xa9,0xb9, 0xa9,0xf4, 0xb1,0xe6, 0xa7,0xd1, 0xa6,0x6b, 0xab,0xc2, 0xc4,0xde, 0xb7,0x4c, 0xa6,0x4d, 0xad,0xb3, 0xb9,0x48, 0xae,0xe9, 0xb3,0xf2, 0xb0,0xdf, 0xb1,0xa9, 0xac,0xb0, 0xc0,0xe5, 0xba,0xfb, 0xb8,0xab, 0xb5,0xe4, 0xa9,0x65, 0xb0,0xb6, 0xb0,0xb0, 0xa7,0xc0, 0xbd,0x6e, 0xa5,0xbc, 0xbd,0xab, 0xa8,0xfd, 0xac,0xc8, 0xad,0x47, 0xb3,0xde, 0xc3,0x51, 0xa6,0xec, 0xb4,0xf4, 0xbf,0xd7, 0xb1,0x4c, 0xbc,0xa2, 0xbd,0xc3, 0xbd,0x45, 0xb7,0xc5, 0xb0,0x41, 0xa4,0xe5, 0xbb,0x44, 0xaf,0xbe, 0xa7,0x6b, 0xc3,0xad, 0xaf,0xbf, 0xb0,0xdd, 0xb6,0xe4, 0xaf,0xce, 0xc2,0x7c, 0xbe,0xe2, 0xbd,0xbd, 0xb4,0xf5, 0xba,0xdb, 0xa7,0xda, 0xba,0x57, 0xaa,0xd7, 0xb4,0xa4, 0xa8,0x55, 0xa7,0xc5, 0xb6,0xe3, 0xc2,0xeb, 0xaf,0x51, 0xa6,0xc3, 0xbb,0x7a, 0xab,0xce, 0xb5,0x4c, 0xbf,0xbe, 0xb1,0xef, 0xa7,0x5e, 0xa7,0x64, 0xa4,0xf0, 0xaa,0x5a, 0xa4,0xad, 0xae,0xb8, 0xa4,0xc8, 0xbb,0x52, 0xa5,0xee, 0xab,0x56, 0xb6,0xf5, 0xa5,0xb3, 0xc3,0xfa, 0xb1,0xe0, 0xaa,0xab, 0xa4,0xc5, 0xb0,0xc8, 0xae,0xa9, 0xbb,0x7e, 0xa9,0xf5, 0xba,0xb3, 0xaa,0x52, 0xa6,0xe8, 0xd6,0xb4, 0xaa,0xbf, 0xb4,0xb7, 0xbc,0x48, 0xa7,0x6c, 0xbf,0xfc, 0xc4,0xeb, 0xb5,0x7d, 0xae,0xa7, 0xa7,0xc6, 0xb1,0x78, 0xbd,0xa5, 0xa4,0x69, 0xb1,0xa4, 0xba,0xb6, 0xb2,0x6d, 0xb7,0xcb, 0xa6,0xc1, 0xb5,0x52, 0xc0,0xca, 0xc5,0xa7, 0xae,0x75, 0xb2,0xdf, 0xb7,0x40, 0xb3,0xdf, 0xbb,0xd1, 0xac,0x7e, 0xa8,0x74, 0xbb,0xd8, 0xc0,0xb8, 0xb2,0xd3, 0xbd,0x4d, 0xbd,0xbc, 0xa7,0x58, 0xc1,0xf8, 0xc1,0xd2, 0xb7,0x76, 0xae,0x6c, 0xab,0x4c, 0xaf,0x55, 0xa4,0x55, 0xb7,0x48, 0xae,0x4c, 0xc0,0x7e, 0xb1,0xc8, 0xa1,0xbc, 0xa5,0xfd, 0xa5,0x50, 0xc2,0x41, 0xc5,0xd6, 0xab,0x77, 0xbd,0xe5, 0xbb,0xce, 0xb2,0xec, 0xb6,0xa2, 0xb2,0x43, 0xa9,0xb6, 0xb6,0xfb, 0xc5,0xe3, 0xc0,0x49, 0xb2,0x7b, 0xc4,0x6d, 0xbf,0xa4, 0xb8,0xa2, 0xc0,0x60, 0xb8,0x72, 0xbe,0xcb, 0xb3,0xb4, 0xad,0xad, 0xbd,0x75, 0xac,0xdb, 0xb4,0x5b, 0xc6,0x5e, 0xad,0xbb, 0xbd,0x63, 0xc1,0xb8, 0xb4,0xf0, 0xb6,0x6d, 0xb5,0xbe, 0xb2,0xbb, 0xb8,0xd4, 0xb7,0x51, 0xc5,0x54, 0xa8,0xc9, 0xb6,0xb5, 0xab,0xd1, 0xbe,0xf3, 0xb9,0xb3, 0xa6,0x56, 0xb6,0x48, 0xbf,0xbd, 0xb5,0x76, 0xbe,0x5d, 0xab,0x64, 0xad,0xfd, 0xc4,0xdb, 0xbe,0x50, 0xae,0xf8, 0xae,0x64, 0xb2,0x63, 0xbe,0xe5, 0xa4,0x70, 0xa7,0xb5, 0xae,0xd5, 0xa8,0x76, 0xbc,0x53, 0xaf,0xba, 0xae,0xc4, 0xb7,0xa4, 0xa8,0xc7, 0xb7,0xb2, 0xc3,0xc8, 0xbe,0x63, 0xa8,0xf3, 0xae,0xb5, 0xc4,0xe2, 0xa8,0xb8, 0xb1,0xd7, 0xaf,0xd9, 0xbf,0xd3, 0xbc,0x67, 0xb1,0xf1, 0xa8,0xf8, 0xc3,0xc9, 0xbe,0xd3, 0xaa,0x6e, 0xc2,0x6d, 0xc1,0xc2, 0xae,0x68, 0xc1,0x7e, 0xaa,0xe4, 0xbe,0x4e, 0xaa,0x59, 0xa8,0xaf, 0xb7,0x73, 0xca,0xe3, 0xa4,0xdf, 0xab,0x48, 0xf4,0xb5, 0xac,0x50, 0xb8,0x7b, 0xb5,0x56, 0xb4,0x69, 0xbf,0xb3, 0xa6,0x44, 0xab,0xac, 0xa7,0xce, 0xa8,0xb7, 0xa6,0xe6, 0xbf,0xf4, 0xa9,0xaf, 0xa7,0xf6, 0xa9,0xca, 0xa9,0x6d, 0xa5,0x53, 0xa5,0xfb, 0xaf,0xdd, 0xa6,0x49, 0xac,0xa4, 0xb6,0xaf, 0xba,0xb5, 0xa5,0xf0, 0xad,0xd7, 0xb2,0xdb, 0xa6,0xb4, 0xb6,0xe5, 0xc4,0xc3, 0xa8,0x71, 0xb3,0x53, 0xc2,0xb8, 0xbc,0x56, 0xa6,0xa6, 0xbb,0xdd, 0xb5,0xea, 0xbc,0x4e, 0xb6,0xb7, 0xae,0x7d, 0xb3,0x5c, 0xbb,0x57, 0xb3,0xa4, 0xb1,0xd4, 0xa6,0xb0, 0xa7,0xc7, 0xaf,0x62, 0xab,0xf2, 0xb5,0xb6, 0xb4,0x42, 0xba,0xfc, 0xc4,0xf2, 0xb0,0x61, 0xb3,0xd9, 0xab,0xc5, 0xc4,0x61, 0xb1,0xdb, 0xa5,0xc8, 0xbf,0xef, 0xc5,0x7e, 0xaf,0x74, 0xb5,0xba, 0xb9,0x75, 0xc1,0xa7, 0xbe,0xc7, 0xa5,0xde, 0xb3,0xb7, 0xa6,0xe5, 0xb3,0xd4, 0xe2,0xc0, 0xb4,0x60, 0xa6,0xaf, 0xb8,0xdf, 0xb4,0x4d, 0xb9,0xa5, 0xa8,0xb5, 0xae,0xee, 0xa6,0xc4, 0xb0,0x56, 0xb0,0x54, 0xbb,0xb9, 0xa8,0xb3, 0xc0,0xa3, 0xa9,0xe3, 0xbe,0x7e, 0xc0,0x6e, 0xa7,0x72, 0xa4,0x58, 0xaa,0xde, 0xa4,0xfa, 0xb0,0x48, 0xb1,0x56, 0xb8,0xc5, 0xb2,0x50, 0xb6,0xae, 0xb0,0xd7, 0xa8,0xc8, 0xb3,0x59, 0xb2,0x6a, 0xc3,0x60, 0xec,0x49, 0xb7,0xcf, 0xb2,0x54, 0xc6,0x51, 0xc4,0x59, 0xac,0xe3, 0xe3,0xe9, 0xc5,0xc9, 0xa9,0xb5, 0xa8,0xa5, 0xc3,0x43, 0xc0,0x46, 0xaa,0xa2, 0xaa,0x75, 0xa9,0x61, 0xb1,0xbb, 0xb2,0xb4, 0xad,0x6c, 0xba,0x74, 0xc6,0x41, 0xb3,0xf7, 0xbf,0x50, 0xb9,0xbd, 0xb5,0x78, 0xb6,0xad, 0xad,0xf1, 0xab,0xdb, 0xbf,0x56, 0xae,0x62, 0xbf,0xce, 0xc5,0xe7, 0xac,0x6f, 0xa5,0xa1, 0xc0,0x6d, 0xaf,0xb1, 0xb7,0xa8, 0xb4,0xad, 0xa8,0xcb, 0xba,0xc5, 0xa6,0xcf, 0xac,0x76, 0xb6,0xa7, 0xae,0xf1, 0xa5,0xf5, 0xc4,0x6f, 0xbe,0x69, 0xbc,0xcb, 0xba,0x79, 0xc1,0xdc, 0xb8,0x79, 0xa7,0xaf, 0xba,0xbd, 0xb7,0x6e, 0xb3,0xf3, 0xbb,0xbb, 0xbd,0x60, 0xc1,0xc1, 0xab,0xc0, 0xab,0x72, 0xaf,0xe6, 0xc3,0xc4, 0xad,0x6e, 0xc4,0xa3, 0xb7,0xa6, 0xbc,0x4f, 0xad,0x43, 0xb7,0xdd, 0xb3,0xa5, 0xa7,0x4d, 0xa4,0x5d, 0xad,0xb6, 0xb1,0xb3, 0xb7,0x7e, 0xb8,0xad, 0xa6,0xb2, 0xb5,0xc5, 0xa9,0x5d, 0xb2,0x47, 0xa4,0x40, 0xb3,0xfc, 0xc2,0xe5, 0xb4,0xa5, 0xe4,0x76, 0xa8,0xcc, 0xa5,0xec, 0xa6,0xe7, 0xc0,0x5b, 0xa6,0x69, 0xbf,0xf2, 0xb2,0xbe, 0xbb,0xf6, 0xaf,0xd8, 0xba,0xc3, 0xa8,0x5e, 0xa9,0x79, 0xab,0xbc, 0xc2,0x55, 0xb4,0xc8, 0xc3,0xc6, 0xad,0xca, 0xa4,0x77, 0xa4,0x41, 0xa8,0x6f, 0xa5,0x48, 0xc3,0xc0, 0xa7,0xed, 0xa9,0xf6, 0xa8,0xb6, 0xa6,0x7a, 0xbb,0xf5, 0xa7,0xd0, 0xc1,0x72, 0xb6,0x68, 0xb8,0x77, 0xac,0xcc, 0xa5,0xe7, 0xb8,0xc7, 0xb7,0x4e, 0xbc,0xdd, 0xbe,0xd0, 0xb8,0x71, 0xaf,0x71, 0xb7,0xb8, 0xb8,0xda, 0xc4,0xb3, 0xbd,0xcb, 0xc4,0xb6, 0xb2,0xa7, 0xc1,0x6c, 0xb2,0xdd, 0xc3,0xb6, 0xaf,0xf4, 0xbd,0xae, 0xa6,0x5d, 0xae,0xef, 0xad,0xb5, 0xb3,0xb1, 0xab,0xc3, 0xa7,0x75, 0xbb,0xc8, 0xb2,0x5d, 0xb1,0x47, 0xb6,0xbc, 0xa4,0xa8, 0xa4,0xde, 0xc1,0xf4, 0xa6,0x4c, 0xad,0x5e, 0xc4,0xe5, 0xc0,0xa6, 0xc6,0x4e, 0xc0,0xb3, 0xc5,0xd5, 0xbc,0xfc, 0xbf,0xc3, 0xc0,0xe7, 0xba,0xb7, 0xc3,0xc7, 0xaa,0xef, 0xc4,0xb9, 0xac,0xd5, 0xbc,0x76, 0xbf,0x6f, 0xb5,0x77, 0xac,0x4d, 0xb3,0xe9, 0xbe,0xd6, 0xb6,0xc4, 0xc1,0x73, 0xf7,0xea, 0xb1,0x65, 0xb9,0x6c, 0xbf,0xe3, 0xb8,0xba, 0xb5,0xfa, 0xaa,0x61, 0xb4,0xe9, 0xa5,0xc3, 0xb1,0x76, 0xab,0x69, 0xa5,0xce, 0xab,0xd5, 0xc0,0x75, 0xb1,0x79, 0xbc,0x7e, 0xa4,0xd7, 0xa5,0xd1, 0xb6,0x6c, 0xb9,0x5c, 0xb5,0x53, 0xaa,0x6f, 0xb9,0x43, 0xa8,0xbb, 0xa6,0xb3, 0xa4,0xcd, 0xa5,0x6b, 0xa6,0xf6, 0xb9,0x56, 0xbb,0xa4, 0xa4,0x53, 0xa5,0xae, 0xa8,0xb1, 0xb2,0x4a, 0xa9,0xf3, 0xaa,0xbb, 0xb7,0xae, 0xb8,0xb7, 0xb7,0x4d, 0xc1,0xd6, 0xa7,0x45, 0xab,0x5c, 0xb9,0x4f, 0xb3,0xbd, 0xb4,0x72, 0xb4,0xfc, 0xba,0xae, 0xb6,0xa8, 0xa4,0xa9, 0xae,0x54, 0xab,0x42, 0xbb,0x50, 0xc0,0xac, 0xac,0xea, 0xa6,0x74, 0xbb,0x79, 0xa6,0xd0, 0xa5,0xc9, 0xb0,0xec, 0xa8,0xa1, 0xc6,0x7b, 0xa6,0x53, 0xb9,0x4a, 0xb3,0xeb, 0xae,0x6e, 0xb1,0x73, 0xc2,0xa1, 0xb1,0xfd, 0xba,0xbb, 0xa8,0x7c, 0xc5,0x41, 0xaf,0x44, 0xb4,0x4a, 0xb8,0xce, 0xb9,0x77, 0xbf,0xdd, 0xb6,0xbf, 0xc0,0x70, 0xb2,0x57, 0xad,0xde, 0xa4,0xb8, 0xab,0xae, 0xb0,0x4b, 0xad,0xec, 0xb4,0xa9, 0xc1,0xd5, 0xb6,0xe9, 0xad,0xfb, 0xb6,0xea, 0xb7,0xe1, 0xb7,0xbd, 0xbd,0x74, 0xbb,0xb7, 0xad,0x62, 0xc4,0x40, 0xab,0xe8, 0xb0,0x7c, 0xa4,0xea, 0xac,0xf9, 0xb6,0x56, 0xc5,0x44, 0xc6,0x5f, 0xa9,0xa8, 0xb8,0x66, 0xa4,0xeb, 0xae,0xae, 0xbe,0x5c, 0xaf,0xd0, 0xb6,0xb3, 0xe0,0xa8, 0xa4,0xc3, 0xb9,0x6b, 0xa4,0xb9, 0xb9,0x42, 0xc4,0xad, 0xc1,0xdf, 0xb7,0x77, 0xc3,0xfd, 0xa5,0xa5, 0xa5,0x60, 0xaf,0x7b, 0xc2,0xf8, 0xae,0xe2, 0xab,0x76, 0xa8,0x61, 0xae,0x5f, 0xb8,0xfc, 0xa6,0x41, 0xa6,0x62, 0xab,0xa5, 0xf6,0xe3, 0xbc,0xc8, 0xc6,0x67, 0xc5,0x42, 0xc5,0xa6, 0xb8,0xae, 0xbe,0x44, 0xc1,0x56, 0xc6,0x77, 0xc4,0xa6, 0xb4,0xc7, 0xa6,0xad, 0xbe,0xfe, 0xb0,0x44, 0xc4,0xbc, 0xbe,0xb8, 0xb3,0x79, 0xa8,0x6d, 0xa8,0x5f, 0xc0,0xea, 0xb3,0x64, 0xbe,0xdc, 0xab,0x68, 0xbf,0x41, 0xb8,0xe9, 0xab,0xe7, 0xbc,0x57, 0xbc,0xa8, 0xb4,0xbf, 0xc3,0xd8, 0xb2,0xcf, 0xb3,0xe5, 0xb4,0xed, 0xa5,0xbe, 0xaa,0xee, 0xee,0xd4, 0xb9,0x68, 0xaf,0x77, 0xac,0x5d, 0xba,0x5e, 0xa9,0x51, 0xa5,0x45, 0xac,0xb5, 0xb6,0x42, 0xba,0x4b, 0xc2,0x4e, 0xa6,0x76, 0xaf,0xb6, 0xb6,0xc5, 0xb9,0xeb, 0xc2,0xa4, 0xc0,0xd6, 0xb8,0xe2, 0xd6,0xdf, 0xaa,0x67, 0xb7,0xf8, 0xb1,0xd9, 0xc1,0xd3, 0xb9,0xf1, 0xae,0x69, 0xc5,0xd9, 0xb4,0xcc, 0xa6,0xfb, 0xbe,0xd4, 0xaf,0xb8, 0xb4,0xef, 0xba,0xec, 0xbc,0xcc, 0xb3,0xb9, 0xb9,0xfc, 0xba,0x73, 0xb1,0x69, 0xb4,0x78, 0xba,0xa6, 0xa7,0xfa, 0xa4,0x56, 0xb1,0x62, 0xbd,0xe3, 0xa5,0x4d, 0xb5,0xc8, 0xbf,0x60, 0xbb,0xd9, 0xa9,0xdb, 0xac,0x4c, 0xa7,0xe4, 0xaa,0x68, 0xbb,0xaf, 0xb7,0xd3, 0xb8,0x6e, 0xa5,0xfc, 0xbb,0x46, 0xa5,0x6c, 0xbe,0x42, 0xa7,0xe9, 0xad,0xf5, 0xee,0x68, 0xc2,0xe1, 0xaa,0xcc, 0xeb,0xe3, 0xbd,0xa9, 0xb3,0x6f, 0xae,0xfd, 0xac,0xc3, 0xb7,0x72, 0xaf,0x75, 0xba,0xc2, 0xaf,0x7a, 0xbf,0xb2, 0xad,0x73, 0xb0,0x77, 0xb0,0xbb, 0xaa,0x45, 0xaf,0x6c, 0xb6,0x45, 0xbe,0x5f, 0xae,0xb6, 0xc2,0xed, 0xb0,0x7d, 0xbb,0x5d, 0xb1,0xc3, 0xb8,0x43, 0xa9,0xba, 0xb2,0x75, 0xaa,0xa7, 0xa9,0xc3, 0xbe,0xe3, 0xac,0x40, 0xa5,0xbf, 0xac,0x46, 0xb4,0x56, 0xc4,0x70, 0xbe,0x47, 0xb5,0xfd, 0xaa,0xdb, 0xaa,0x4b, 0xa4,0xe4, 0xa7,0x73, 0xbb,0x6a, 0xaa,0xbe, 0xaa,0xcf, 0xaf,0xd7, 0xa5,0xc4, 0xa4,0xa7, 0xc2,0xb4, 0xc2,0xbe, 0xaa,0xbd, 0xb4,0xd3, 0xb4,0xde, 0xb0,0xf5, 0xad,0xc8, 0xcb,0xbb, 0xa7,0x7d, 0xab,0xfc, 0xa4,0xee, 0xb3,0x6b, 0xb0,0xa6, 0xa6,0xae, 0xaf,0xc8, 0xa7,0xd3, 0xbc,0xb0, 0xc2,0x59, 0xa6,0xdc, 0xad,0x50, 0xb8,0x6d, 0xbc,0x6d, 0xab,0xcf, 0xa8,0xee, 0xb4,0xbc, 0xaf,0xb4, 0xb8,0x58, 0xbd,0xe8, 0xaa,0xa5, 0xb2,0xa9, 0xba,0xa2, 0xaa,0x76, 0xb2,0xbf, 0xa4,0xa4, 0xac,0xd8, 0xa9,0xbe, 0xc4,0xc1, 0xb0,0x4a, 0xb2,0xd7, 0xba,0xd8, 0xb8,0x7e, 0xad,0xab, 0xa5,0xf2, 0xb2,0xb3, 0xa6,0xe0, 0xa9,0x50, 0xa6,0x7b, 0xac,0x77, 0xee,0xa4, 0xb5,0xb0, 0xb6,0x62, 0xa8,0x79, 0xa9,0xaa, 0xa9,0x47, 0xbd,0x4b, 0xa9,0x7a, 0xb1,0xde, 0xc6,0x4a, 0xaf,0x5d, 0xae,0xe8, 0xb5,0xef, 0xa6,0xb6, 0xbd,0xde, 0xbd,0xd1, 0xb8,0xdd, 0xb3,0x76, 0xa6,0xcb, 0xc0,0xeb, 0xb5,0x4e, 0xa9,0xd6, 0xc6,0x66, 0xc5,0xf1, 0xa5,0x44, 0xb5,0xdb, 0xac,0x57, 0xa7,0x55, 0xb3,0x45, 0xb6,0x4a, 0xc5,0xb1, 0xbf,0x76, 0xa6,0xed, 0xaa,0x60, 0xaf,0xac, 0xbe,0x6e, 0xa7,0xec, 0xa4,0xf6, 0xab,0xfb, 0xb1,0x4d, 0xbf,0x6a, 0xc2,0xe0, 0xbc,0xb6, 0xc1,0xc8, 0xbd,0x66, 0xbc,0xce, 0xb2,0xf8, 0xb8,0xcb, 0xa7,0xa9, 0xbc,0xb2, 0xa7,0xa7, 0xaa,0xac, 0xb4,0xd5, 0xc0,0x40, 0xb0,0x6c, 0xc2,0xd8, 0xbc,0x59, 0xba,0xf3, 0xbd,0xce, 0xb7,0xc7, 0xae,0xbb, 0xa9,0xe5, 0xa8,0xf4, 0xae,0xe0, 0xb5,0x5a, 0xad,0x5f, 0xb0,0x75, 0xb0,0xd6, 0xb5,0xdb, 0xa8,0x60, 0xbf,0x42, 0xaf,0xf7, 0xab,0x74, 0xb8,0xea, 0xab,0xba, 0xb4,0xfe, 0xb2,0x64, 0xa7,0xb6, 0xb5,0xb5, 0xa5,0x4a, 0xac,0xf3, 0xb7,0xba, 0xa4,0x6c, 0xa6,0xdb, 0xba,0x7b, 0xa6,0x72, 0xc3,0x4f, 0xb4,0xc4, 0xc2,0xdc, 0xa9,0x76, 0xba,0xee, 0xc1,0x60, 0xc1,0x61, 0xb9,0x51, 0xa8,0xab, 0xab,0xb5, 0xb4,0x7e, 0xaf,0xb2, 0xa8,0xac, 0xa8,0xf2, 0xb1,0xda, 0xaf,0xaa, 0xb6,0x41, 0xaa,0xfd, 0xb2,0xd5, 0xc6,0x70, 0xc4,0xa1, 0xbc,0x4c, 0xbe,0x4b, 0xb3,0xcc, 0xb8,0x6f, 0xb4,0x4c, 0xbf,0xed, 0xac,0x51, 0xa5,0xaa, 0xa6,0xf5, 0xac,0x67, 0xb0,0xb5, 0xa7,0x40, 0xa7,0xa4, 0xae,0x79, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xc9,0x48, 0xc9,0x46, 0xa4,0x61, 0xa4,0xa2, 0xa4,0xdc, 0xa4,0xca, 0xa5,0x41, 0xa5,0xe5, 0xa5,0xe0, 0xb0,0xac, 0xd1,0x65, 0xbe,0xb5, 0xa1,0xbc, 0xac,0xeb, 0xa1,0xbc, 0xa4,0x50, 0xc9,0x47, 0xa4,0xd4, 0xa4,0xf8, 0xa5,0x67, 0xa5,0xc2, 0xc9,0xc7, 0xad,0x4e, 0xd8,0x50, 0xb7,0xb6, 0xe2,0xe9, 0xa1,0xbc, 0xa1,0xbc, 0xab,0x45, 0xe8,0xf3, 0xc9,0x41, 0xa5,0xe4, 0xc9,0x51, 0xaa,0xcb, 0xa7,0xb8, 0xb6,0xde, 0xe1,0x4c, 0xa4,0xb7, 0xcd,0xf8, 0xad,0xed, 0xf1,0xef, 0xb3,0xd6, 0xbc,0x72, 0xc5,0xe2, 0xc5,0xac, 0xc9,0x43, 0xa5,0x72, 0xd4,0x6f, 0xb9,0xbc, 0xb0,0xd0, 0xf0,0xf3, 0xa8,0xf6, 0xca,0x72, 0xa1,0xbc, 0xa4,0xc2, 0xa6,0x46, 0xcd,0xf0, 0xcb,0xd2, 0xe4,0xf3, 0xb3,0xcf, 0xab,0x66, 0xd0,0xe9, 0xd0,0xe6, 0xad,0xe6, 0xe3,0xc7, 0xb6,0xd1, 0xb9,0xbb, 0xe1,0x42, 0xa1,0xbc, 0xbe,0xb0, 0xa1,0xbc, 0xaa,0xc9, 0xa1,0xbc, 0xa4,0xb1, 0xc9,0x53, 0xc9,0x52, 0xc9,0x65, 0xc9,0x68, 0xa1,0xbc, 0xa5,0x51, 0xdc,0xba, 0xa5,0xf6, 0xc9,0xb7, 0xca,0x5f, 0xc9,0xae, 0xad,0xce, 0xb3,0xc9, 0xa5,0xea, 0xa6,0xee, 0xa6,0xf0, 0xca,0x61, 0xa7,0xf1, 0xa7,0x48, 0xa7,0x46, 0xca,0x63, 0xa6,0xef, 0xa1,0xbc, 0xa6,0xf7, 0xcb,0xb8, 0xcb,0xb9, 0xa8,0xdd, 0xcb,0xba, 0xa8,0xd4, 0xa8,0xdc, 0xa8,0xdb, 0xa8,0xd9, 0xbe,0xab, 0xcb,0xb3, 0xbb,0xfa, 0xcb,0xc6, 0xbe,0xa9, 0xc5,0x6b, 0xc4,0xd7, 0xcd,0xde, 0xab,0x5a, 0xcd,0xe3, 0xcd,0xe5, 0xab,0x4d, 0xab,0x53, 0xad,0xc4, 0xad,0xc5, 0xb0,0xb4, 0xad,0xd6, 0xd0,0xd3, 0xb0,0xbf, 0xa1,0xbc, 0xad,0xd8, 0xad,0xda, 0xd0,0xd7, 0xad,0xbe, 0xad,0xc3, 0xad,0xd0, 0xe0,0xf3, 0xb0,0xb3, 0xb0,0xba, 0xd4,0x55, 0xb0,0xb9, 0xb6,0xcd, 0xdc,0xbc, 0xc5,0x6c, 0xbe,0xaa, 0xf5,0xc0, 0xdc,0xbf, 0xb9,0xaf, 0xe4,0xea, 0xb9,0xb0, 0xe0,0xfa, 0xe0,0xf0, 0xb9,0xad, 0xe4,0xeb, 0xe4,0xee, 0xc9,0x69, 0xc9,0xf8, 0xca,0x65, 0xdc,0xc2, 0xab,0x5b, 0xef,0xb6, 0xc9,0xf8, 0xf7,0x40, 0xa4,0xbc, 0xb4,0x53, 0xc6,0x64, 0xef,0x55, 0xf6,0xd8, 0xc4,0xdc, 0xa1,0xbc, 0xab,0x6d, 0xd0,0xb1, 0xb0,0xcb, 0xe0,0xed, 0xa6,0x67, 0xa8,0xe1, 0xa1,0xbc, 0xab,0x5e, 0xad,0xbd, 0xb3,0x4f, 0xd7,0xc0, 0xc1,0xb6, 0xf9,0x43, 0xb8,0xcf, 0xb8,0x5b, 0xbe,0xc6, 0xf2,0xdd, 0xc3,0xbd, 0xa1,0xbc, 0xc9,0xbc, 0xa8,0xe6, 0xcb,0xce, 0xa1,0xbc, 0xa1,0xbc, 0xb6,0xef, 0xad,0xdf, 0xf3,0x65, 0xb0,0x50, 0xb0,0x52, 0xb0,0x53, 0xf0,0xdd, 0xdb,0xd6, 0xb3,0x5b, 0xb5,0xfe, 0xb6,0x46, 0xb6,0x43, 0xdb,0xdc, 0xb6,0x40, 0xdb,0xdf, 0xe0,0x46, 0xe0,0x4c, 0xe0,0x47, 0xb8,0xd7, 0xb8,0xd9, 0xe0,0x4d, 0xb8,0xe1, 0xb8,0xe0, 0xbd,0xd8, 0xeb,0xa1, 0xe0,0x48, 0xbb,0xa6, 0xbb,0xa2, 0xbb,0xa5, 0xe4,0x4d, 0xe7,0xd4, 0xe7,0xd8, 0xbd,0xd3, 0xbd,0xdb, 0xe7,0xdc, 0xbd,0xd4, 0xbd,0xd9, 0xbf,0xdb, 0xbf,0xcf, 0xeb,0xa6, 0xbf,0xd6, 0xeb,0xa7, 0xbf,0xd9, 0xbf,0xdc, 0xbf,0xda, 0xbf,0xcd, 0xbf,0xd4, 0xeb,0xab, 0xc2,0xd3, 0xc6,0x6d, 0xee,0xa2, 0xee,0xb0, 0xc1,0xc4, 0xc2,0xd6, 0xf7,0x56, 0xf2,0xfb, 0xc3,0xd7, 0xc3,0xd4, 0xf9,0xa9, 0xc4,0xb8, 0xc6,0x40, 0xa1,0xbc, 0xce,0xaf, 0xa1,0xbc, 0xca,0x56, 0xa6,0xe9, 0xa8,0xc0, 0xa8,0xc1, 0xcd,0xd9, 0xcd,0xda, 0xab,0x40, 0xb0,0xa4, 0xd0,0xc2, 0xd4,0x46, 0xdc,0xa1, 0xb3,0xb5, 0xb6,0xab, 0xb3,0xb2, 0xdc,0x7e, 0xb6,0xaa, 0xe0,0xd4, 0xee,0xf5, 0xca,0x52, 0xca,0x54, 0xf1,0x4b, 0xca,0x51, 0xe0,0xa9, 0xcb,0xa8, 0xcd,0xd4, 0xcd,0xd6, 0xaa,0xf5, 0xbf,0xf3, 0xaa,0xf3, 0xcd,0xd7, 0xd3,0xf7, 0xd0,0xbb, 0xd0,0xbc, 0xeb,0xd7, 0xa1,0xbc, 0xd0,0xbd, 0xdc,0x50, 0xc5,0xb0, 0xb0,0x72, 0xd3,0xfc, 0xd3,0xfb, 0xd3,0xfa, 0xd7,0xef, 0xd7,0xe8, 0xb6,0x6e, 0xdc,0x52, 0xe4,0x6b, 0xbb,0xc2, 0xe4,0x68, 0xbe,0x49, 0xe8,0x54, 0xc1,0xdd, 0xf4,0xe1, 0xf6,0x5a, 0xaf,0xec, 0xab,0xb7, 0xe4,0xf4, 0xa7,0x57, 0xca,0x6f, 0xa8,0xf0, 0xd0,0xf8, 0xa1,0xbc, 0xd4,0x6d, 0xbc,0x45, 0xad,0xee, 0xc0,0xe8, 0xf4,0x77, 0xa1,0xbc, 0xc9,0x42, 0xa1,0xbc, 0xd4,0x4a, 0xa1,0xbc, 0xa5,0xaf, 0xaf,0x63, 0xd0,0x57, 0xca,0xac, 0xb0,0xee, 0xa1,0xbc, 0xb9,0xd1, 0xe9,0x4f, 0xbe,0xc3, 0xc0,0xa4, 0xa6,0x66, 0xa6,0x64, 0xc9,0xc9, 0xa6,0x60, 0xc2,0x52, 0xc9,0xc8, 0xa6,0x65, 0xc3,0x63, 0xa7,0xa6, 0xa1,0xbc, 0xa9,0x58, 0xa1,0xbc, 0xcb,0xf5, 0xf1,0xf6, 0xa9,0x5c, 0xcb,0xfb, 0xcc,0x40, 0xcb,0xf4, 0xcb,0xf8, 0xcb,0xfc, 0xd4,0xc1, 0xce,0x53, 0xce,0x54, 0xdc,0xe5, 0xd4,0xba, 0xa1,0xbc, 0xa1,0xbc, 0xab,0xb2, 0xab,0xad, 0xd1,0x4c, 0xb6,0xf6, 0xb3,0xfa, 0xdc,0xe4, 0xd1,0x4d, 0xd1,0x52, 0xd4,0xb2, 0xa1,0xbc, 0xd4,0xb7, 0xb0,0xf1, 0xa1,0xbc, 0xd4,0xb8, 0xd4,0xcb, 0xd4,0xb5, 0xd4,0xb4, 0xd4,0xb3, 0xd8,0xa2, 0xd8,0xa1, 0xa1,0xbc, 0xb3,0xfb, 0xdc,0xed, 0xa1,0xbc, 0xe1,0x5b, 0xe1,0x56, 0xa1,0xbc, 0xbc,0x55, 0xc4,0xc9, 0xc5,0x67, 0xc5,0x74, 0xa1,0xbc, 0xca,0x4d, 0xca,0x4e, 0xcb,0x7a, 0xcb,0xa1, 0xcd,0xbf, 0xcb,0xa3, 0xcb,0x7c, 0xcb,0x7d, 0xeb,0x52, 0xaa,0xdc, 0xcd,0xb4, 0xea,0xfc, 0xaa,0xe8, 0xaa,0xe7, 0xf4,0xbe, 0xa1,0xbc, 0xad,0x55, 0xcd,0xb6, 0xaa,0xe9, 0xcd,0xba, 0xb3,0x41, 0xb5,0xe7, 0xe7,0x76, 0xcd,0xc1, 0xcd,0xbe, 0xcd,0xc0, 0xa1,0xbc, 0xaa,0xdf, 0xa1,0xbc, 0xad,0x52, 0xcd,0xc3, 0xd0,0x77, 0xad,0x5b, 0xa1,0xbc, 0xd0,0xa1, 0xf4,0xb8, 0xd0,0x6e, 0xad,0x60, 0xd0,0x75, 0xad,0x5c, 0xa1,0xbc, 0xd0,0x7a, 0xd0,0x7b, 0xad,0x64, 0xe7,0x72, 0xa1,0xbc, 0xad,0x67, 0xb6,0xf7, 0xde,0x72, 0xd0,0xa2, 0xd0,0x71, 0xd3,0x7d, 0xd3,0x77, 0xea,0xfe, 0xe7,0x6e, 0xd3,0xa5, 0xb2,0xf7, 0xd3,0xa6, 0xaf,0xf5, 0xaf,0xfc, 0xd7,0x6c, 0xeb,0x4c, 0xd3,0xac, 0xaf,0xf6, 0xd3,0xae, 0xaf,0xfe, 0xee,0x50, 0xaf,0xfb, 0xaf,0xfa, 0xc2,0xc9, 0xd3,0x74, 0xd0,0x72, 0xd3,0x73, 0xba,0xba, 0xe2,0x6c, 0xeb,0x43, 0xd3,0xa3, 0xf0,0xb0, 0xa1,0xbc, 0xbb,0x5e, 0xdf,0xd2, 0xa1,0xbc, 0xd7,0x74, 0xb2,0xf2, 0xe3,0xc2, 0xb8,0xb1, 0xb2,0xfb, 0xd7,0x6d, 0xb2,0xf9, 0xa1,0xbc, 0xbb,0x59, 0xb2,0xfe, 0xee,0x56, 0xd7,0x67, 0xd7,0x68, 0xeb,0x4f, 0xb2,0xfd, 0xb2,0xf1, 0xb2,0xf0, 0xd7,0x5b, 0xc5,0x61, 0xa1,0xbc, 0xb5,0xd7, 0xdb,0x6d, 0xdb,0x6f, 0xdb,0x70, 0xd4,0xbb, 0xa1,0xbc, 0xb5,0xd6, 0xdb,0x6e, 0xb5,0xe0, 0xdb,0x75, 0xa1,0xbc, 0xb5,0xe3, 0xdb,0x7b, 0xdb,0x7c, 0xb5,0xe8, 0xb5,0xe9, 0xdb,0x79, 0xb5,0xd1, 0xb5,0xd2, 0xdb,0x5e, 0xdb,0xa5, 0xb5,0xd5, 0xdb,0x60, 0xbf,0xa2, 0xb5,0xdd, 0xdb,0x72, 0xa1,0xbc, 0xdf,0xb1, 0xdf,0xb8, 0xdf,0xb9, 0xdf,0xbb, 0xeb,0x41, 0xa1,0xbc, 0xdf,0xc2, 0xeb,0x44, 0xdf,0xc4, 0xb8,0xb0, 0xb8,0xb6, 0xb8,0xb4, 0xdf,0xac, 0xe7,0x6f, 0xdf,0xd5, 0xb8,0xa9, 0xb8,0xb5, 0xe3,0xb8, 0xe3,0xb9, 0xe3,0xbd, 0xc5,0x5a, 0xa1,0xbc, 0xbb,0x5f, 0xbb,0x63, 0xbb,0x55, 0xe3,0xb0, 0xf7,0xf0, 0xe3,0xae, 0xe3,0xb6, 0xe3,0xb7, 0xe3,0xac, 0xf1,0x6a, 0xee,0x40, 0xe7,0x5c, 0xbf,0x5f, 0xa1,0xbc, 0xe7,0x75, 0xf5,0xfd, 0xe7,0x54, 0xc4,0xa9, 0xea,0xf8, 0xe7,0x4d, 0xbd,0xb6, 0xe7,0x64, 0xbf,0xb7, 0xbf,0xb8, 0xbf,0xb9, 0xeb,0x42, 0xbf,0xbf, 0xee,0x44, 0xea,0x7b, 0xbf,0xbb, 0xf4,0xbf, 0xed,0xfb, 0xed,0xfc, 0xc1,0xa9, 0xc1,0xa8, 0xed,0xf5, 0xee,0x52, 0xc3,0xc1, 0xc1,0xa3, 0xee,0x51, 0xc2,0xca, 0xf0,0xb8, 0xc2,0xc8, 0xc4,0xf6, 0xa1,0xbc, 0xf2,0xd4, 0xf4,0xb9, 0xf5,0xf8, 0xf4,0xc1, 0xf5,0xfc, 0xc4,0xf4, 0xf7,0xf3, 0xa4,0x7b, 0xab,0xd9, 0xc9,0xcb, 0xb9,0xdd, 0xd0,0x55, 0xab,0xb3, 0xae,0x4f, 0xae,0x4e, 0xb0,0xcc, 0xa4,0x71, 0xc9,0xd5, 0xa7,0xbc, 0xc0,0xaa, 0xa1,0xbc, 0xb1,0xbf, 0xe1,0xde, 0xcc,0xbd, 0xcc,0xb9, 0xa9,0xe9, 0xa9,0xed, 0xab,0xfa, 0xe5,0xb9, 0xce,0xdf, 0xd1,0xba, 0xd1,0xbb, 0xd1,0xb8, 0xd5,0x6d, 0xd9,0x5e, 0xb1,0xba, 0xb1,0xcc, 0xd5,0x71, 0xba,0x51, 0xd5,0x79, 0xb1,0xc5, 0xd5,0x68, 0xb1,0xca, 0xd5,0x7a, 0xe1,0xe8, 0xd9,0x60, 0xa1,0xbc, 0xd9,0x5d, 0xbc,0xc3, 0xd9,0x67, 0xa1,0xbc, 0xd9,0x55, 0xb4,0xac, 0xb4,0x7d, 0xd9,0x64, 0xef,0xd2, 0xdd,0xae, 0xdd,0xb6, 0xdd,0xb8, 0xdd,0x7d, 0xdd,0xaa, 0xdd,0xab, 0xdd,0xba, 0xe1,0xe7, 0xf4,0x4c, 0xba,0x54, 0xe5,0xaf, 0xba,0x50, 0xc2,0x5e, 0xef,0xd7, 0xbc,0xc1, 0xf5,0xcd, 0xa1,0xbc, 0xe9,0xa6, 0xe9,0xa4, 0xec,0xec, 0xc0,0xc2, 0xf2,0x45, 0xf7,0xdd, 0xf8,0xef, 0xa4,0x7c, 0xca,0xd6, 0xa1,0xbc, 0xb7,0x49, 0xa1,0xbc, 0xa5,0x77, 0xbc,0x54, 0xa5,0x6e, 0xa5,0x6f, 0xa5,0x7b, 0xa6,0x5c, 0xa1,0xbc, 0xa6,0x5b, 0xa1,0xbc, 0xe5,0x46, 0xc5,0x6d, 0xca,0x79, 0xf1,0xf2, 0xa7,0x63, 0xa1,0xbc, 0xd0,0xf9, 0xce,0x4a, 0xa1,0xbc, 0xa1,0xbc, 0xcb,0xdf, 0xa1,0xbc, 0xa9,0x45, 0xa9,0x4b, 0xcb,0xef, 0xa9,0x4e, 0xc0,0x7b, 0xa9,0x46, 0xa9,0x4c, 0xcb,0xe7, 0xa1,0xbc, 0xa1,0xbc, 0xcd,0xfc, 0xab,0x7b, 0xa1,0xbc, 0xe8,0xfd, 0xab,0xa8, 0xab,0x78, 0xe4,0xf9, 0xb9,0xcd, 0xce,0x4d, 0xa1,0xbc, 0xe9,0x41, 0xab,0xa6, 0xab,0xa9, 0xa1,0xbc, 0xe9,0x44, 0xa1,0xbc, 0xec,0xc1, 0xab,0xa7, 0xab,0x7d, 0xa1,0xbc, 0xbe,0xba, 0xcd,0xfe, 0xce,0x4e, 0xe1,0x4d, 0xd0,0xf4, 0xbc,0x47, 0xae,0x43, 0xad,0xf8, 0xd0,0xf5, 0xdc,0xd4, 0xa1,0xbc, 0xae,0x44, 0xd0,0xfc, 0xae,0x41, 0xd4,0x77, 0xb9,0xc9, 0xd8,0x6f, 0xd8,0x70, 0xa1,0xbc, 0xc4,0xda, 0xb0,0xe7, 0xb0,0xde, 0xa1,0xbc, 0xd4,0x75, 0xd4,0x73, 0xad,0xf2, 0xb0,0xdc, 0xd4,0x71, 0xd4,0x72, 0xd8,0x6a, 0xb0,0xe6, 0xd4,0x7c, 0xb0,0xe3, 0xb3,0xe3, 0xdc,0xd6, 0xb3,0xe4, 0xb3,0xed, 0xa1,0xbc, 0xd8,0x6e, 0xd8,0x71, 0xb3,0xe7, 0xb3,0xee, 0xdc,0xdb, 0xd8,0x66, 0xb3,0xd7, 0xb6,0xd8, 0xb9,0xc6, 0xf4,0x41, 0xb3,0xe1, 0xb3,0xf1, 0xa1,0xbc, 0xb9,0xc8, 0xb6,0xe8, 0xb9,0xca, 0xb6,0xdf, 0xc4,0xd9, 0xa1,0xbc, 0xdc,0xd2, 0xb6,0xdb, 0xdc,0xd0, 0xdc,0xd3, 0xb6,0xe2, 0xb6,0xe7, 0xdc,0xdd, 0xbe,0xbc, 0xdc,0xcc, 0xdc,0xde, 0xb6,0xd9, 0xa1,0xbc, 0xb6,0xe1, 0xc5,0xaf, 0xa1,0xbc, 0xb9,0xcb, 0xe1,0x49, 0xe1,0x4e, 0xc4,0x58, 0xa1,0xbc, 0xb9,0xbe, 0xb9,0xbf, 0xe1,0x47, 0xa1,0xbc, 0xe4,0xfe, 0xbc,0x49, 0xbc,0x50, 0xe5,0x44, 0xa1,0xbc, 0xbe,0xbe, 0xbe,0xb2, 0xc2,0x50, 0xe4,0xf8, 0xa1,0xbc, 0xec,0xc3, 0xbe,0xb6, 0xbe,0xbb, 0xbe,0xb3, 0xa1,0xbc, 0xa1,0xbc, 0xc0,0x7d, 0xec,0xc0, 0xa1,0xbc, 0xf8,0xee, 0xc9,0x49, 0xa6,0x5f, 0xc9,0xc6, 0xd4,0xac, 0xa7,0x7a, 0xcb,0xf1, 0xab,0xaa, 0xae,0x46, 0xd4,0xab, 0xb0,0xeb, 0xe9,0x47, 0xb4,0x57, 0xcc,0x6f, 0xcc,0x6e, 0xa9,0xae, 0xec,0xdb, 0xe1,0xb2, 0xb9,0xf6, 0xb1,0x63, 0xd8,0xf2, 0xb9,0xf7, 0xb9,0xf3, 0xa1,0xbc, 0xbc,0x6e, 0xa7,0xc4, 0xc9,0xd7, 0xca,0xc0, 0xa7,0xc1, 0xb9,0xf2, 0xca,0xc2, 0xae,0x73, 0xa1,0xbc, 0xa7,0xc2, 0xb4,0x50, 0xa1,0xbc, 0xcc,0x5e, 0xcc,0x65, 0xa1,0xbc, 0xcc,0x61, 0xa9,0xa6, 0xa9,0xa7, 0xcc,0x63, 0xa1,0xbc, 0xa9,0xa2, 0xe9,0x61, 0xab,0xd0, 0xe5,0x69, 0xce,0x7d, 0xb1,0x57, 0xe5,0x63, 0xd4,0xfb, 0xb1,0x5d, 0xd4,0xfc, 0xd5,0x44, 0xb1,0x5c, 0xd4,0xf4, 0xb1,0x53, 0xb1,0x55, 0xc0,0xaf, 0xa1,0xbc, 0xb4,0x51, 0xd8,0xe6, 0xdd,0x52, 0xd8,0xe3, 0xb7,0x44, 0xe1,0xa8, 0xd8,0xdb, 0xd8,0xdd, 0xdd,0x4f, 0xb7,0x43, 0xa1,0xbc, 0xe1,0xa3, 0xe5,0x62, 0xbc,0x6a, 0xc1,0xc7, 0xec,0xda, 0xc5,0x71, 0xc9,0x4c, 0xa7,0xcf, 0xcc,0x75, 0xab,0xe0, 0xab,0xe2, 0xab,0xe1, 0xb1,0x74, 0xb1,0x70, 0xb1,0x75, 0xb4,0x61, 0xdd,0x64, 0xbc,0x78, 0xe9,0x75, 0xc5,0xfc, 0xa1,0xbc, 0xa1,0xbc, 0xc9,0xa6, 0xca,0x43, 0xc2,0x78, 0xa1,0xbc, 0xcb,0x63, 0xcb,0x65, 0xaa,0xad, 0xa1,0xbc, 0xcd,0x61, 0xcf,0xc0, 0xea,0x61, 0xac,0xbc, 0xde,0xac, 0xd2,0xa5, 0xaf,0x58, 0xd2,0xaa, 0xd2,0xa8, 0xea,0x60, 0xd2,0xa4, 0xd2,0xa9, 0xd6,0x61, 0xb2,0x74, 0xc5,0x7a, 0xd6,0x65, 0xd6,0x69, 0xd6,0x60, 0xf4,0x6e, 0xda,0x70, 0xa1,0xbc, 0xb5,0x54, 0xa1,0xbc, 0xa1,0xbc, 0xda,0x71, 0xba,0xbc, 0xe2,0xcb, 0xbc,0xfb, 0xe6,0x79, 0xea,0x5e, 0xed,0x65, 0xf5,0xdd, 0xa6,0xdf, 0xb9,0xd9, 0xb6,0xb8, 0xb9,0xdb, 0xa1,0xbc, 0xa1,0xbc, 0xef,0x4f, 0xb6,0xbb, 0xf1,0xad, 0xb6,0xb9, 0xdc,0xae, 0xb6,0xbd, 0xb9,0x7e, 0xbb,0xe8, 0xe8,0xc1, 0xbe,0x6c, 0xc0,0x5f, 0xa1,0xbc, 0xc3,0x49, 0xf3,0xb1, 0xf3,0xaf, 0xc4,0x44, 0xa1,0xbc, 0xf5,0x57, 0xa1,0xbc, 0xc9,0x79, 0xe5,0x75, 0xca,0xcd, 0xa9,0xb4, 0xce,0xba, 0xab,0xd6, 0xd5,0x49, 0xb1,0x67, 0xb1,0x68, 0xd5,0x4b, 0xbd,0xe9, 0xe1,0xbc, 0xe1,0xb6, 0xe5,0x73, 0xe9,0x72, 0xe9,0x6f, 0xc1,0x74, 0xa1,0xbc, 0xc9,0x7b, 0xa6,0xa4, 0xc4,0x62, 0xbc,0xad, 0xca,0xdb, 0xe1,0xd3, 0xca,0xdd, 0xca,0xde, 0xb7,0x5a, 0xb1,0xa3, 0xb7,0x5b, 0xa7,0xd8, 0xca,0xd9, 0xa7,0xd7, 0xcc,0x7c, 0xa9,0xc5, 0xcc,0x7b, 0xa9,0xcd, 0xa9,0xc2, 0xcc,0xa9, 0xa9,0xcb, 0xa9,0xcc, 0xcc,0xa2, 0xe9,0x7d, 0xa9,0xc9, 0xba,0x45, 0xec,0xe6, 0xb4,0x6c, 0xb7,0x5f, 0xce,0xcb, 0xab,0xf1, 0xd9,0x40, 0xae,0xaf, 0xae,0xaa, 0xe1,0xc7, 0xd1,0xa7, 0xd1,0xa8, 0xd1,0xa5, 0xae,0xad, 0xd1,0xaa, 0xb4,0x67, 0xb1,0xa2, 0xd5,0x5e, 0xd5,0x5c, 0xb1,0xa6, 0xb1,0xa8, 0xb1,0xab, 0xb1,0x7c, 0xb7,0x59, 0xe5,0xa6, 0xb4,0x6a, 0xb4,0x68, 0xb4,0x6d, 0xb4,0x73, 0xb4,0x70, 0xdd,0x68, 0xdd,0x67, 0xba,0x48, 0xbc,0xa9, 0xbc,0xac, 0xbc,0xa5, 0xa1,0xbc, 0xbe,0xcf, 0xc3,0x6a, 0xa9,0xbd, 0xf1,0x6f, 0xad,0xac, 0xd8,0x45, 0xc1,0xf2, 0xb6,0xa3, 0xb6,0x7b, 0xdc,0x7a, 0xf6,0x6b, 0xbe,0x5b, 0xe8,0xa7, 0xf9,0xc4, 0xe8,0xa6, 0xec,0x48, 0xec,0x4b, 0xf1,0xbe, 0xec,0x4c, 0xec,0x4e, 0xec,0x46, 0xee,0xf1, 0xc1,0xf0, 0xc2,0xf3, 0xc2,0xf5, 0xc2,0xf6, 0xf5,0x45, 0xa1,0xbc, 0xc9,0x62, 0xa9,0xcf, 0xa1,0xbc, 0xc9,0xfd, 0xc9,0xfa, 0xc9,0xfc, 0xf5,0xd3, 0xa8,0x4a, 0xa8,0x4e, 0xa8,0x5c, 0xa8,0x50, 0xa8,0x51, 0xcb,0x53, 0xa8,0x58, 0xa8,0x5a, 0xa8,0x59, 0xd9,0xec, 0xcc,0xf8, 0xcc,0xf4, 0xcc,0xf5, 0xf2,0x5d, 0xc3,0x79, 0xaa,0x74, 0xaa,0x72, 0xa1,0xbc, 0xaa,0x7e, 0xaa,0x7d, 0xef,0xf6, 0xcc,0xf0, 0xcc,0xf1, 0xaa,0x62, 0xaa,0x6c, 0xaa,0x7b, 0xae,0xf9, 0xac,0xa7, 0xac,0xa8, 0xac,0x7b, 0xaf,0x48, 0xd9,0xfe, 0xcf,0xa7, 0xcf,0x77, 0xcf,0x78, 0xac,0xad, 0xac,0xae, 0xe9,0xf8, 0xac,0xab, 0xac,0xac, 0xcf,0x7a, 0xc2,0x73, 0xe2,0x71, 0xbc,0xf1, 0xcf,0x76, 0xd2,0x50, 0xd2,0x4f, 0xd5,0xe9, 0xe6,0x5c, 0xd2,0x55, 0xae,0xfe, 0xaf,0x4b, 0xa1,0xbc, 0xd2,0x57, 0xd2,0x5a, 0xd2,0x46, 0xb2,0x5a, 0xb2,0x4e, 0xb2,0x58, 0xb2,0x53, 0xc2,0x70, 0xb2,0x67, 0xd5,0xed, 0xbf,0x49, 0xb2,0x68, 0xd5,0xf3, 0xb2,0x46, 0xc2,0x6e, 0xd5,0xe1, 0xd5,0xf1, 0xb2,0x52, 0xd9,0xf1, 0xb4,0xf3, 0xb5,0x42, 0xda,0x47, 0xde,0x59, 0xb5,0x47, 0xe2,0xa9, 0xda,0x4b, 0xb4,0xe6, 0xb4,0xe8, 0xb4,0xec, 0xb5,0x44, 0xf9,0xd0, 0xde,0x4c, 0xb7,0xc2, 0xf5,0xd4, 0xe2,0xa5, 0xef,0xef, 0xb7,0xc1, 0xb7,0xcc, 0xde,0x50, 0xa1,0xbc, 0xde,0x54, 0xe6,0x5f, 0xb7,0xcd, 0xde,0x58, 0xde,0x46, 0xb7,0xbc, 0xde,0x48, 0xe6,0x43, 0xf2,0x5e, 0xc3,0x74, 0xa1,0xbc, 0xba,0xa8, 0xe2,0xa3, 0xba,0xaa, 0xe2,0xa1, 0xc4,0x6b, 0xef,0xf5, 0xba,0xac, 0xe2,0x75, 0xba,0x78, 0xe6,0x41, 0xe6,0x40, 0xe6,0x42, 0xbc,0xe8, 0xe6,0x4c, 0xbc,0xe0, 0xbc,0xeb, 0xc3,0x75, 0xea,0x41, 0xbf,0x43, 0xbf,0x46, 0xbf,0x47, 0xbe,0xfc, 0xc0,0xe1, 0xc0,0xe4, 0xed,0x57, 0xc0,0xda, 0xc0,0xde, 0xc3,0x76, 0xf2,0x63, 0xc3,0x73, 0xf4,0x65, 0xf4,0x5c, 0xf8,0xaf, 0xc5,0xf4, 0xa1,0xbc, 0xc9,0x73, 0xcc,0x58, 0xcc,0x57, 0xab,0xc9, 0xae,0x66, 0xda,0xac, 0xc4,0xca, 0xba,0x53, 0xb9,0xed, 0xbc,0x64, 0xeb,0x72, 0xbe,0xc8, 0xee,0xbf, 0xee,0xaa, 0xa1,0xbc, 0xcd,0xce, 0xcd,0xd1, 0xad,0x7e, 0xd0,0xb5, 0xad,0xa3, 0xc2,0xe2, 0xad,0x7b, 0xb3,0x77, 0xad,0xa4, 0xb0,0x6d, 0xd3,0xef, 0xd7,0xe3, 0xc5,0xdd, 0xd7,0xe4, 0xb3,0x70, 0xb3,0x7c, 0xd7,0xe7, 0xb6,0x66, 0xb6,0x6a, 0xdc,0x4d, 0xdc,0x4f, 0xe0,0xa1, 0xb9,0x4e, 0xe0,0x7d, 0xb9,0x49, 0xbe,0x43, 0xbb,0xb8, 0xbb,0xbd, 0xbb,0xbf, 0xbe,0xe6, 0xbf,0xee, 0xc1,0xd8, 0xc1,0xdb, 0xc2,0xe4, 0xc2,0xe3, 0xc3,0xe5, 0xa1,0xbc, 0xb1,0x6b, 0xce,0xbd, 0xd8,0xf4, 0xc9,0x75, 0xab,0xa4, 0xae,0x6a, 0xd4,0xf3, 0xb4,0x47, 0xe1,0xa2, 0xc0,0xab, 0xc4,0xf3, 0xd1,0x79, 0xa9,0xb8, 0xab,0xda, 0xd7,0x58, 0xb4,0x5d, 0xf7,0xa7, 0xc9,0x4b, 0xa6,0x71, 0xa6,0x6d, 0xa7,0xb0, 0xbc,0x61, 0xb9,0xe1, 0xa7,0xad, 0xca,0xb5, 0xa9,0x6e, 0xd8,0xb5, 0xa7,0xac, 0xa7,0xb1, 0xa9,0x71, 0xcc,0x48, 0xa9,0x6f, 0xa9,0x6b, 0xa9,0x63, 0xd4,0xd5, 0xbc,0x63, 0xce,0x67, 0xf6,0xdc, 0xab,0xbb, 0xab,0xb9, 0xa1,0xbc, 0xae,0x5b, 0xae,0x5c, 0xb4,0x45, 0xbc,0x5f, 0xae,0x50, 0xae,0x58, 0xae,0x55, 0xb0,0xfe, 0xd4,0xd1, 0xb1,0x44, 0xd4,0xd0, 0xb1,0x40, 0xb1,0x41, 0xbc,0x60, 0xa1,0xbc, 0xb6,0xfe, 0xb4,0x44, 0xb4,0x40, 0xd8,0xb8, 0xb6,0xfc, 0xe1,0x72, 0xb7,0x42, 0xe9,0x54, 0xc0,0xa7, 0xdc,0xf7, 0xe1,0x75, 0xb9,0xe4, 0xe9,0x52, 0xb9,0xe2, 0xb9,0xdf, 0xb9,0xe3, 0xe1,0x6b, 0xbc,0x5e, 0xe9,0x51, 0xe9,0x58, 0xec,0xd0, 0xc0,0xa8, 0xc4,0x5c, 0xc9,0xd4, 0xa1,0xbc, 0xa7,0xb7, 0xcc,0x56, 0xb4,0x46, 0xa4,0x6d, 0xa4,0x6e, 0xcc,0x55, 0xe8,0xca, 0xbe,0x6f, 0xbe,0x74, 0xf5,0x5f, 0xc5,0xe6, 0xbe,0x71, 0xe8,0xce, 0xc5,0xbb, 0xf7,0x7e, 0xc0,0x63, 0xc6,0x7a, 0xf1,0xaf, 0xf1,0xb2, 0xf1,0xb6, 0xf6,0x7c, 0xf5,0x63, 0xc4,0x45, 0xf6,0x7d, 0xf5,0x61, 0xf5,0x62, 0xc5,0x59, 0xf6,0x7b, 0xf7,0x7c, 0xc6,0x6b, 0xf9,0xb3, 0xa1,0xbc, 0xac,0xfa, 0xac,0xf4, 0xac,0xf8, 0xd0,0x4b, 0xf5,0xe7, 0xaf,0xc6, 0xaf,0xc4, 0xd3,0x56, 0xd6,0xe6, 0xb2,0xd8, 0xb2,0xd9, 0xbf,0xa8, 0xb2,0xd1, 0xb2,0xd2, 0xd6,0xed, 0xa1,0xbc, 0xda,0xfb, 0xb5,0xbc, 0xdf,0x58, 0xdf,0x60, 0xdf,0x57, 0xba,0xf0, 0xba,0xf6, 0xe3,0x6e, 0xa1,0xbc, 0xe3,0x6c, 0xbd,0x78, 0xba,0xfe, 0xe3,0x71, 0xe3,0x65, 0xba,0xed, 0xba,0xfd, 0xbd,0x79, 0xe6,0xe7, 0xbd,0x7b, 0xbd,0x7a, 0xf0,0x72, 0xe6,0xeb, 0xe6,0xec, 0xe6,0xed, 0xea,0xd8, 0xe6,0xe8, 0xbf,0xa7, 0xbf,0xa6, 0xea,0xd0, 0xbf,0xa5, 0xed,0xd0, 0xbf,0x7e, 0xbf,0xa1, 0xc4,0x7d, 0xc1,0x65, 0xc1,0x67, 0xc1,0x5d, 0xc1,0x5b, 0xc1,0x62, 0xf5,0xe9, 0xc2,0xb7, 0xc2,0xb9, 0xc5,0xb7, 0xf4,0xad, 0xf2,0xb2, 0xf2,0xb4, 0xf9,0x40, 0xa1,0xbc, 0xbd,0x42, 0xa1,0xbc, 0xcd,0x72, 0xb0,0x6f, 0xca,0x45, 0xbf,0x59, 0xde,0xb3, 0xcd,0x6a, 0xaa,0xb3, 0xaa,0xb2, 0xcf,0xc8, 0xc4,0x6e, 0xac,0xbf, 0xac,0xc5, 0xac,0xc4, 0xa1,0xbc, 0xcf,0xc9, 0xd2,0xad, 0xd2,0xac, 0xb9,0x7a, 0xb2,0x78, 0xd2,0xb2, 0xd2,0xb0, 0xaf,0x5f, 0xc3,0xa2, 0xb7,0xe9, 0xe6,0xa3, 0xb5,0x58, 0xb7,0xeb, 0xb5,0x61, 0xb5,0x5b, 0xb5,0x62, 0xda,0x7c, 0xda,0x7a, 0xda,0x7b, 0xb5,0x60, 0xda,0xa1, 0xb7,0xe8, 0xb7,0xec, 0xde,0xb6, 0xb7,0xe5, 0xb7,0xea, 0xc0,0xf5, 0xba,0xc1, 0xbd,0x40, 0xbf,0x58, 0xc4,0xed, 0xbd,0x41, 0xe6,0xa6, 0xe6,0xa2, 0xbc,0xfd, 0xbf,0x5c, 0xc0,0xf6, 0xc0,0xf3, 0xed,0x69, 0xc2,0x7a, 0xc5,0xd0, 0xf4,0x6f, 0xf1,0xa4, 0xf3,0xa5, 0xc3,0xfc, 0xcb,0x42, 0xa8,0x40, 0xa7,0xfb, 0xcb,0x43, 0xe2,0x59, 0xf4,0x55, 0xaa,0x4a, 0xaa,0x57, 0xaa,0x48, 0xcc,0xd9, 0xa1,0xbc, 0xaa,0x53, 0xd9,0xb3, 0xbc,0xd7, 0xb1,0xfa, 0xaa,0x44, 0xaa,0x49, 0xaa,0x56, 0xcf,0x55, 0xc0,0xcd, 0xcf,0x43, 0xf4,0x53, 0xac,0x5e, 0xac,0x69, 0xf4,0x56, 0xac,0x6a, 0xcf,0x4a, 0xac,0x63, 0xcf,0x4c, 0xac,0x6c, 0xb1,0xf7, 0xcf,0x61, 0xac,0x65, 0xac,0x6b, 0xf2,0x52, 0xce,0xfb, 0xec,0xf7, 0xd1,0xdc, 0xd1,0xdd, 0xd9,0xb2, 0xbe,0xf8, 0xd1,0xe8, 0xb7,0xa9, 0xd1,0xe9, 0xe2,0x4e, 0xb1,0xf2, 0xd1,0xeb, 0xa1,0xbc, 0xbe,0xec, 0xae,0xec, 0xc0,0xcc, 0xae,0xe5, 0xf7,0xe1, 0xa1,0xbc, 0xd1,0xdb, 0xae,0xdd, 0xb1,0xeb, 0xd5,0xc0, 0xd5,0xbe, 0xd5,0xc1, 0xb1,0xea, 0xd5,0xc4, 0xf9,0xbb, 0xb4,0xd8, 0xd9,0xc8, 0xc3,0x70, 0xe5,0xde, 0xb4,0xcd, 0xf7,0xe2, 0xdd,0xde, 0xd9,0xca, 0xbc,0xcd, 0xdd,0xd4, 0xb4,0xd0, 0xd9,0xb9, 0xdd,0xce, 0xdd,0xd2, 0xb7,0xa3, 0xdd,0xd3, 0xb7,0xaf, 0xc6,0x56, 0xb7,0xaa, 0xa1,0xbc, 0xa1,0xbc, 0xdd,0xdf, 0xdd,0xe0, 0xba,0x6c, 0xc4,0x68, 0xc3,0x71, 0xe2,0x41, 0xf5,0xd1, 0xdd,0xc9, 0xb7,0xb0, 0xb7,0xad, 0xba,0x64, 0xe2,0x49, 0xba,0x66, 0xba,0x67, 0xba,0x6b, 0xe2,0x52, 0xe1,0xfc, 0xba,0x60, 0xe2,0x54, 0xc2,0x62, 0xba,0x5f, 0xf2,0x4c, 0xe2,0x4a, 0xe5,0xd3, 0xc0,0xce, 0xbc,0xd8, 0xe5,0xcc, 0xe5,0xe8, 0xf2,0x55, 0xe5,0xda, 0xbe,0xf1, 0xe9,0xc4, 0xc0,0xd2, 0xe9,0xd1, 0xe9,0xc8, 0xbe,0xf6, 0xec,0xfe, 0xc3,0x72, 0xbe,0xea, 0xe9,0xca, 0xbe,0xef, 0xf2,0x58, 0xed,0x44, 0xc0,0xd1, 0xec,0xf5, 0xc0,0xd0, 0xa1,0xbc, 0xb7,0xdf, 0xe6,0x76, 0xaa,0x5c, 0xcf,0x65, 0xbc,0xdc, 0xcf,0x66, 0xe2,0x66, 0xc0,0xd4, 0xd5,0xdc, 0xe9,0xe3, 0xdd,0xfb, 0xc2,0x6c, 0xe9,0xe2, 0xb0,0x62, 0xb3,0x6d, 0xa1,0xbc, 0xb6,0x61, 0xf8,0x47, 0xdc,0x40, 0xb6,0x63, 0xdc,0x48, 0xa1,0xbc, 0xf7,0x65, 0xdb,0xfe, 0xb8,0xfd, 0xb8,0xfe, 0xe0,0x79, 0xe0,0x78, 0xbb,0xb3, 0xbd,0xfb, 0xbd,0xfe, 0xbd,0xf9, 0xbd,0xfd, 0xbf,0xea, 0xf1,0x46, 0xc3,0xe1, 0xa1,0xbc, 0xcc,0xb1, 0xe1,0xd7, 0xb1,0xae, 0xb4,0x75, 0xb7,0x61, 0xb7,0x60, 0xdd,0x75, 0xdd,0x76, 0xe1,0xd6, 0xbb,0x4e, 0xbf,0x5e, 0xd2,0xbe, 0xde,0xc0, 0xed,0x72, 0xed,0x70, 0xf0,0x49, 0xa1,0xbc, 0xc9,0xee, 0xc9,0xed, 0xca,0xf8, 0xa9,0xfe, 0xbe,0xe8, 0xaa,0x58, 0xcc,0xca, 0xa9,0xfd, 0xa9,0xfb, 0xcd,0x52, 0xac,0x54, 0xce,0xf5, 0xce,0xf6, 0xac,0x52, 0xce,0xeb, 0xbc,0xca, 0xaf,0xcf, 0xd1,0xd4, 0xbe,0xe7, 0xae,0xd0, 0xae,0xcb, 0xb7,0x75, 0xd5,0xaa, 0xa1,0xbc, 0xb4,0xbe, 0xb7,0x79, 0xdd,0xc0, 0xc0,0xc7, 0xba,0x5c, 0xe9,0xb4, 0xef,0xdb, 0xc2,0x60, 0xc4,0x66, 0xc4,0xe4, 0xb6,0x4e, 0xdb,0xea, 0xdb,0xe8, 0xb6,0x4d, 0xf0,0xf4, 0xb8,0xed, 0xb8,0xf0, 0xf6,0x52, 0xbb,0xac, 0xe7,0xec, 0xe4,0x53, 0xa1,0xbc, 0xe7,0xee, 0xc1,0xcc, 0xdb,0xd1, 0xc1,0xbb, 0xe4,0x44, 0xf7,0x53, 0xbf,0xcc, 0xee,0x7a, 0xc2,0xd1, 0xf2,0xf3, 0xcf,0xbd, 0xa1,0xbc, 0xa6,0xc9, 0xa1,0xbc, 0xac,0xba, 0xd6,0x5c, 0xd6,0x5f, 0xb5,0x51, 0xda,0x6c, 0xde,0xa5, 0xa1,0xbc, 0xba,0xb9, 0xae,0xb2, 0xd5,0x66, 0xd9,0x54, 0xe1,0xee, 0xc0,0xbc, 0xac,0xfe, 0xa1,0xbc, 0xd9,0xe5, 0xb7,0xb7, 0xe5,0xf7, 0xde,0x40, 0xbe,0xfb, 0xf2,0x5b, 0xe9,0xe8, 0xf6,0xe7, 0xc9,0x7e, 0xc9,0xf7, 0xcb,0x49, 0xcb,0x4a, 0xcf,0x6c, 0xb4,0xe3, 0xae,0xf4, 0xd5,0xdf, 0xba,0x72, 0xa1,0xbc, 0xb1,0xd5, 0xa1,0xbc, 0xc3,0x7c, 0xb7,0xde, 0xbc,0xf8, 0xac,0xb8, 0xe7,0x7e, 0xa6,0x47, 0xa1,0xbc, 0xcb,0x78, 0xa8,0x77, 0xa1,0xbc, 0xcc,0xd2, 0xa1,0xbc, 0xaa,0xd0, 0xaa,0xd2, 0xcd,0xb0, 0xaa,0xd4, 0xa1,0xbc, 0xc4,0x67, 0xa1,0xbc, 0xa1,0xbc, 0xc4,0xa4, 0xad,0x4b, 0xd0,0x5b, 0xad,0x48, 0xd0,0x5f, 0xd0,0x67, 0xd0,0x65, 0xce,0xfa, 0xad,0x4f, 0xd7,0x48, 0xaf,0xd6, 0xaf,0xdb, 0xaf,0xda, 0xc1,0x7a, 0xa1,0xbc, 0xd3,0x6a, 0xaf,0xe2, 0xae,0xd3, 0xa1,0xbc, 0xb3,0x62, 0xdf,0xa2, 0xd7,0x4c, 0xd7,0x4b, 0xd7,0x45, 0xa1,0xbc, 0xa1,0xbc, 0xb5,0xcb, 0xb5,0xcc, 0xb5,0xcd, 0xa1,0xbc, 0xa1,0xbc, 0xb8,0x78, 0xdf,0x73, 0xdf,0x76, 0xa1,0xbc, 0xe3,0xa6, 0xa1,0xbc, 0xdf,0x7d, 0xdc,0xe6, 0xdc,0xf9, 0xbb,0x4a, 0xbb,0x4d, 0xc2,0xc1, 0xbc,0xf0, 0xe6,0xfd, 0xa1,0xbc, 0xed,0xea, 0xc2,0x61, 0xed,0xeb, 0xed,0xe8, 0xa1,0xbc, 0xea,0xe9, 0xc2,0x6a, 0xd5,0xd8, 0xd9,0xda, 0xdd,0xf7, 0xdd,0xf5, 0xbe,0xf9, 0xe4,0xcd, 0xbb,0xe3, 0xc1,0xfc, 0xc4,0x42, 0xf6,0x74, 0xa1,0xbc, 0xc9,0x5f, 0xdd,0x62, 0xc1,0xd4, 0xee,0x7d, 0xb4,0xb4, 0xf8,0x7e, 0xc4,0xe3, 0xa9,0xf3, 0xd1,0xcf, 0xd1,0xd1, 0xd1,0xd0, 0xb1,0xdc, 0xb1,0xdd, 0xd9,0x7e, 0xba,0x59, 0xb7,0xd5, 0xde,0x6d, 0xbf,0x4c, 0xe2,0xc4, 0xa1,0xbc, 0xa1,0xbc, 0xcf,0xae, 0xac,0xaf, 0xcf,0xb1, 0xea,0x4d, 0xaf,0x4c, 0xd6,0x51, 0xd6,0x55, 0xbf,0x54, 0xda,0x5a, 0xda,0x5d, 0xa1,0xbc, 0xb7,0xd4, 0xb7,0xdb, 0xa1,0xbc, 0xde,0x73, 0xa1,0xbc, 0xde,0x74, 0xa1,0xbc, 0xa1,0xbc, 0xe6,0x72, 0xe6,0x69, 0xbc,0xf7, 0xe6,0x66, 0xc0,0xee, 0xea,0x4f, 0xc0,0xe6, 0xef,0xfb, 0xf5,0xda, 0xc6,0x79, 0xa1,0xbc, 0xc2,0x76, 0xb7,0xd6, 0xbf,0x51, 0xa9,0xd1, 0xcc,0xb2, 0xce,0xd3, 0xb1,0xaf, 0xb4,0x76, 0xa1,0xbc, 0xaa,0xc1, 0xac,0xe6, 0xac,0xe7, 0xd7,0xb6, 0xd2,0xe9, 0xd2,0xea, 0xaf,0xae, 0xf2,0xa5, 0xaf,0xad, 0xaf,0xa8, 0xba,0xd5, 0xd6,0xbd, 0xb8,0x52, 0xc1,0x49, 0xe2,0xf9, 0xe6,0xcb, 0xc1,0x48, 0xc5,0xa1, 0xca,0xd7, 0xca,0xd8, 0xef,0xc8, 0xd1,0x7c, 0xd1,0x7d, 0xd1,0x7e, 0xd1,0xa1, 0xae,0x7e, 0xae,0xa1, 0xe1,0xc3, 0xb7,0x5e, 0xb7,0x5d, 0xbc,0x7c, 0xbe,0xcd, 0xe9,0x76, 0xc0,0xb7, 0xc2,0x56, 0xf9,0xba, 0xa1,0xbc, 0xa6,0xd6, 0xcc,0xee, 0xed,0x4f, 0xd9,0xe7, 0xc1,0x46, 0xcd,0x7a, 0xe2,0xee, 0xcf,0xf1, 0xda,0xcf, 0xa1,0xbc, 0xcf,0xeb, 0xac,0x48, 0xaf,0xa2, 0xa1,0xbc, 0xaf,0x7c, 0xa1,0xbc, 0xc4,0x72, 0xf5,0xe2, 0xaf,0xa4, 0xa1,0xbc, 0xaf,0xa1, 0xd2,0xda, 0xd2,0xd9, 0xd2,0xe2, 0xb2,0xba, 0xda,0xc9, 0xda,0xc6, 0xed,0xa6, 0xd6,0xb9, 0xd6,0xbb, 0xa1,0xbc, 0xd6,0xb8, 0xda,0xcb, 0xbf,0x6c, 0xb8,0x50, 0xde,0xe5, 0xde,0xe4, 0xea,0xa7, 0xde,0xec, 0xba,0xd4, 0xe2,0xeb, 0xa1,0xbc, 0xe2,0xf3, 0xe6,0xc6, 0xa1,0xbc, 0xe6,0xca, 0xbf,0x6b, 0xed,0xaa, 0xed,0xab, 0xc1,0x45, 0xf0,0x58, 0xf4,0x7d, 0xf2,0xa4, 0xf2,0xa1, 0xf7,0xce, 0xdc,0xb0, 0xef,0xb0, 0xf3,0xf5, 0xcd,0x77, 0xcf,0xe2, 0xa1,0xbc, 0xac,0xda, 0xac,0xe0, 0xcf,0xe0, 0xd2,0xd6, 0xd2,0xd7, 0xd2,0xd5, 0xd6,0xaa, 0xd6,0xb0, 0xd6,0xb2, 0xb2,0xb6, 0xb7,0xfd, 0xc2,0xa5, 0xda,0xbb, 0xa1,0xbc, 0xde,0xdd, 0xb8,0x45, 0xb8,0x46, 0xb8,0x44, 0xba,0xcd, 0xe6,0xbc, 0xba,0xcc, 0xe2,0xe7, 0xbd,0x4f, 0xbd,0x50, 0xbf,0x67, 0xbf,0x65, 0xc0,0xfd, 0xed,0x7a, 0xc2,0xa2, 0xcb,0x6d, 0xcd,0x71, 0xac,0xca, 0xac,0xcb, 0xcf,0xdb, 0xd2,0xc1, 0xda,0xae, 0xde,0xc4, 0xa1,0xbc, 0xd0,0x4d, 0xd3,0x5c, 0xaf,0xcb, 0xdb,0xe0, 0xdf,0x6a, 0xf2,0xbc, 0xa1,0xbc, 0xbf,0xa9, 0xc5,0xf9, 0xed,0xe3, 0xaf,0x72, 0xbf,0x64, 0xf7,0xf8, 0xa1,0xbc, 0xd0,0xc1, 0xd0,0xc0, 0xb0,0x7a, 0xb0,0x78, 0xd4,0x42, 0xd8,0x41, 0xb3,0xa9, 0xd7,0xfc, 0xeb,0xea, 0xb3,0xa6, 0xd7,0xfd, 0xa1,0xbc, 0xdc,0x67, 0xb9,0x64, 0xb6,0x7a, 0xb6,0x78, 0xdc,0x62, 0xdc,0x70, 0xdc,0x6f, 0xdc,0x64, 0xdc,0x6a, 0xe0,0xb1, 0xe0,0xb2, 0xb9,0x57, 0xe0,0xb3, 0xa1,0xbc, 0xb9,0x5a, 0xb9,0x59, 0xe0,0xb5, 0xe0,0xbb, 0xe0,0xba, 0xb9,0x66, 0xc5,0xe0, 0xe0,0xb0, 0xb9,0x62, 0xe0,0xae, 0xb9,0x63, 0xe0,0xb7, 0xb9,0x65, 0xc5,0x4d, 0xbe,0x52, 0xe4,0x7b, 0xe4,0x7a, 0xe4,0x7d, 0xe4,0xa8, 0xe8,0x68, 0xc4,0xc2, 0xa1,0xbc, 0xc5,0x4c, 0xa1,0xbc, 0xe4,0xa1, 0xf1,0x5a, 0xbb,0xcb, 0xe8,0x6f, 0xe4,0xb7, 0xf4,0xf3, 0xbb,0xcd, 0xe4,0xa6, 0xf3,0x6a, 0xe4,0xa2, 0xbf,0xfe, 0xe4,0xa3, 0xe0,0xb6, 0xf4,0xe7, 0xbb,0xcf, 0xe4,0xa7, 0xf4,0xf9, 0xeb,0xe4, 0xe8,0x69, 0xc3,0xf4, 0xa1,0xbc, 0xbe,0x59, 0xe8,0x70, 0xe8,0x72, 0xbe,0x56, 0xe8,0x6e, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xe8,0x63, 0xe8,0x6a, 0xe8,0x76, 0xeb,0xe8, 0xeb,0xe1, 0xa1,0xbc, 0xeb,0xe6, 0xa1,0xbc, 0xeb,0xe9, 0xc0,0x43, 0xc0,0x44, 0xa1,0xbc, 0xa1,0xbc, 0xeb,0xdf, 0xeb,0xe0, 0xc0,0x45, 0xc1,0xe6, 0xee,0xd2, 0xee,0xd6, 0xc1,0xee, 0xee,0xd0, 0xf1,0x5c, 0xc1,0xec, 0xa1,0xbc, 0xc3,0xf3, 0xc3,0xf2, 0xf4,0xf0, 0xa1,0xbc, 0xf3,0x68, 0xc2,0xf0, 0xc5,0x4f, 0xa1,0xbc, 0xf1,0x5e, 0xc2,0xef, 0xf1,0x53, 0xf7,0x67, 0xc3,0xf0, 0xc3,0xed, 0xc3,0xee, 0xc3,0xf1, 0xf3,0x60, 0xc3,0xeb, 0xf3,0x61, 0xc3,0xe9, 0xf4,0xec, 0xa1,0xbc, 0xf4,0xf5, 0xa1,0xbc, 0xf4,0xe8, 0xf9,0x53, 0xf4,0xea, 0xa1,0xbc, 0xf3,0x66, 0xf4,0xf1, 0xf7,0x69, 0xc5,0x4e, 0xf6,0x5e, 0xa1,0xbc, 0xc5,0xdf, 0xc1,0xe9, 0xcf,0xe8, 0xda,0xc4, 0xb9,0x6e, 0xcf,0xf9, 0xd2,0xf1, 0xaf,0xb0, 0xd2,0xed, 0xa1,0xbc, 0xb4,0x52, 0xda,0xd8, 0xda,0xd6, 0xb8,0x5c, 0xb8,0x5a, 0xe6,0xd2, 0xbd,0x5e, 0xc2,0xa8, 0xc2,0x48, 0xc3,0x4c, 0xf6,0xf8, 0xac,0xd4, 0xb2,0xae, 0xb5,0x71, 0xde,0xd5, 0xed,0x78, 0xd2,0xbc, 0xb2,0x7d, 0xa8,0x69, 0xb9,0xa7, 0xbb,0xf0, 0xe8,0xe9, 0xbe,0x7d, 0xc0,0x6c, 0xf3,0xf0, 0xf9,0xb7, 0xec,0xa9, 0xec,0xae, 0xc5,0xee, 0xef,0x7b, 0xf7,0xc1, 0xef,0x7e, 0xef,0xa2, 0xc6,0x7d, 0xf1,0xd0, 0xf9,0xcf, 0xc3,0x5b, 0xf1,0xd9, 0xf8,0x71, 0xf1,0xcf, 0xc4,0x4d, 0xa1,0xbc, 0xc4,0x4f, 0xf3,0xed, 0xc4,0x4c, 0xf5,0x7c, 0xf5,0xa7, 0xa1,0xbc, 0xa1,0xbc, 0xf5,0xad, 0xc5,0x63, 0xf6,0xb4, 0xc6,0x78, 0xc5,0xc2, 0xf7,0xba, 0xf8,0x63, 0xf8,0x6b, 0xf8,0x6c, 0xf8,0x66, 0xa1,0xbc, 0xc6,0x4f, 0xc6,0x7c, 0xa1,0xbc, 0xcb,0x6f, 0xf0,0x4b, 0xc2,0x7e, 0xaa,0xb7, 0xa1,0xbc, 0xac,0xd0, 0xaf,0x69, 0xde,0xcb, 0xaf,0x6e, 0xd2,0xc6, 0xaf,0x70, 0xd2,0xc3, 0xa1,0xbc, 0xaf,0x6d, 0xa1,0xbc, 0xb2,0xad, 0xb5,0x69, 0xc0,0xf7, 0xda,0xb2, 0xda,0xb5, 0xed,0x77, 0xda,0xaf, 0xde,0xc9, 0xb7,0xf3, 0xde,0xcc, 0xb7,0xf5, 0xde,0xcf, 0xb7,0xef, 0xed,0x76, 0xe2,0xdc, 0xe6,0xb0, 0xe2,0xdf, 0xe6,0xaf, 0xa1,0xbc, 0xe2,0xdd, 0xe6,0xb1, 0xe6,0xb7, 0xea,0x70, 0xbd,0x49, 0xbd,0x43, 0xa1,0xbc, 0xea,0x6c, 0xea,0x73, 0xf6,0xf4, 0xea,0x71, 0xed,0x74, 0xc5,0x7d, 0xea,0x6f, 0xa1,0xbc, 0xc4,0xee, 0xa1,0xbc, 0xf0,0x4a, 0xc2,0x7d, 0xc5,0xf6, 0xa1,0xbc, 0xd6,0xf6, 0xda,0xdc, 0xcd,0xa5, 0xaa,0xc6, 0xcf,0xfe, 0xd2,0xf6, 0xaf,0xb7, 0xb2,0xc0, 0xc4,0x75, 0xb8,0x5e, 0xe3,0x4c, 0xe3,0x4a, 0xea,0xb2, 0xe6,0xd5, 0xa1,0xbc, 0xd0,0xae, 0xd3,0xd4, 0xb0,0x4d, 0xd3,0xd7, 0xb0,0x4c, 0xd7,0xb5, 0xc3,0xcb, 0xdb,0xcb, 0xdb,0xca, 0xdb,0xcf, 0xee,0x72, 0xdf,0xf4, 0xf2,0xf0, 0xf0,0xd9, 0xe3,0xf7, 0xbb,0x75, 0xe3,0xfc, 0xbb,0x74, 0xe3,0xfa, 0xe4,0x40, 0xbf,0xca, 0xe7,0xc8, 0xbd,0xc8, 0xc1,0xb9, 0xbd,0xca, 0xc4,0xb0, 0xbf,0xc9, 0xc1,0xb7, 0xee,0x75, 0xf4,0xcb, 0xf9,0x4b, 0xa5,0xd4, 0xad,0x45, 0xe2,0xe1, 0xb5,0x72, 0xac,0xe1, 0xa6,0xd4, 0xd0,0x54, 0xd3,0x66, 0xb2,0xe0, 0xa1,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xbd,0xa2, 0xed,0xe7, 0xea,0xe6, 0xbf,0xae, 0xa1,0xbc, 0xb5,0xc0, 0xcd,0xaa, 0xd7,0x43, 0xb2,0xe2, 0xf4,0xb2, 0xb5,0xc1, 0xf0,0x7c, 0xc1,0x6d, 0xb5,0xf7, 0xdc,0xac, 0xe0,0xe0, 0xe0,0xde, 0xbe,0x65, 0xbe,0x67, 0xbf,0x6f, 0xe8,0xb8, 0xc0,0x58, 0xc3,0x45, 0xc3,0x46, 0xf9,0xae, 0xf5,0x4f, 0xf3,0xa8, 0xc5,0x56, 0xa1,0xbc, 0xc6,0x49, 0xca,0x4f, 0xb0,0x40, 0xcd,0xc8, 0xf0,0xca, 0xf2,0xe3, 0xad,0x6b, 0xd0,0xa8, 0xad,0x6a, 0xd3,0xba, 0xd3,0xbc, 0xd3,0xc2, 0xb8,0xc3, 0xc4,0xae, 0xd3,0xc8, 0xb0,0x47, 0xb0,0x42, 0xb0,0x43, 0xb0,0x45, 0xb3,0x46, 0xb3,0x47, 0xb3,0x48, 0xc4,0xf7, 0xd7,0xa5, 0xd7,0xa4, 0xb3,0x4b, 0xb3,0x4c, 0xb3,0x4d, 0xf2,0xde, 0xd7,0xab, 0xdb,0xbc, 0xdf,0xe6, 0xc2,0xcc, 0xb5,0xed, 0xeb,0x6b, 0xb5,0xf1, 0xb8,0xbb, 0xb5,0xf2, 0xf4,0xc5, 0xb5,0xeb, 0xdb,0xb1, 0xdb,0xbf, 0xb8,0xc2, 0xb8,0xbd, 0xdf,0xea, 0xb8,0xbc, 0xb8,0xc4, 0xdf,0xef, 0xdf,0xec, 0xe3,0xd6, 0xbb,0x66, 0xe3,0xdb, 0xbb,0x68, 0xe3,0xda, 0xe3,0xf2, 0xe3,0xe2, 0xc1,0xb4, 0xbb,0x69, 0xe3,0xeb, 0xbb,0x6d, 0xbb,0x6c, 0xbb,0x64, 0xbd,0xb8, 0xbb,0x67, 0xa1,0xbc, 0xf4,0xc6, 0xe7,0xbc, 0xbd,0xbb, 0xa1,0xbc, 0xbd,0xc1, 0xe7,0xb8, 0xa1,0xbc, 0xbd,0xc2, 0xe7,0xa2, 0xc1,0xb2, 0xe7,0xa3, 0xbd,0xbf, 0xe7,0xba, 0xeb,0x5e, 0xee,0x67, 0xa1,0xbc, 0xc1,0xaf, 0xc1,0xb0, 0xeb,0x60, 0xeb,0x67, 0xee,0x5a, 0xeb,0x5d, 0xbf,0xc0, 0xc1,0xb1, 0xf0,0xc1, 0xee,0x5d, 0xee,0x5f, 0xc1,0xae, 0xc1,0xb5, 0xf0,0xc7, 0xee,0x6e, 0xc1,0xad, 0xc1,0xac, 0xee,0x69, 0xf0,0xbe, 0xf0,0xc0, 0xc2,0xcf, 0xa1,0xbc, 0xf4,0xc9, 0xf4,0xc8, 0xc3,0xca, 0xf2,0xe7, 0xf6,0x42, 0xc4,0xf9, 0xc5,0xfb, 0xf9,0x6e, 0xa6,0xce, 0xc4,0xa2, 0xc1,0x6a, 0xed,0xe1, 0xaf,0xe7, 0xaa,0xc7, 0xac,0xf2, 0xd3,0x44, 0xbf,0x77, 0xd3,0x40, 0xb8,0x63, 0xd3,0x45, 0xd6,0xd7, 0xd3,0x43, 0xd6,0xcc, 0xd6,0xdb, 0xd6,0xd4, 0xb2,0xc6, 0xb2,0xc8, 0xd6,0xd6, 0xb2,0xc1, 0xd6,0xce, 0xd6,0xd1, 0xd6,0xd2, 0xf8,0xfb, 0xb2,0xc7, 0xda,0xe5, 0xed,0xc3, 0xda,0xe6, 0xba,0xe1, 0xda,0xe2, 0xba,0xe5, 0xb8,0x61, 0xb8,0x62, 0xa1,0xbc, 0xa1,0xbc, 0xdf,0x4b, 0xdf,0x4e, 0xe3,0x52, 0xed,0xbd, 0xe6,0xd7, 0xba,0xe6, 0xe6,0xd9, 0xba,0xe3, 0xf6,0xfb, 0xe3,0x58, 0xc2,0xb0, 0xe3,0x4f, 0xa1,0xbc, 0xc2,0xad, 0xbd,0x65, 0xc2,0xb1, 0xbd,0x68, 0xbd,0x6a, 0xea,0xba, 0xea,0xbd, 0xea,0xbc, 0xbf,0x7b, 0xea,0xc1, 0xc1,0x50, 0xc1,0x4e, 0xa1,0xbc, 0xed,0xbb, 0xf8,0xb8, 0xed,0xc2, 0xf0,0x65, 0xc2,0xaf, 0xf0,0x68, 0xc3,0xb0, 0xc5,0xa3, 0xc3,0xb3, 0xaa,0xd8, 0xd3,0x70, 0xb2,0xea, 0xbc,0xf3, 0xaf,0xe5, 0xd3,0xd0, 0xd0,0x69, 0xad,0x51, 0xf2,0xc3, 0xa1,0xbc, 0xd3,0x71, 0xaf,0xea, 0xaf,0xe9, 0xd7,0x53, 0xf7,0x46, 0xd7,0x54, 0xd7,0x56, 0xa1,0xbc, 0xdf,0xa5, 0xdf,0xa4, 0xbb,0x53, 0xe7,0x46, 0xed,0xf1, 0xf0,0xa2, 0xf4,0xb6, 0xd3,0xda, 0xb8,0xcd, 0xb3,0x50, 0xb8,0xca, 0xb8,0xc6, 0xc3,0xce, 0xd6,0xf4, 0xdf,0x6d, 0xdf,0x6e, 0xbd,0x7e, 0xe6,0xf3, 0xbf,0xaa, 0xaa,0xc4, 0xae,0xc5, 0xd3,0x4a, 0xf5,0xe6, 0xf8,0xfd, 0xda,0xe8, 0xda,0xe7, 0xdf,0x54, 0xe3,0x60, 0xba,0xea, 0xc1,0x58, 0xa1,0xbc, 0xe6,0xe1, 0xa1,0xbc, 0xe6,0xe0, 0xe6,0xdf, 0xea,0xc9, 0xed,0xcf, 0xa6,0xe1, 0xba,0x5b, 0xac,0xfd, 0xb2,0xde, 0xb5,0xbf, 0xe3,0x7d, 0xbb,0x42, 0xe6,0xf9, 0xbd,0xa1, 0xbf,0xad, 0xc1,0x6b, 0xa6,0xcd, 0xed,0xde, 0xe3,0x75, 0xe3,0x76, 0xed,0xd9, 0xf9,0x41, 0xbe,0xa2, 0xc4,0x54, 0xad,0x76, 0xdb,0xed, 0xe0,0x64, 0xe0,0x5e, 0xf9,0x6f, 0xb3,0x69, 0xbd,0xea, 0xd3,0xde, 0xb3,0x61, 0xad,0xaa, 0xd3,0xfe, 0xd4,0x40, 0xd4,0x41, 0xdc,0x5e, 0xdc,0x60, 0xdc,0x5d, 0xa1,0xbc, 0xb9,0x55, 0xe0,0xad, 0xc6,0x6f, 0xf9,0x71, 0xe4,0x73, 0xbb,0xc6, 0xe4,0x74, 0xa1,0xbc, 0xe8,0x5b, 0xeb,0xd9, 0xeb,0xdb, 0xeb,0xda, 0xee,0xc6, 0xc1,0xde, 0xf1,0x52, 0xf3,0x5f, 0xc3,0xe7, 0xf1,0x51, 0xf4,0xe4, 0xc4,0xbf, 0xc5,0x48, 0xa8,0xa8, 0xf6,0xc9, 0xc4,0xbb, 0xe0,0x72, 0xe4,0x60, 0xc2,0xd9, 0xf1,0x44, 0xd3,0xe5, 0xd7,0xd9, 0xd7,0xd6, 0xb3,0x6c, 0xee,0xbe, 0xdb,0xf4, 0xdb,0xfa, 0xb6,0x5c, 0xf7,0x60, 0xb6,0x59, 0xdb,0xf6, 0xb6,0x5f, 0xb6,0x60, 0xe0,0x69, 0xc3,0xdf, 0xc2,0xde, 0xe0,0x6e, 0xf7,0x5f, 0xc5,0x45, 0xb8,0xf8, 0xe4,0x57, 0xe4,0x5b, 0xe8,0x40, 0xbd,0xef, 0xbd,0xf3, 0xc5,0xae, 0xe7,0xf7, 0xe7,0xf4, 0xc5,0xad, 0xa1,0xbc, 0xeb,0xc0, 0xbf,0xe5, 0xbf,0xe6, 0xeb,0xc4, 0xbf,0xe2, 0xc1,0xce, 0xeb,0xc5, 0xbf,0xe4, 0xc6,0x5c, 0xc2,0xda, 0xc1,0xd1, 0xf7,0x5d, 0xc3,0xdd, 0xc3,0xda, 0xf3,0x53, 0xc3,0xe0, 0xc4,0xbd, 0xc6,0x6e, 0xf7,0x5e, 0xf7,0x61, 0xf9,0x70, 0xf8,0xc3, 0xcb,0xa4, 0xb6,0x49, 0xb8,0xe7, 0xe0,0x5a, 0xf0,0xf1, 0xee,0xb7, 0xb1,0xd8, 0xd7,0xc6, 0xc2,0xd2, 0xdb,0xd4, 0xe0,0x43, 0xdf,0xfd, 0xe4,0x48, 0xf2,0xf5, 0xb8,0xe4, 0xf0,0xe7, 0xe8,0xb0, 0xb3,0xb8, 0xc6,0x45, 0xb6,0xb2, 0xbe,0x5e, 0xc5,0xb4, 0xe8,0xae, 0xc0,0x50, 0xc0,0x4b, 0xc3,0xf9, 0xc6,0x47, 0xc4,0xc5, 0xc5,0xb5, 0xef,0xb5, 0xc4,0xd4, 0xf5,0xbe, 0xf5,0xbb, 0xc5,0x68, 0xc5,0x69, 0xc5,0xc5, 0xc5,0xc6, 0xc6,0x53, 0xe0,0xef, 0xef,0xb1, 0xf9,0x65, 0xab,0x41, 0xd4,0x47, 0xb9,0x6d, 0xe0,0xd5, 0xbb,0xdc, 0xc2,0xa3, 0xf8,0x41, 0xe4,0xa9, 0xc6,0x71, 0xe8,0x74, 0xc3,0xf5, 0xee,0xde, 0xf3,0x6c, 0xee,0xdc, 0xa1,0xbc, 0xf8,0xca, 0xbe,0x7b, 0xe8,0xdb, 0xf8,0x5b, 0xa1,0xbc, 0xa1,0xbc, 0xc6,0x74, 0xbf,0x71, 0xec,0x7b, 0xc6,0x4d, 0xec,0x7c, 0xc2,0x44, 0xef,0x6a, 0xc2,0x43, 0xef,0x6c, 0xf9,0x5c, 0xc2,0x42, 0xf3,0xd0, 0xf8,0x58, 0xf1,0xc7, 0xf9,0xce, 0xc5,0xbf, 0xf7,0xae, 0xf6,0xad, 0xf7,0xb2, 0xc3,0x58, 0xc3,0x54, 0xf1,0xc3, 0xc3,0x56, 0xc4,0x4a, 0xf3,0xc7, 0xf3,0xc8, 0xf3,0xd6, 0xf3,0xcb, 0xc4,0x49, 0xa1,0xbc, 0xf3,0xcd, 0xf3,0xce, 0xc4,0x4b, 0xa1,0xbc, 0xf3,0xcf, 0xa1,0xbc, 0xf5,0x6b, 0xc6,0x73, 0xc4,0xcf, 0xf5,0x6e, 0xf5,0x76, 0xa1,0xbc, 0xa1,0xbc, 0xf7,0xb4, 0xc5,0x5f, 0xf6,0xae, 0xc5,0x60, 0xf6,0xaf, 0xf7,0xaf, 0xc5,0xc0, 0xf7,0xab, 0xc5,0xc1, 0xa1,0xbc, 0xa1,0xbc, 0xc5,0xed, 0xc5,0xeb, 0xf8,0x57, 0xf8,0xd7, 0xbb,0xde, 0xbb,0xdf, 0xc5,0xb6, 0xa1,0xbc, 0xec,0x56, 0xc6,0x69, 0xf1,0x7c, 0xc2,0xfd, 0xa1,0xbc, 0xa1,0xbc, 0xe4,0xda, 0xbb,0xeb, 0xbe,0x75, 0xf6,0xbc, 0xa1,0xbc, 0xa1,0xbc, 0xc0,0x66, 0xc3,0x4e, 0xf1,0xb9, 0xc5,0x5c, 0xf3,0xc1, 0xc6,0x62, 0xf8,0xd4, 0xc5,0xea, 0xbe,0x79, 0xe8,0xd9, 0xc6,0x4c, 0xc3,0x52, 0xef,0x69, 0xc3,0x53, 0xc5,0x5e, 0xc5,0x57, 0xc5,0xe4, 0xc3,0x4b, 0xc5,0xb9, 0xf7,0x76, 0xd4,0x49, 0xb9,0xa6, 0xbb,0xec, 0xbe,0x77, 0xe8,0xd4, 0xc0,0x67, 0xc0,0x68, 0xec,0x70, 0xf1,0xbb, 0xa1,0xbc, 0xc6,0x4b, 0xf8,0x55, 0xc6,0x63, 0xbb,0xf2, 0xbe,0xa3, 0xed,0xdd, 0xb9,0xa8, 0xec,0xb1, 0xec,0xaf, 0xc2,0x47, 0xc4,0x51, 0xc3,0xef, 0xc5,0x65, 0xc5,0xef, 0xc2,0x4c, 0xc2,0x4a, 0xc2,0x4b, 0xc3,0x5c, 0xf1,0xe0, 0xa1,0xbc, 0xc6,0x75, 0xf5,0xb6, 0xf5,0xb4, 0xf8,0x76, 0xc5,0x66, 0xef,0xb4, 0xc3,0x5e, 0xc4,0xd3, 0xc5,0xc4, 0xf8,0x7b, 0xec,0xb8, 0xc2,0x4d, 0xa1,0xbc, }; unsigned char Convert::BtoG[] = { 0xa1,0xa1, 0xa3,0xac, 0xa1,0xa2, 0xa1,0xa3, 0xa3,0xae, 0xa3,0xae, 0xa3,0xbb, 0xa3,0xba, 0xa3,0xbf, 0xa3,0xa1, 0xa1,0xc3, 0xa1,0xad, 0xa1,0xa7, 0xa3,0xac, 0xa1,0xa2, 0xa1,0xa4, 0xa1,0xa4, 0xa3,0xbb, 0xa3,0xba, 0xa3,0xbf, 0xa3,0xa1, 0xa3,0xfc, 0xa1,0xf5, 0xa3,0xfc, 0xa1,0xf5, 0xa3,0xfc, 0xa3,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa3,0xa8, 0xa3,0xa9, 0xa3,0xa8, 0xa3,0xa9, 0xa3,0xfb, 0xa3,0xfd, 0xa3,0xfb, 0xa3,0xfd, 0xa1,0xb2, 0xa1,0xb3, 0xa1,0xb2, 0xa1,0xb3, 0xa1,0xbe, 0xa1,0xbf, 0xa1,0xbe, 0xa1,0xbf, 0xa1,0xb6, 0xa1,0xb7, 0xa1,0xb6, 0xa1,0xb7, 0xa1,0xb4, 0xa1,0xb5, 0xa3,0xde, 0xa1,0xb5, 0xa1,0xb8, 0xa1,0xb9, 0xa1,0xb8, 0xa1,0xb9, 0xa1,0xba, 0xa1,0xbb, 0xa1,0xba, 0xa1,0xbb, 0xa3,0xa8, 0xa3,0xa9, 0xa3,0xfb, 0xa3,0xfd, 0xa3,0xdb, 0xa3,0xdd, 0xa1,0xae, 0xa1,0xaf, 0xa1,0xb0, 0xa1,0xb1, 0xa3,0xa2, 0xa1,0xe5, 0xa3,0xe0, 0xa1,0xe4, 0xa3,0xa3, 0xa3,0xa6, 0xa3,0xaa, 0xa1,0xf9, 0xa1,0xec, 0xa1,0xa8, 0xa1,0xf0, 0xa1,0xf1, 0xa1,0xf7, 0xa1,0xf8, 0xa1,0xf2, 0xa1,0xee, 0xa1,0xef, 0xa1,0xf3, 0xa1,0xf4, 0xa1,0xf5, 0xa1,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xa5, 0xa1,0xf5, 0xa3,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa3,0xa3, 0xa3,0xa6, 0xa3,0xaa, 0xa3,0xab, 0xa3,0xad, 0xa1,0xc1, 0xa1,0xc2, 0xa1,0xc0, 0xa1,0xcc, 0xa3,0xbc, 0xa3,0xbe, 0xa3,0xbd, 0xa1,0xdc, 0xa1,0xdd, 0xa1,0xd9, 0xa1,0xde, 0xa1,0xd6, 0xa1,0xd4, 0xa3,0xab, 0xa3,0xad, 0xa3,0xbc, 0xa3,0xbe, 0xa3,0xbd, 0xa1,0xab, 0xa1,0xc9, 0xa1,0xc8, 0xa1,0xf5, 0xa1,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xd2, 0xa1,0xd3, 0xa1,0xdf, 0xa1,0xe0, 0xa1,0xe2, 0xa1,0xe1, 0xa1,0xf5, 0xa1,0xd1, 0xa1,0xfc, 0xa1,0xfd, 0xa1,0xfb, 0xa1,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xac, 0xa1,0xf5, 0xa3,0xaf, 0xa3,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xe9, 0xa1,0xea, 0xa3,0xa5, 0xa3,0xc0, 0xa1,0xe6, 0xa1,0xf5, 0xa1,0xe7, 0xa3,0xa5, 0xa3,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa9,0xe0, 0xa9,0xd8, 0xa9,0xd0, 0xa9,0xc8, 0xa9,0xc0, 0xa1,0xf5, 0xa1,0xaa, 0xa9,0xa6, 0xa1,0xf5, 0xa9,0xb0, 0xa9,0xb4, 0xa9,0xb8, 0xa9,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa3,0xb0, 0xa3,0xb1, 0xa3,0xb2, 0xa3,0xb3, 0xa3,0xb4, 0xa3,0xb5, 0xa3,0xb6, 0xa3,0xb7, 0xa3,0xb8, 0xa3,0xb9, 0xa2,0xf1, 0xa2,0xf2, 0xa2,0xf3, 0xa2,0xf4, 0xa2,0xf5, 0xa2,0xf6, 0xa2,0xf7, 0xa2,0xf8, 0xa2,0xf9, 0xa2,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa3,0xc1, 0xa3,0xc2, 0xa3,0xc3, 0xa3,0xc4, 0xa3,0xc5, 0xa3,0xc6, 0xa3,0xc7, 0xa3,0xc8, 0xa3,0xc9, 0xa3,0xca, 0xa3,0xcb, 0xa3,0xcc, 0xa3,0xcd, 0xa3,0xce, 0xa3,0xcf, 0xa3,0xd0, 0xa3,0xd1, 0xa3,0xd2, 0xa3,0xd3, 0xa3,0xd4, 0xa3,0xd5, 0xa3,0xd6, 0xa3,0xd7, 0xa3,0xd8, 0xa3,0xd9, 0xa3,0xda, 0xa3,0xe1, 0xa3,0xe2, 0xa3,0xe3, 0xa3,0xe4, 0xa3,0xe5, 0xa3,0xe6, 0xa3,0xe7, 0xa3,0xe8, 0xa3,0xe9, 0xa3,0xea, 0xa3,0xeb, 0xa3,0xec, 0xa3,0xed, 0xa3,0xee, 0xa3,0xef, 0xa3,0xf0, 0xa3,0xf1, 0xa3,0xf2, 0xa3,0xf3, 0xa3,0xf4, 0xa3,0xf5, 0xa3,0xf6, 0xa3,0xf7, 0xa3,0xf8, 0xa3,0xf9, 0xa3,0xfa, 0xa6,0xa1, 0xa6,0xa2, 0xa6,0xa3, 0xa6,0xa4, 0xa6,0xa5, 0xa6,0xa6, 0xa6,0xa7, 0xa6,0xa8, 0xa6,0xa9, 0xa6,0xaa, 0xa1,0xc4, 0xa6,0xac, 0xa6,0xad, 0xa6,0xae, 0xa6,0xaf, 0xa1,0xc7, 0xa6,0xb1, 0xa1,0xc6, 0xa6,0xb3, 0xa6,0xb4, 0xa6,0xb5, 0xa6,0xb6, 0xa6,0xb7, 0xa6,0xb8, 0xa6,0xc1, 0xa6,0xc2, 0xa6,0xc3, 0xa6,0xc4, 0xa6,0xc5, 0xa6,0xc6, 0xa6,0xc7, 0xa6,0xc8, 0xa6,0xc9, 0xa6,0xca, 0xa6,0xcb, 0xa6,0xcc, 0xa6,0xcd, 0xa6,0xce, 0xa6,0xcf, 0xa6,0xd0, 0xa6,0xd1, 0xa6,0xd2, 0xa6,0xd3, 0xa6,0xd4, 0xa6,0xd5, 0xa6,0xd6, 0xa6,0xd7, 0xa6,0xd8, 0xa8,0xc5, 0xa8,0xc6, 0xa8,0xc7, 0xa8,0xc8, 0xa8,0xc9, 0xa8,0xca, 0xa8,0xcb, 0xa8,0xcc, 0xa8,0xcd, 0xa8,0xce, 0xa8,0xcf, 0xa8,0xd0, 0xa8,0xd1, 0xa8,0xd2, 0xa8,0xd3, 0xa8,0xd4, 0xa8,0xd5, 0xa8,0xd6, 0xa8,0xd7, 0xa8,0xd8, 0xa8,0xd9, 0xa8,0xda, 0xa8,0xdb, 0xa8,0xdc, 0xa8,0xdd, 0xa8,0xde, 0xa8,0xdf, 0xa8,0xe0, 0xa8,0xe1, 0xa8,0xe2, 0xa8,0xe3, 0xa8,0xe4, 0xa8,0xe5, 0xa8,0xe6, 0xa8,0xe7, 0xa8,0xe8, 0xa8,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd2,0xbb, 0xd2,0xd2, 0xb6,0xa1, 0xc6,0xdf, 0xc4,0xcb, 0xbe,0xc5, 0xc1,0xcb, 0xb6,0xfe, 0xc8,0xcb, 0xb6,0xf9, 0xc8,0xeb, 0xb0,0xcb, 0xbc,0xb8, 0xb5,0xb6, 0xb5,0xf3, 0xc1,0xa6, 0xd8,0xb0, 0xca,0xae, 0xb2,0xb7, 0xd3,0xd6, 0xc8,0xfd, 0xcf,0xc2, 0xd5,0xc9, 0xc9,0xcf, 0xd1,0xbe, 0xcd,0xe8, 0xb7,0xb2, 0xbe,0xc3, 0xc3,0xb4, 0xd2,0xb2, 0xc6,0xf2, 0xd3,0xda, 0xcd,0xf6, 0xd8,0xa3, 0xc8,0xd0, 0xc9,0xd7, 0xc7,0xa7, 0xb2,0xe6, 0xbf,0xda, 0xcd,0xc1, 0xca,0xbf, 0xcf,0xa6, 0xb4,0xf3, 0xc5,0xae, 0xd7,0xd3, 0xe6,0xdd, 0xe6,0xde, 0xb4,0xe7, 0xd0,0xa1, 0xde,0xcc, 0xca,0xac, 0xc9,0xbd, 0xb4,0xa8, 0xb9,0xa4, 0xbc,0xba, 0xd2,0xd1, 0xcb,0xc8, 0xbd,0xed, 0xb8,0xc9, 0xde,0xc3, 0xdf,0xae, 0xb9,0xad, 0xb2,0xc5, 0xb3,0xf3, 0xd8,0xa4, 0xb2,0xbb, 0xd6,0xd0, 0xb7,0xe1, 0xb5,0xa4, 0xd6,0xae, 0xd2,0xfc, 0xd3,0xe8, 0xd4,0xc6, 0xbe,0xae, 0xbb,0xa5, 0xce,0xe5, 0xbf,0xba, 0xc8,0xca, 0xca,0xb2, 0xd8,0xea, 0xc6,0xcd, 0xb3,0xf0, 0xc8,0xd4, 0xbd,0xf1, 0xbd,0xe9, 0xd8,0xc6, 0xd4,0xaa, 0xd4,0xca, 0xc4,0xda, 0xc1,0xf9, 0xd9,0xe2, 0xb9,0xab, 0xc8,0xdf, 0xd0,0xd7, 0xb7,0xd6, 0xc7,0xd0, 0xd8,0xd7, 0xd4,0xc8, 0xb9,0xb4, 0xce,0xf0, 0xbb,0xaf, 0xc6,0xa5, 0xce,0xe7, 0xc9,0xfd, 0xd8,0xa6, 0xb1,0xe5, 0xb6,0xf2, 0xd3,0xd1, 0xbc,0xb0, 0xb7,0xb4, 0xc8,0xc9, 0xcc,0xec, 0xb7,0xf2, 0xcc,0xab, 0xd8,0xb2, 0xbf,0xd7, 0xc9,0xd9, 0xd3,0xc8, 0xb3,0xdf, 0xcd,0xcd, 0xb0,0xcd, 0xbb,0xc3, 0xd8,0xa5, 0xb5,0xf5, 0xd2,0xfd, 0xd0,0xc4, 0xb8,0xea, 0xbb,0xa7, 0xca,0xd6, 0xd4,0xfa, 0xd6,0xa7, 0xce,0xc4, 0xb6,0xb7, 0xbd,0xef, 0xb7,0xbd, 0xc8,0xd5, 0xd4,0xbb, 0xd4,0xc2, 0xc4,0xbe, 0xc7,0xb7, 0xd6,0xb9, 0xb4,0xf5, 0xce,0xe3, 0xb1,0xc8, 0xc3,0xab, 0xca,0xcf, 0xcb,0xae, 0xbb,0xf0, 0xd7,0xa6, 0xb8,0xb8, 0xd8,0xb3, 0xc6,0xac, 0xd1,0xc0, 0xc5,0xa3, 0xc8,0xae, 0xcd,0xf5, 0xb1,0xfb, 0xca,0xc0, 0xd8,0xa7, 0xc7,0xd2, 0xc7,0xf0, 0xd6,0xf7, 0xd5,0xa7, 0xb7,0xa6, 0xba,0xf5, 0xd2,0xd4, 0xb8,0xb6, 0xd7,0xd0, 0xca,0xcb, 0xcb,0xfb, 0xd5,0xcc, 0xb4,0xfa, 0xc1,0xee, 0xcf,0xc9, 0xd8,0xf0, 0xb3,0xe4, 0xd0,0xd6, 0xc8,0xbd, 0xb2,0xe1, 0xb6,0xac, 0xb0,0xbc, 0xb3,0xf6, 0xcd,0xb9, 0xbf,0xaf, 0xbc,0xd3, 0xb9,0xa6, 0xb0,0xfc, 0xb4,0xd2, 0xb1,0xb1, 0xd4,0xd1, 0xc7,0xaa, 0xb0,0xeb, 0xbb,0xdc, 0xbf,0xa8, 0xd5,0xbc, 0xc3,0xae, 0xd8,0xb4, 0xc8,0xa5, 0xbf,0xc9, 0xb9,0xc5, 0xd3,0xd2, 0xd5,0xd9, 0xb6,0xa3, 0xdf,0xb5, 0xdf,0xb6, 0xb5,0xf0, 0xcb,0xbe, 0xd8,0xcf, 0xbd,0xd0, 0xc1,0xed, 0xd6,0xbb, 0xca,0xb7, 0xdf,0xb3, 0xcc,0xa8, 0xbe,0xe4, 0xb0,0xc8, 0xdf,0xb7, 0xcb,0xc4, 0xc7,0xf4, 0xcd,0xe2, 0xd1,0xeb, 0xca,0xa7, 0xc5,0xab, 0xc4,0xcc, 0xd4,0xd0, 0xcb,0xfc, 0xc4,0xe1, 0xbe,0xde, 0xc7,0xc9, 0xd7,0xf3, 0xca,0xd0, 0xb2,0xbc, 0xc6,0xbd, 0xd3,0xd7, 0xdb,0xcd, 0xba,0xeb, 0xb8,0xa5, 0xb1,0xd8, 0xce,0xec, 0xb4,0xf2, 0xc8,0xd3, 0xb0,0xc7, 0xc6,0xcb, 0xb3,0xe2, 0xb5,0xa9, 0xca,0xf5, 0xb1,0xbe, 0xce,0xb4, 0xc4,0xa9, 0xd4,0xfd, 0xd5,0xfd, 0xc4,0xb8, 0xc3,0xf1, 0xd8,0xb5, 0xd3,0xc0, 0xd6,0xad, 0xcd,0xa1, 0xb7,0xba, 0xb7,0xb8, 0xd0,0xfe, 0xd3,0xf1, 0xb9,0xcf, 0xcd,0xdf, 0xb8,0xca, 0xc9,0xfa, 0xd3,0xc3, 0xcb,0xa6, 0xcc,0xef, 0xd3,0xc9, 0xbc,0xd7, 0xc9,0xea, 0xf1,0xe2, 0xb0,0xd7, 0xc6,0xa4, 0xc3,0xf3, 0xc4,0xbf, 0xc3,0xac, 0xca,0xb8, 0xca,0xaf, 0xca,0xbe, 0xba,0xcc, 0xd1,0xa8, 0xc1,0xa2, 0xd8,0xa9, 0xb6,0xaa, 0xc6,0xb9, 0xc5,0xd2, 0xd8,0xc0, 0xd8,0xa8, 0xbd,0xbb, 0xd2,0xe0, 0xba,0xa5, 0xb7,0xc2, 0xd8,0xf8, 0xbb,0xef, 0xd2,0xc1, 0xb7,0xf2, 0xce,0xe9, 0xb7,0xa5, 0xd0,0xdd, 0xb7,0xfc, 0xd6,0xd9, 0xbc,0xfe, 0xc8,0xce, 0xd1,0xf6, 0xd8,0xf2, 0xb7,0xdd, 0xc6,0xf3, 0xa1,0xf5, 0xb9,0xe2, 0xd0,0xd7, 0xd5,0xd7, 0xcf,0xc8, 0xc8,0xab, 0xb9,0xb2, 0xd4,0xd9, 0xb1,0xf9, 0xc1,0xd0, 0xd0,0xcc, 0xbb,0xae, 0xd8,0xd8, 0xeb,0xbe, 0xc1,0xd3, 0xd0,0xd9, 0xbf,0xef, 0xbd,0xb3, 0xd3,0xa1, 0xce,0xa3, 0xbc,0xaa, 0xc0,0xf4, 0xcd,0xac, 0xb5,0xf5, 0xcd,0xc2, 0xd3,0xf5, 0xb4,0xe7, 0xb8,0xf7, 0xcf,0xf2, 0xc3,0xfb, 0xba,0xcf, 0xb3,0xd4, 0xba,0xf3, 0xdf,0xba, 0xdf,0xb8, 0xd2,0xf2, 0xbb,0xd8, 0xe0,0xee, 0xdb,0xda, 0xb5,0xd8, 0xd4,0xda, 0xb9,0xe7, 0xdb,0xd8, 0xdb,0xdd, 0xdb,0xd7, 0xd9,0xed, 0xb6,0xe0, 0xd2,0xc4, 0xbf,0xe4, 0xcd,0xfd, 0xbc,0xe9, 0xe5,0xfa, 0xba,0xc3, 0xcb,0xfd, 0xc8,0xe7, 0xe5,0xf9, 0xd7,0xd6, 0xb4,0xe6, 0xd3,0xee, 0xca,0xd8, 0xd5,0xac, 0xb0,0xb2, 0xcb,0xc2, 0xbc,0xe2, 0xd2,0xd9, 0xd6,0xdd, 0xb7,0xab, 0xb2,0xa2, 0xc4,0xea, 0xca,0xbd, 0xb3,0xda, 0xc3,0xa6, 0xe2,0xe2, 0xc8,0xd6, 0xd0,0xe7, 0xca,0xf9, 0xb3,0xc9, 0xbf,0xdb, 0xbf,0xb8, 0xcd,0xd0, 0xca,0xd5, 0xd4,0xe7, 0xd6,0xbc, 0xd1,0xae, 0xd0,0xf1, 0xc7,0xfa, 0xd2,0xb7, 0xd3,0xd0, 0xd0,0xe0, 0xc6,0xd3, 0xd6,0xec, 0xb6,0xe4, 0xb4,0xce, 0xb4,0xcb, 0xcb,0xc0, 0xc4,0xca, 0xc8,0xea, 0xba,0xb9, 0xce,0xdb, 0xbd,0xad, 0xb3,0xd8, 0xcf,0xab, 0xc9,0xc7, 0xce,0xdb, 0xd1,0xb4, 0xa1,0xf5, 0xb7,0xba, 0xbb,0xd2, 0xc4,0xb2, 0xea,0xf2, 0xb0,0xd9, 0xd6,0xf1, 0xc3,0xd7, 0xf4,0xe9, 0xf3,0xbe, 0xd1,0xf2, 0xd3,0xf0, 0xc0,0xcf, 0xbf,0xbc, 0xb6,0xf8, 0xf1,0xe7, 0xb6,0xfa, 0xed,0xb2, 0xc8,0xe2, 0xc0,0xdf, 0xbc,0xa1, 0xb3,0xbc, 0xd7,0xd4, 0xd6,0xc1, 0xbe,0xca, 0xc9,0xe0, 0xe2,0xb6, 0xd6,0xdb, 0xf4,0xde, 0xc9,0xab, 0xb0,0xac, 0xb3,0xe6, 0xd1,0xaa, 0xd0,0xd0, 0xd2,0xc2, 0xce,0xf7, 0xda,0xe4, 0xb4,0xae, 0xba,0xe0, 0xce,0xbb, 0xd7,0xa1, 0xd8,0xf9, 0xd9,0xa2, 0xd8,0xfa, 0xb0,0xe9, 0xb7,0xf0, 0xba,0xce, 0xb9,0xc0, 0xd7,0xf4, 0xd3,0xd3, 0xd9,0xa4, 0xcb,0xc5, 0xc9,0xec, 0xb5,0xe8, 0xd5,0xbc, 0xcb,0xc6, 0xb5,0xab, 0xd3,0xb6, 0xd7,0xf7, 0xc4,0xe3, 0xb2,0xae, 0xb5,0xcd, 0xc1,0xe6, 0xd3,0xe0, 0xd8,0xfe, 0xb2,0xbc, 0xd8,0xfd, 0xb6,0xd2, 0xbf,0xcb, 0xc3,0xe2, 0xb1,0xf8, 0xd2,0xb1, 0xc0,0xe4, 0xb1,0xf0, 0xc5,0xd0, 0xc0,0xfb, 0xc9,0xbe, 0xc5,0xd9, 0xbd,0xd9, 0xd6,0xfa, 0xc5,0xac, 0xdb,0xbe, 0xcf,0xbb, 0xbc,0xb4, 0xc2,0xd1, 0xc1,0xdf, 0xbf,0xd4, 0xcd,0xcc, 0xce,0xe1, 0xb7,0xf1, 0xb3,0xdf, 0xb0,0xc9, 0xb4,0xf4, 0xdf,0xc0, 0xce,0xe2, 0xb3,0xca, 0xc2,0xc0, 0xbe,0xfd, 0xb7,0xd4, 0xb8,0xe6, 0xb4,0xb5, 0xce,0xc7, 0xce,0xfc, 0xcb,0xb1, 0xb3,0xb3, 0xc4,0xc5, 0xb7,0xcd, 0xba,0xf0, 0xd1,0xbd, 0xd6,0xa8, 0xba,0xac, 0xd2,0xf7, 0xcc,0xfd, 0xb4,0xd1, 0xc0,0xa7, 0xb6,0xda, 0xe0,0xf1, 0xb7,0xbb, 0xbf,0xd3, 0xd6,0xb7, 0xcc,0xae, 0xbe,0xf9, 0xbf,0xb2, 0xbb,0xf8, 0xd7,0xf8, 0xbb,0xb5, 0xdb,0xdf, 0xd7,0xb3, 0xbc,0xd0, 0xd7,0xb1, 0xb6,0xca, 0xb7,0xc1, 0xe6,0xa4, 0xe5,0xfe, 0xc3,0xee, 0xd1,0xfd, 0xe5,0xfb, 0xe6,0xa5, 0xbc,0xcb, 0xc8,0xd1, 0xcd,0xd7, 0xd0,0xa2, 0xd7,0xce, 0xe6,0xda, 0xd8,0xc3, 0xcd,0xea, 0xcb,0xce, 0xba,0xea, 0xde,0xce, 0xbe,0xd6, 0xc6,0xa8, 0xc4,0xf2, 0xce,0xb2, 0xe1,0xaa, 0xe1,0xaf, 0xb2,0xed, 0xe1,0xa7, 0xce,0xd7, 0xcf,0xa3, 0xd0,0xf2, 0xb1,0xd3, 0xb4,0xb2, 0xcd,0xa2, 0xc5,0xaa, 0xb5,0xdc, 0xcd,0xae, 0xd0,0xce, 0xe1,0xdd, 0xd2,0xdb, 0xcd,0xfc, 0xbc,0xc9, 0xd6,0xbe, 0xc8,0xcc, 0xb3,0xc0, 0xbf,0xec, 0xe2,0xee, 0xe2,0xec, 0xbd,0xe4, 0xce,0xd2, 0xb3,0xad, 0xbf,0xb9, 0xb6,0xb6, 0xbc,0xbc, 0xb7,0xf6, 0xbe,0xf1, 0xc5,0xa4, 0xb0,0xd1, 0xb6,0xf3, 0xd5,0xd2, 0xc5,0xfa, 0xb0,0xe2, 0xca,0xe3, 0xb3,0xb6, 0xd5,0xdb, 0xb0,0xe7, 0xcd,0xb6, 0xd7,0xa5, 0xd2,0xd6, 0xa1,0xf5, 0xb8,0xc4, 0xb9,0xa5, 0xd8,0xfc, 0xba,0xb5, 0xb8,0xfc, 0xca,0xf8, 0xc0,0xee, 0xd0,0xd3, 0xb2,0xc4, 0xb4,0xe5, 0xb6,0xc5, 0xd5,0xc8, 0xe8,0xbd, 0xc9,0xbc, 0xb8,0xcb, 0xb8,0xdc, 0xe8,0xbc, 0xa1,0xf5, 0xb2,0xbd, 0xc3,0xbf, 0xc7,0xf3, 0xb9,0xaf, 0xc9,0xb3, 0xc7,0xdf, 0xc9,0xf2, 0xb3,0xc1, 0xe3,0xe4, 0xc5,0xe6, 0xcd,0xf4, 0xbe,0xf6, 0xe3,0xe5, 0xcc,0xad, 0xe3,0xe7, 0xe3,0xe8, 0xb3,0xe5, 0xc3,0xbb, 0xc6,0xfb, 0xce,0xd6, 0xbc,0xb3, 0xb7,0xda, 0xe3,0xea, 0xe3,0xec, 0xe3,0xeb, 0xa1,0xf5, 0xe3,0xe6, 0xa1,0xf5, 0xd2,0xca, 0xd4,0xee, 0xd7,0xc6, 0xd4,0xd6, 0xbe,0xc4, 0xc0,0xce, 0xc4,0xb5, 0xcb,0xfc, 0xb5,0xd2, 0xbf,0xf1, 0xbe,0xc1, 0xf0,0xae, 0xb8,0xa6, 0xc4,0xd0, 0xb5,0xe9, 0xd4,0xed, 0xb6,0xa2, 0xd2,0xd3, 0xcb,0xbd, 0xd0,0xe3, 0xcd,0xba, 0xbe,0xbf, 0xcf,0xb5, 0xba,0xb1, 0xd0,0xa4, 0xeb,0xc1, 0xb8,0xce, 0xd6,0xe2, 0xb8,0xd8, 0xb6,0xc7, 0xd3,0xfd, 0xc1,0xbc, 0xc3,0xa2, 0xd3,0xf3, 0xc9,0xd6, 0xbc,0xfb, 0xbd,0xc7, 0xd1,0xd4, 0xb9,0xc8, 0xb6,0xb9, 0xf5,0xb9, 0xb1,0xb4, 0xb3,0xe0, 0xd7,0xdf, 0xd7,0xe3, 0xc9,0xed, 0xb3,0xb5, 0xd0,0xc1, 0xb3,0xbd, 0xd3,0xd8, 0xe5,0xc6, 0xd1,0xb8, 0xc6,0xf9, 0xd1,0xb2, 0xd2,0xd8, 0xd0,0xcf, 0xd0,0xb0, 0xb0,0xee, 0xc4,0xc7, 0xd3,0xcf, 0xb2,0xc9, 0xc0,0xef, 0xb7,0xc0, 0xc8,0xee, 0xda,0xe5, 0xda,0xe6, 0xa1,0xf5, 0xb2,0xa2, 0xb9,0xd4, 0xc8,0xe9, 0xca,0xc2, 0xd0,0xa9, 0xd1,0xc7, 0xcf,0xed, 0xbe,0xa9, 0xd1,0xf0, 0xd2,0xc0, 0xca,0xcc, 0xbc,0xd1, 0xca,0xb9, 0xc0,0xd0, 0xb9,0xa9, 0xc0,0xfd, 0xc0,0xb4, 0xd9,0xa9, 0xb0,0xdb, 0xb2,0xa2, 0xb3,0xde, 0xc5,0xe5, 0xd9,0xac, 0xc2,0xd8, 0xd9,0xab, 0xd9,0xaa, 0xd9,0xa7, 0xa1,0xf5, 0xcd,0xc3, 0xb6,0xf9, 0xd9,0xee, 0xc1,0xbd, 0xbe,0xdf, 0xc6,0xe4, 0xb5,0xe4, 0xd9,0xfd, 0xba,0xaf, 0xbf,0xcc, 0xc8,0xaf, 0xcb,0xa2, 0xb4,0xcc, 0xb5,0xbd, 0xb9,0xce, 0xd6,0xc6, 0xb6,0xe7, 0xdb,0xc0, 0xa1,0xf5, 0xd7,0xe4, 0xd0,0xad, 0xd7,0xbf, 0xb1,0xb0, 0xd8,0xd4, 0xbe,0xed, 0xd0,0xb6, 0xd0,0xf4, 0xc8,0xa1, 0xca,0xe5, 0xca,0xdc, 0xce,0xb6, 0xba,0xc7, 0xbf,0xa7, 0xc5,0xde, 0xb9,0xbe, 0xbe,0xd7, 0xc9,0xeb, 0xdf,0xc8, 0xdf,0xcd, 0xd6,0xe4, 0xc5,0xd8, 0xba,0xf4, 0xb8,0xc0, 0xdf,0xc9, 0xdf,0xce, 0xba,0xcd, 0xdf,0xcb, 0xc4,0xd8, 0xd6,0xdc, 0xd5,0xa6, 0xc3,0xfc, 0xbe,0xcc, 0xb9,0xcc, 0xc0,0xac, 0xbf,0xc0, 0xc6,0xba, 0xdb,0xe1, 0xc6,0xc2, 0xcc,0xb9, 0xc0,0xa4, 0xdb,0xe5, 0xd2,0xb9, 0xb7,0xee, 0xc6,0xe6, 0xc4,0xce, 0xd1,0xd9, 0xb1,0xbc, 0xe6,0xaa, 0xc6,0xde, 0xce,0xaf, 0xc3,0xc3, 0xc4,0xdd, 0xb9,0xc3, 0xc4,0xb7, 0xbd,0xe3, 0xe6,0xa9, 0xca,0xbc, 0xd0,0xd5, 0xe6,0xa2, 0xe6,0xa8, 0xc4,0xe3, 0xe6,0xa6, 0xa1,0xf5, 0xc3,0xcf, 0xb9,0xc2, 0xbc,0xbe, 0xd7,0xda, 0xb6,0xa8, 0xb9,0xd9, 0xd2,0xcb, 0xd6,0xe6, 0xcd,0xf0, 0xc9,0xd0, 0xc7,0xfc, 0xbe,0xd3, 0xbd,0xec, 0xe1,0xba, 0xb8,0xd4, 0xb0,0xb6, 0xd1,0xd2, 0xe1,0xb6, 0xe1,0xb7, 0xd4,0xc0, 0xc1,0xb1, 0xd6,0xe3, 0xcc,0xfb, 0xc5,0xc1, 0xb2,0xaf, 0xe0,0xfb, 0xd0,0xd2, 0xb8,0xfd, 0xb5,0xea, 0xb8,0xae, 0xb5,0xd7, 0xe2,0xd2, 0xd1,0xd3, 0xcf,0xd2, 0xbb,0xa1, 0xe5,0xf3, 0xcd,0xf9, 0xd5,0xf7, 0xb7,0xf0, 0xb1,0xcb, 0xe3,0xc3, 0xd6,0xd2, 0xba,0xf6, 0xc4,0xee, 0xb7,0xde, 0xe2,0xf3, 0xd5,0xfa, 0xc7,0xd3, 0xe2,0xf0, 0xb2,0xc0, 0xb9,0xd6, 0xc5,0xc2, 0xe2,0xf9, 0xd0,0xd4, 0xe2,0xf5, 0xe2,0xf6, 0xe2,0xf2, 0xbb,0xf2, 0xe3,0xde, 0xb7,0xbf, 0xec,0xe5, 0xcb,0xf9, 0xb3,0xd0, 0xc0,0xad, 0xb0,0xe8, 0xd6,0xf4, 0xc3,0xf2, 0xb7,0xf7, 0xc4,0xa8, 0xbe,0xdc, 0xd5,0xd0, 0xc5,0xfb, 0xcd,0xd8, 0xb0,0xce, 0xc5,0xd7, 0xc4,0xe9, 0xc5,0xea, 0xb3,0xe9, 0xd1,0xba, 0xb9,0xd5, 0xd7,0xbe, 0xc4,0xb4, 0xc5,0xc4, 0xb5,0xd6, 0xde,0xd5, 0xb1,0xa7, 0xbe,0xd0, 0xcd,0xcf, 0xde,0xd6, 0xb2,0xf0, 0xcc,0xa7, 0xc1,0xe0, 0xb7,0xc5, 0xb8,0xab, 0xd3,0xda, 0xcd,0xfa, 0xce,0xf4, 0xd2,0xd7, 0xb2,0xfd, 0xc0,0xa5, 0xb0,0xba, 0xc3,0xf7, 0xea,0xc0, 0xbb,0xe8, 0xea,0xbf, 0xea,0xbb, 0xc9,0xfd, 0xb7,0xfe, 0xc5,0xf3, 0xba,0xbc, 0xe8,0xca, 0xd5,0xed, 0xb6,0xab, 0xb9,0xfb, 0xe8,0xc3, 0xe8,0xcb, 0xe8,0xc1, 0xd6,0xa6, 0xc1,0xd6, 0xb1,0xad, 0xbd,0xdc, 0xb0,0xe5, 0xcd,0xf7, 0xcb,0xc9, 0xce,0xf6, 0xe8,0xc6, 0xc3,0xb6, 0xa1,0xf5, 0xe8,0xcc, 0xe8,0xc2, 0xea,0xbd, 0xd0,0xc0, 0xce,0xe4, 0xc6,0xe7, 0xe9,0xe2, 0xc3,0xa5, 0xb7,0xd5, 0xc6,0xfc, 0xd7,0xa2, 0xd3,0xbe, 0xe3,0xfb, 0xc3,0xda, 0xc4,0xe0, 0xba,0xd3, 0xb9,0xc1, 0xd5,0xb4, 0xd5,0xd3, 0xb2,0xa8, 0xc4,0xad, 0xb7,0xa8, 0xe3,0xfc, 0xb7,0xd0, 0xd0,0xb9, 0xd3,0xcd, 0xbf,0xf6, 0xbe,0xda, 0xe3,0xf4, 0xc7,0xf6, 0xe3,0xf3, 0xd1,0xd8, 0xd6,0xce, 0xc5,0xdd, 0xb7,0xba, 0xb2,0xb4, 0xa1,0xf5, 0xe3,0xfd, 0xa1,0xf5, 0xe3,0xf7, 0xe3,0xf6, 0xbf,0xbb, 0xd1,0xd7, 0xb3,0xb4, 0xb4,0xb6, 0xd6,0xcb, 0xc5,0xc0, 0xd5,0xf9, 0xb0,0xd6, 0xb0,0xe6, 0xc4,0xc1, 0xce,0xef, 0xd7,0xb4, 0xe1,0xf2, 0xbe,0xd1, 0xb9,0xb7, 0xba,0xfc, 0xcd,0xe6, 0xe7,0xe5, 0xe7,0xe4, 0xc3,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xde, 0xb8,0xed, 0xbe,0xce, 0xb5,0xc4, 0xd3,0xdb, 0xc3,0xa4, 0xd6,0xb1, 0xd6,0xaa, 0xce,0xf9, 0xc9,0xe7, 0xec,0xeb, 0xc6,0xee, 0xb1,0xfc, 0xf4,0xcc, 0xbf,0xd5, 0xf1,0xb7, 0xf3,0xc3, 0xbe,0xc0, 0xd8,0xe8, 0xc7,0xbc, 0xd8,0xc2, 0xd5,0xdf, 0xb7,0xce, 0xb7,0xca, 0xd6,0xab, 0xeb,0xc5, 0xb9,0xc9, 0xeb,0xc6, 0xbc,0xe7, 0xeb,0xc8, 0xb7,0xbe, 0xbf,0xcf, 0xce,0xd4, 0xf4,0xa7, 0xc9,0xe1, 0xb7,0xbc, 0xd6,0xa5, 0xdc,0xbd, 0xb0,0xc5, 0xd1,0xbf, 0xdc,0xcf, 0xc7,0xdb, 0xbb,0xa8, 0xb7,0xd2, 0xbd,0xe6, 0xd0,0xbe, 0xdc,0xbf, 0xa1,0xf5, 0xdc,0xc1, 0xdc,0xc0, 0xdc,0xc6, 0xbb,0xa2, 0xca,0xad, 0xb3,0xf5, 0xb1,0xed, 0xd4,0xfe, 0xd3,0xad, 0xb7,0xb5, 0xbd,0xfc, 0xc9,0xdb, 0xdb,0xa1, 0xc7,0xf1, 0xda,0xfd, 0xb2,0xc9, 0xbd,0xf0, 0xb3,0xa4, 0xc3,0xc5, 0xb8,0xb7, 0xcd,0xd3, 0xb0,0xa2, 0xd7,0xe8, 0xb8,0xbd, 0xda,0xe9, 0xf6,0xbf, 0xd3,0xea, 0xc7,0xe0, 0xb7,0xc7, 0xd8,0xbd, 0xcd,0xa4, 0xc1,0xc1, 0xd0,0xc5, 0xc7,0xd6, 0xba,0xee, 0xb1,0xe3, 0xcf,0xc0, 0xd9,0xb8, 0xc7,0xce, 0xb1,0xa3, 0xb4,0xd9, 0xc2,0xc2, 0xb7,0xfd, 0xd9,0xb9, 0xbf,0xa1, 0xcb,0xd7, 0xce,0xea, 0xc0,0xfe, 0xb6,0xed, 0xcf,0xb5, 0xd9,0xb5, 0xd9,0xde, 0xd3,0xe1, 0xbe,0xd6, 0xd9,0xf0, 0xc3,0xb0, 0xeb,0xd0, 0xb9,0xda, 0xc9,0xb2, 0xcc,0xea, 0xcf,0xf7, 0xc7,0xb0, 0xd8,0xdd, 0xbf,0xcb, 0xd4,0xf2, 0xd3,0xc2, 0xc3,0xe3, 0xb2,0xaa, 0xbe,0xa2, 0xd9,0xe9, 0xc4,0xcf, 0xc8,0xb4, 0xba,0xf1, 0xc5,0xd1, 0xd2,0xa7, 0xb0,0xa7, 0xd7,0xc9, 0xb0,0xa5, 0xd4,0xd5, 0xcf,0xcc, 0xdf,0xd7, 0xbf,0xc8, 0xcd,0xdb, 0xdf,0xd3, 0xd1,0xca, 0xdf,0xe4, 0xc6,0xb7, 0xba,0xe5, 0xb9,0xfe, 0xbf,0xa9, 0xe5,0xeb, 0xd4,0xdb, 0xdf,0xdd, 0xdf,0xe3, 0xdf,0xd6, 0xdf,0xde, 0xe0,0xf3, 0xb4,0xb9, 0xd0,0xcd, 0xdb,0xf3, 0xd4,0xab, 0xb9,0xb8, 0xb3,0xc7, 0xbf,0xe5, 0xdb,0xf2, 0xde,0xc8, 0xc6,0xf5, 0xd7,0xe0, 0xbf,0xfc, 0xdb,0xbc, 0xbd,0xaa, 0xe6,0xb0, 0xd7,0xcb, 0xe6,0xaf, 0xd2,0xcc, 0xcd,0xde, 0xc0,0xd1, 0xd6,0xb6, 0xd2,0xa6, 0xbc,0xe9, 0xcd,0xfe, 0xd2,0xf6, 0xba,0xa2, 0xd0,0xfb, 0xbb,0xc2, 0xca,0xd2, 0xbf,0xcd, 0xe5,0xb6, 0xb7,0xe2, 0xca,0xba, 0xc6,0xc1, 0xca,0xac, 0xce,0xdd, 0xd6,0xc5, 0xe1,0xbc, 0xcf,0xef, 0xb5,0xdb, 0xcb,0xa7, 0xa1,0xf5, 0xd3,0xc4, 0xe2,0xd4, 0xb6,0xc8, 0xbd,0xa8, 0xde,0xc4, 0xe5,0xf4, 0xd1,0xe5, 0xba,0xdc, 0xb4,0xfd, 0xbb,0xb2, 0xc2,0xc9, 0xe1,0xdf, 0xba,0xf3, 0xe1,0xe0, 0xc5,0xad, 0xcb,0xbc, 0xb5,0xa1, 0xbc,0xb1, 0xd4,0xf5, 0xd4,0xb9, 0xbb,0xd0, 0xc7,0xa1, 0xba,0xde, 0xbb,0xd6, 0xba,0xe3, 0xca,0xd1, 0xcc,0xf1, 0xb6,0xb2, 0xe3,0xa1, 0xd0,0xf4, 0xb1,0xe2, 0xb0,0xdd, 0xcd,0xda, 0xb0,0xb4, 0xc6,0xb4, 0xca,0xc3, 0xb3,0xd6, 0xde,0xd7, 0xd7,0xa7, 0xd6,0xb8, 0xb9,0xb0, 0xbf,0xbd, 0xd5,0xfc, 0xc0,0xa8, 0xca,0xb0, 0xcb,0xa9, 0xcc,0xf4, 0xb9,0xd2, 0xd5,0xfe, 0xb9,0xca, 0xed,0xbd, 0xca,0xa9, 0xbc,0xc8, 0xb4,0xba, 0xd5,0xd1, 0xd3,0xb3, 0xc3,0xc1, 0xca,0xc7, 0xd0,0xc7, 0xd7,0xf2, 0xea,0xc5, 0xa1,0xf5, 0xea,0xc2, 0xca,0xc1, 0xc8,0xbe, 0xd6,0xf9, 0xc8,0xe1, 0xc4,0xb3, 0xbc,0xed, 0xbc,0xdc, 0xbf,0xdd, 0xd5,0xa4, 0xe8,0xd1, 0xbf,0xc2, 0xb1,0xfa, 0xb8,0xcc, 0xb9,0xd5, 0xe8,0xd6, 0xb2,0xe9, 0xe8,0xdb, 0xb0,0xd8, 0xd7,0xf5, 0xc1,0xf8, 0xe8,0xd2, 0xe8,0xd4, 0xe8,0xdc, 0xe8,0xd8, 0xc6,0xe2, 0xcd,0xe1, 0xd1,0xea, 0xb4,0xf9, 0xb6,0xce, 0xb6,0xbe, 0xc5,0xfe, 0xb7,0xfa, 0xc8,0xaa, 0xd1,0xf3, 0xd6,0xde, 0xba,0xe9, 0xc1,0xf7, 0xbd,0xf2, 0xe4,0xa3, 0xb6,0xfd, 0xb6,0xb4, 0xcf,0xb4, 0xbb,0xee, 0xc7,0xa2, 0xc5,0xc9, 0xd0,0xda, 0xc2,0xe5, 0xb1,0xc3, 0xe4,0xa1, 0xe4,0xa2, 0xa1,0xf5, 0xd0,0xb9, 0xe4,0xac, 0xe4,0xad, 0xe4,0xa9, 0xe4,0xaa, 0xec,0xc5, 0xce,0xaa, 0xb1,0xfe, 0xbe,0xe6, 0xbe,0xbc, 0xcc,0xbf, 0xd5,0xa8, 0xc5,0xda, 0xa1,0xf5, 0xeb,0xbc, 0xc9,0xfc, 0xea,0xf4, 0xb5,0xd6, 0xe1,0xf7, 0xba,0xdd, 0xbd,0xc6, 0xe7,0xe8, 0xc9,0xba, 0xb2,0xa3, 0xc1,0xe1, 0xd5,0xe4, 0xe7,0xea, 0xe7,0xe9, 0xc9,0xf5, 0xb1,0xc2, 0xce,0xb7, 0xbd,0xe7, 0xee,0xb0, 0xee,0xb1, 0xd2,0xdf, 0xb0,0xcc, 0xbd,0xea, 0xa1,0xf5, 0xf0,0xe0, 0xb9,0xef, 0xbd,0xd4, 0xbb,0xca, 0xf0,0xa7, 0xd3,0xaf, 0xc5,0xe8, 0xb1,0xad, 0xd6,0xd1, 0xca,0xa1, 0xed,0xef, 0xcf,0xe0, 0xc3,0xbc, 0xbf,0xb4, 0xb6,0xdc, 0xc5,0xce, 0xed,0xf0, 0xf1,0xe6, 0xc9,0xb0, 0xd1,0xd0, 0xc6,0xf6, 0xbf,0xb3, 0xec,0xec, 0xec,0xed, 0xc6,0xed, 0xa1,0xf5, 0xd3,0xed, 0xd8,0xae, 0xbf,0xc6, 0xc3,0xeb, 0xc7,0xef, 0xb4,0xa9, 0xcd,0xbb, 0xb8,0xcd, 0xf3,0xc4, 0xd7,0xd1, 0xe6,0xfb, 0xba,0xec, 0xbc,0xcd, 0xc8,0xd2, 0xe6,0xfc, 0xd4,0xbc, 0xe6,0xfa, 0xb8,0xd7, 0xc3,0xc0, 0xf4,0xe0, 0xeb,0xa3, 0xc4,0xcd, 0xcb,0xa3, 0xd7,0xa8, 0xd2,0xae, 0xc5,0xd6, 0xf1,0xe3, 0xc5,0xdf, 0xce,0xb8, 0xeb,0xd0, 0xb1,0xb3, 0xba,0xfa, 0xeb,0xce, 0xcc,0xa5, 0xb0,0xfb, 0xd8,0xb7, 0xeb,0xd5, 0xd6,0xc2, 0xf4,0xae, 0xdc,0xd1, 0xb7,0xb6, 0xc3,0xa9, 0xdc,0xc4, 0xbf,0xc1, 0xbf,0xe0, 0xc7,0xd1, 0xc8,0xf4, 0xc3,0xaf, 0xdc,0xd4, 0xdc,0xdb, 0xc3,0xe7, 0xd3,0xa2, 0xd7,0xc2, 0xdc,0xd9, 0xcc,0xa6, 0xd4,0xb7, 0xb0,0xfa, 0xdc,0xdf, 0xb9,0xb6, 0xb1,0xbd, 0xdc,0xe2, 0xc5,0xb0, 0xba,0xe7, 0xf2,0xb5, 0xf2,0xb3, 0xd1,0xdc, 0xc9,0xc0, 0xd2,0xaa, 0xbd,0xee, 0xbc,0xc6, 0xb6,0xa9, 0xb8,0xbc, 0xd5,0xea, 0xb8,0xba, 0xb8,0xb0, 0xf4,0xf1, 0xc5,0xbf, 0xbe,0xfc, 0xb9,0xec, 0xca,0xf6, 0xe5,0xc8, 0xcc,0xf6, 0xb5,0xcf, 0xe5,0xc4, 0xb5,0xfc, 0xc6,0xc8, 0xe5,0xc6, 0xe5,0xca, 0xbd,0xbc, 0xc0,0xc9, 0xd3,0xf4, 0xa1,0xf5, 0xc7,0xf5, 0xf4,0xfa, 0xd6,0xd8, 0xe3,0xc5, 0xcf,0xde, 0xc2,0xaa, 0xc4,0xb0, 0xbd,0xb5, 0xc3,0xe6, 0xb8,0xef, 0xce,0xa4, 0xbe,0xc2, 0xd2,0xf4, 0xd2,0xb3, 0xb7,0xe7, 0xb7,0xc9, 0xca,0xb3, 0xca,0xd7, 0xcf,0xe3, 0xb3,0xcb, 0xd9,0xf1, 0xd9,0xc4, 0xb1,0xb6, 0xb7,0xc2, 0xb8,0xa9, 0xbe,0xeb, 0xd9,0xc5, 0xd9,0xba, 0xd9,0xbb, 0xd0,0xd2, 0xc1,0xa9, 0xd6,0xb5, 0xbd,0xe8, 0xd2,0xd0, 0xb5,0xb9, 0xc3,0xc7, 0xb0,0xb3, 0xd8,0xf6, 0xbe,0xf3, 0xd9,0xc6, 0xbe,0xe3, 0xb3,0xab, 0xb8,0xf6, 0xba,0xf2, 0xcc,0xc8, 0xd9,0xbd, 0xd0,0xde, 0xd9,0xc1, 0xc4,0xdf, 0xd9,0xc2, 0xc2,0xd7, 0xb2,0xd6, 0xbc,0xe6, 0xd4,0xa9, 0xda,0xa4, 0xda,0xa3, 0xb6,0xb3, 0xc1,0xe8, 0xd7,0xbc, 0xb5,0xf2, 0xc6,0xca, 0xd8,0xe0, 0xcc,0xde, 0xb8,0xd5, 0xb0,0xfe, 0xb7,0xcb, 0xc7,0xe4, 0xd4,0xad, 0xd8,0xc8, 0xdb,0xc5, 0xc9,0xda, 0xcc,0xc6, 0xd1,0xe4, 0xe0,0xa1, 0xba,0xdf, 0xb8,0xe7, 0xd5,0xdc, 0xcb,0xf4, 0xb2,0xb8, 0xdf,0xed, 0xc1,0xa8, 0xbf,0xde, 0xd4,0xb1, 0xb0,0xa6, 0xcf,0xf8, 0xc4,0xc4, 0xc5,0xb6, 0xdf,0xf3, 0xb4,0xbd, 0xdf,0xec, 0xdf,0xf1, 0xc6,0xd4, 0xe0,0xf4, 0xb9,0xa1, 0xc6,0xd2, 0xc2,0xf1, 0xb0,0xa3, 0xa1,0xf5, 0xcf,0xc4, 0xcc,0xd7, 0xde,0xca, 0xde,0xc9, 0xe6,0xb6, 0xc4,0xef, 0xc4,0xc8, 0xbe,0xea, 0xd3,0xe9, 0xe6,0xb8, 0xbc,0xa7, 0xc9,0xef, 0xe6,0xb7, 0xc3,0xe4, 0xb6,0xf0, 0xe6,0xb2, 0xe6,0xb3, 0xcb,0xef, 0xa1,0xf5, 0xd4,0xd7, 0xba,0xa6, 0xbc,0xd2, 0xd1,0xe7, 0xb9,0xac, 0xcf,0xfc, 0xc8,0xdd, 0xe5,0xb7, 0xc9,0xe4, 0xd0,0xbc, 0xd5,0xb9, 0xe5,0xec, 0xc7,0xcd, 0xcf,0xbf, 0xbe,0xfe, 0xd3,0xf8, 0xb6,0xeb, 0xb7,0xe5, 0xb5,0xba, 0xa1,0xf5, 0xe1,0xad, 0xb2,0xee, 0xcf,0xaf, 0xca,0xa6, 0xbf,0xe2, 0xcd,0xa5, 0xd7,0xf9, 0xc8,0xf5, 0xcd,0xbd, 0xbe,0xb6, 0xd0,0xec, 0xed,0xa6, 0xed,0xa7, 0xb3,0xdc, 0xbf,0xd6, 0xcb,0xa1, 0xb9,0xa7, 0xb6,0xf7, 0xcf,0xa2, 0xc7,0xc4, 0xce,0xf2, 0xe3,0xa4, 0xba,0xb7, 0xbb,0xda, 0xe3,0xa9, 0xd4,0xc3, 0xe3,0xa3, 0xc9,0xc8, 0xc8,0xad, 0xea,0xfc, 0xc4,0xc3, 0xc9,0xd3, 0xd0,0xae, 0xd5,0xf1, 0xb2,0xb6, 0xce,0xe6, 0xc0,0xa6, 0xc4,0xf3, 0xd7,0xbd, 0xcd,0xa6, 0xbe,0xe8, 0xcd,0xec, 0xc5,0xb2, 0xb4,0xec, 0xb0,0xa4, 0xba,0xb4, 0xb0,0xc6, 0xd0,0xa7, 0xf4,0xcd, 0xc1,0xcf, 0xc5,0xd4, 0xc2,0xc3, 0xca,0xb1, 0xbd,0xfa, 0xea,0xcc, 0xbb,0xce, 0xc9,0xb9, 0xc9,0xce, 0xa1,0xf5, 0xea,0xcb, 0xca,0xe9, 0xcb,0xb7, 0xeb,0xde, 0xc0,0xca, 0xd0,0xa3, 0xba,0xcb, 0xb0,0xb8, 0xbf,0xf2, 0xbb,0xb8, 0xb8,0xf9, 0xb9,0xf0, 0xbd,0xdb, 0xe8,0xf2, 0xca,0xe1, 0xc0,0xf5, 0xd7,0xc0, 0xc9,0xa3, 0xd4,0xd4, 0xb2,0xf1, 0xcd,0xa9, 0xe8,0xee, 0xb8,0xf1, 0xcc,0xd2, 0xd6,0xea, 0xce,0xa6, 0xcb,0xa8, 0xa1,0xf5, 0xe8,0xec, 0xca,0xe2, 0xd1,0xb3, 0xd2,0xf3, 0xc6,0xf8, 0xd1,0xf5, 0xb0,0xb1, 0xba,0xa4, 0xeb,0xb3, 0xcc,0xa9, 0xc0,0xcb, 0xcc,0xe9, 0xcf,0xfb, 0xe3,0xfe, 0xc6,0xd6, 0xbd,0xfe, 0xba,0xa3, 0xd5,0xe3, 0xe4,0xb8, 0xc0,0xef, 0xc9,0xe6, 0xb8,0xa1, 0xbf,0xa3, 0xd4,0xa1, 0xba,0xc6, 0xd3,0xbf, 0xa1,0xf5, 0xe4,0xa4, 0xc4,0xf9, 0xa1,0xf5, 0xe4,0xb9, 0xec,0xc8, 0xba,0xe6, 0xbf,0xbe, 0xc0,0xd3, 0xc1,0xd2, 0xce,0xda, 0xb5,0xf9, 0xcc,0xd8, 0xc0,0xc7, 0xcf,0xc1, 0xb1,0xb7, 0xc0,0xea, 0xe1,0xfa, 0xd7,0xc8, 0xb0,0xe0, 0xc1,0xf0, 0xc5,0xe5, 0xd6,0xe9, 0xb9,0xe7, 0xe7,0xf3, 0xc5,0xcf, 0xc4,0xb6, 0xd0,0xf3, 0xdb,0xce, 0xc1,0xf4, 0xbc,0xb2, 0xb2,0xa1, 0xd6,0xa2, 0xc6,0xa3, 0xf0,0xe1, 0xbe,0xd2, 0xcc,0xdb, 0xd5,0xee, 0xf0,0xe8, 0xf0,0xe3, 0xb8,0xde, 0xf0,0xe5, 0xd2,0xe6, 0xee,0xc1, 0xb0,0xbb, 0xd1,0xa3, 0xd5,0xe6, 0xc3,0xdf, 0xd5,0xa3, 0xbe,0xd8, 0xc5,0xe9, 0xd5,0xe8, 0xd4,0xd2, 0xed,0xc0, 0xc6,0xc6, 0xc9,0xe9, 0xed,0xc6, 0xed,0xbe, 0xa1,0xf5, 0xed,0xc4, 0xc5,0xda, 0xc3,0xd8, 0xd3,0xd3, 0xec,0xf4, 0xcb,0xee, 0xd7,0xe6, 0xc9,0xf1, 0xd7,0xa3, 0xec,0xf3, 0xec,0xf1, 0xb3,0xd3, 0xef,0xf7, 0xd1,0xed, 0xd7,0xe2, 0xc7,0xd8, 0xd6,0xc8, 0xc3,0xd8, 0xd5,0xad, 0xf1,0xba, 0xd5,0xbe, 0xb0,0xca, 0xd0,0xa6, 0xb7,0xdb, 0xb7,0xc4, 0xc9,0xb4, 0xce,0xc6, 0xce,0xc9, 0xcb,0xd8, 0xcb,0xf7, 0xb4,0xbf, 0xc5,0xa6, 0xe7,0xa2, 0xbc,0xb6, 0xe7,0xa1, 0xc4,0xc9, 0xd6,0xbd, 0xb7,0xd7, 0xc8,0xb1, 0xee,0xb9, 0xb8,0xe1, 0xb3,0xe1, 0xce,0xcc, 0xea,0xc8, 0xd4,0xc5, 0xb8,0xfb, 0xb0,0xd2, 0xba,0xc4, 0xb5,0xa2, 0xb9,0xa2, 0xeb,0xd7, 0xd6,0xac, 0xd2,0xc8, 0xd0,0xb2, 0xeb,0xd9, 0xeb,0xd8, 0xb4,0xe0, 0xd0,0xd8, 0xb8,0xec, 0xc2,0xf6, 0xc4,0xdc, 0xbc,0xb9, 0xeb,0xdd, 0xbf,0xe8, 0xb3,0xf4, 0xf4,0xab, 0xd2,0xa8, 0xf3,0xc2, 0xba,0xbd, 0xf4,0xb3, 0xf4,0xb2, 0xb0,0xe3, 0xdb,0xbb, 0xc3,0xa3, 0xbb,0xc4, 0xc0,0xf3, 0xbe,0xa3, 0xc8,0xd7, 0xbc,0xf6, 0xb2,0xdd, 0xd2,0xf0, 0xdc,0xee, 0xdc,0xf3, 0xd7,0xc8, 0xc8,0xe3, 0xb2,0xe8, 0xdc,0xf8, 0xdc,0xf7, 0xdc,0xef, 0xb4,0xc4, 0xdc,0xf5, 0xf2,0xaf, 0xce,0xc3, 0xf2,0xbd, 0xf2,0xbe, 0xd4,0xe9, 0xf2,0xbf, 0xb0,0xf6, 0xf2,0xbc, 0xd1,0xc1, 0xcb,0xa5, 0xd6,0xd4, 0xd4,0xac, 0xf1,0xc7, 0xf1,0xc5, 0xd6,0xbb, 0xbc,0xc7, 0xda,0xa6, 0xcc,0xd6, 0xda,0xa7, 0xda,0xa8, 0xd1,0xb6, 0xcd,0xd0, 0xd1,0xb5, 0xc6,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xf1, 0xb2,0xf2, 0xb1,0xaa, 0xb2,0xc6, 0xb9,0xb1, 0xc6,0xf0, 0xb9,0xaa, 0xd0,0xf9, 0xe9,0xed, 0xa1,0xf5, 0xc8,0xe8, 0xcb,0xcd, 0xc4,0xe6, 0xc3,0xd4, 0xcd,0xcb, 0xc4,0xcb, 0xbb,0xd8, 0xcc,0xd3, 0xd7,0xb7, 0xe5,0xcb, 0xb1,0xc5, 0xe7,0xdf, 0xbf,0xa4, 0xba,0xc2, 0xdb,0xab, 0xbe,0xc6, 0xc5,0xe4, 0xd7,0xc3, 0xb6,0xa4, 0xd5,0xeb, 0xee,0xc8, 0xb8,0xaa, 0xee,0xc7, 0xc9,0xc1, 0xd4,0xba, 0xd5,0xf3, 0xb6,0xb8, 0xb1,0xdd, 0xc9,0xc2, 0xb3,0xfd, 0xda,0xea, 0xc9,0xfd, 0xd6,0xbb, 0xbc,0xa2, 0xc2,0xed, 0xb9,0xc7, 0xb8,0xdf, 0xb6,0xb7, 0xd8,0xaa, 0xb9,0xed, 0xc7,0xac, 0xa1,0xf5, 0xce,0xb1, 0xcd,0xa3, 0xbc,0xd9, 0xd9,0xc8, 0xd9,0xbc, 0xd7,0xf6, 0xce,0xb0, 0xbd,0xa1, 0xc5,0xbc, 0xd9,0xcb, 0xd9,0xc9, 0xd5,0xec, 0xb2,0xe0, 0xcd,0xb5, 0xc6,0xab, 0xd9,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xb5, 0xc3,0xe1, 0xbb,0xcb, 0xbc,0xf4, 0xb8,0xb1, 0xc0,0xd5, 0xce,0xf1, 0xbf,0xb1, 0xb6,0xaf, 0xd9,0xeb, 0xde,0xcb, 0xb3,0xd7, 0xc4,0xe4, 0xc7,0xf8, 0xd8,0xd2, 0xb2,0xce, 0xc2,0xfc, 0xc9,0xcc, 0xc5,0xbe, 0xc0,0xb2, 0xd7,0xc4, 0xd1,0xc6, 0xb7,0xc8, 0xbf,0xd0, 0xb0,0xa1, 0xb3,0xaa, 0xe0,0xa2, 0xce,0xca, 0xdf,0xfb, 0xce,0xa8, 0xc6,0xa1, 0xc4,0xee, 0xca,0xdb, 0xe0,0xa8, 0xbb,0xa3, 0xcf,0xce, 0xe0,0xa6, 0xdf,0xfa, 0xa1,0xf5, 0xc8,0xa6, 0xb9,0xfa, 0xe0,0xf6, 0xd3,0xf2, 0xbc,0xe1, 0xdb,0xd1, 0xb6,0xd1, 0xb2,0xba, 0xdb,0xfd, 0xbb,0xf9, 0xcc,0xc3, 0xb6,0xc2, 0xd6,0xb4, 0xc5,0xe0, 0xb9,0xbb, 0xc9,0xdd, 0xc8,0xa2, 0xc2,0xa6, 0xcd,0xf1, 0xb8,0xbe, 0xc0,0xb7, 0xe6,0xb9, 0xe6,0xbd, 0xe6,0xbe, 0xbb,0xe9, 0xc6,0xc5, 0xe6,0xbb, 0xca,0xeb, 0xbf,0xdc, 0xd2,0xfa, 0xbc,0xc4, 0xbc,0xc5, 0xcb,0xde, 0xc3,0xdc, 0xce,0xbe, 0xd7,0xa8, 0xbd,0xab, 0xcd,0xc0, 0xcc,0xeb, 0xa1,0xf5, 0xb3,0xe7, 0xe1,0xc7, 0xc6,0xe9, 0xe1,0xc8, 0xd1,0xc2, 0xe1,0xbf, 0xc0,0xa5, 0xb1,0xc0, 0xb4,0xde, 0xc2,0xd8, 0xe1,0xc5, 0xe1,0xc2, 0xb8,0xda, 0xb3,0xb2, 0xb3,0xa3, 0xb4,0xf8, 0xd5,0xca, 0xe1,0xa1, 0xbf,0xb5, 0xd3,0xb9, 0xca,0xfc, 0xe2,0xd6, 0xe2,0xd7, 0xd5,0xc5, 0xc7,0xbf, 0xe5,0xe7, 0xb1,0xf2, 0xb2,0xca, 0xb5,0xf1, 0xb5,0xc3, 0xe1,0xe3, 0xb4,0xd3, 0xc5,0xc7, 0xd3,0xf9, 0xe1,0xe2, 0xe1,0xe4, 0xd3,0xc1, 0xbb,0xbc, 0xcf,0xa4, 0xd3,0xc6, 0xc4,0xfa, 0xcd,0xef, 0xe3,0xb2, 0xb5,0xeb, 0xc6,0xe0, 0xc7,0xe9, 0xe3,0xac, 0xe2,0xea, 0xcf,0xa7, 0xb5,0xbf, 0xe3,0xaf, 0xcc,0xe8, 0xe3,0xb0, 0xce,0xa9, 0xbc,0xc2, 0xe3,0xb1, 0xb6,0xd8, 0xc6,0xdd, 0xea,0xa9, 0xec,0xe8, 0xc2,0xd3, 0xbf,0xd8, 0xbe,0xed, 0xd2,0xb4, 0xcc,0xbd, 0xbd,0xd3, 0xbd,0xdd, 0xc5,0xf5, 0xbe,0xf2, 0xb4,0xeb, 0xde,0xdf, 0xd1,0xda, 0xb5,0xf4, 0xc9,0xa8, 0xb9,0xd2, 0xde,0xd1, 0xcd,0xc6, 0xc2,0xd5, 0xca,0xda, 0xd5,0xf5, 0xb2,0xc9, 0xde,0xe4, 0xc5,0xc5, 0xcc,0xcd, 0xcf,0xc6, 0xc4,0xed, 0xde,0xe6, 0xc9,0xe1, 0xde,0xe0, 0xb1,0xd6, 0xb0,0xbd, 0xbe,0xc8, 0xbd,0xcc, 0xb0,0xdc, 0xc6,0xf4, 0xc3,0xf4, 0xd0,0xf0, 0xeb,0xb7, 0xa1,0xf5, 0xd0,0xb1, 0xf5,0xfa, 0xd5,0xb6, 0xd7,0xe5, 0xd0,0xfd, 0xec,0xba, 0xec,0xbb, 0xd6,0xe7, 0xcd,0xed, 0xce,0xee, 0xb3,0xbf, 0xbb,0xde, 0xa1,0xf5, 0xb2,0xdc, 0xa1,0xf5, 0xcd,0xfb, 0xc1,0xba, 0xcc,0xdd, 0xc9,0xd2, 0xe8,0xf7, 0xe8,0xf3, 0xb8,0xcb, 0xcd,0xb0, 0xc0,0xa6, 0xce,0xe0, 0xb9,0xa3, 0xd0,0xb5, 0xe8,0xe8, 0xc6,0xfa, 0xcb,0xf3, 0xb0,0xf0, 0xc3,0xb7, 0xe8,0xd9, 0xcc,0xf5, 0xc0,0xe6, 0xe8,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xd3,0xfb, 0xc9,0xb1, 0xba,0xc1, 0xc7,0xf2, 0xc7,0xe2, 0xcf,0xd1, 0xc1,0xb9, 0xb4,0xbe, 0xe4,0xc8, 0xd2,0xba, 0xb5,0xad, 0xcc,0xca, 0xd3,0xd9, 0xcc,0xed, 0xc7,0xb3, 0xc7,0xe5, 0xe4,0xbf, 0xc1,0xdc, 0xd1,0xc4, 0xca,0xe7, 0xe4,0xcc, 0xe4,0xc1, 0xd1,0xcd, 0xba,0xd4, 0xbb,0xec, 0xd4,0xa8, 0xe4,0xc0, 0xc6,0xe0, 0xe4,0xbe, 0xba,0xad, 0xc0,0xe1, 0xd2,0xf9, 0xcc,0xd4, 0xc2,0xd9, 0xc9,0xee, 0xbb,0xb4, 0xbe,0xbb, 0xcf,0xfd, 0xd7,0xcd, 0xb8,0xa2, 0xb4,0xe3, 0xe4,0xc3, 0xe4,0xc6, 0xc5,0xeb, 0xd1,0xc9, 0xba,0xb8, 0xb7,0xe9, 0xcf,0xa9, 0xcb,0xac, 0xc7,0xa3, 0xc0,0xe7, 0xb2,0xc2, 0xc3,0xcd, 0xb2,0xfe, 0xe2,0xa3, 0xd5,0xf8, 0xc2,0xca, 0xc0,0xc5, 0xe7,0xf0, 0xc7,0xf2, 0xc0,0xed, 0xcf,0xd6, 0xa1,0xf5, 0xf0,0xad, 0xc6,0xbf, 0xb4,0xc9, 0xcc,0xf0, 0xb2,0xfa, 0xc2,0xd4, 0xc6,0xe8, 0xb1,0xcf, 0xd2,0xec, 0xca,0xe8, 0xd6,0xcc, 0xba,0xdb, 0xb4,0xc3, 0xc8,0xac, 0xf0,0xea, 0xf0,0xa8, 0xbf,0xf8, 0xba,0xd0, 0xca,0xa2, 0xbe,0xec, 0xd6,0xda, 0xd1,0xdb, 0xbf,0xf4, 0xed,0xf8, 0xcc,0xf7, 0xc1,0xf2, 0xd6,0xec, 0xed,0xca, 0xcf,0xe9, 0xc6,0xb1, 0xbc,0xc0, 0xd2,0xc6, 0xd6,0xcf, 0xf1,0xbb, 0xf3,0xd2, 0xb1,0xbf, 0xb5,0xd1, 0xb5,0xda, 0xb7,0xfb, 0xf3,0xcf, 0xf3,0xd7, 0xf3,0xd0, 0xc1,0xa3, 0xb4,0xd6, 0xc6,0xc9, 0xb0,0xed, 0xcf,0xd2, 0xcd,0xb3, 0xd4,0xfa, 0xc9,0xdc, 0xe7,0xa8, 0xe7,0xa9, 0xcf,0xb8, 0xc9,0xf0, 0xd7,0xe9, 0xc0,0xdb, 0xd6,0xd5, 0xe7,0xa5, 0xe7,0xa6, 0xb2,0xa7, 0xd0,0xdf, 0xc1,0xe7, 0xd2,0xee, 0xf4,0xe1, 0xcf,0xb0, 0xf1,0xea, 0xc1,0xc4, 0xf1,0xf6, 0xb8,0xac, 0xb2,0xb1, 0xb4,0xbd, 0xcd,0xd1, 0xd0,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xa9, 0xb6,0xe6, 0xcf,0xcf, 0xb2,0xb0, 0xb4,0xac, 0xc9,0xaf, 0xdd,0xb8, 0xdd,0xb7, 0xdd,0xa9, 0xbc,0xd4, 0xbe,0xa5, 0xc3,0xa7, 0xc4,0xaa, 0xdc,0xec, 0xd7,0xaf, 0xdd,0xae, 0xc0,0xf2, 0xdd,0xac, 0xba,0xc9, 0xdd,0xb6, 0xdd,0xb1, 0xc6,0xce, 0xdc,0xc8, 0xb4,0xa6, 0xb1,0xeb, 0xc9,0xdf, 0xd6,0xfb, 0xf2,0xc0, 0xf2,0xc1, 0xf2,0xc2, 0xc7,0xf9, 0xb5,0xb0, 0xf2,0xc6, 0xf2,0xc7, 0xf2,0xc8, 0xca,0xf5, 0xd9,0xf2, 0xf4,0xc2, 0xb1,0xbb, 0xcc,0xbb, 0xd0,0xe4, 0xc5,0xdb, 0xb4,0xfc, 0xc3,0xd9, 0xb9,0xe6, 0xb7,0xc3, 0xd1,0xc8, 0xbe,0xf7, 0xda,0xab, 0xd0,0xed, 0xc9,0xe8, 0xcb,0xcf, 0xb6,0xef, 0xd0,0xc0, 0xf4,0xf9, 0xeb,0xe0, 0xb7,0xb7, 0xd4,0xf0, 0xb9,0xe1, 0xbb,0xf5, 0xcc,0xb0, 0xc6,0xb6, 0xf4,0xf6, 0xc9,0xe2, 0xd6,0xba, 0xf5,0xc3, 0xe9,0xee, 0xc8,0xed, 0xd5,0xe2, 0xe5,0xd0, 0xcd,0xa8, 0xb6,0xba, 0xc1,0xac, 0xcb,0xd9, 0xca,0xc5, 0xd6,0xf0, 0xe5,0xc9, 0xb3,0xd1, 0xd4,0xec, 0xcd,0xb8, 0xb7,0xea, 0xe5,0xd1, 0xb9,0xe4, 0xcd,0xbe, 0xb2,0xbf, 0xb9,0xf9, 0xb6,0xbc, 0xd0,0xef, 0xd2,0xb0, 0xee,0xce, 0xbf,0xdb, 0xb5,0xf6, 0xee,0xcb, 0xa1,0xf5, 0xb7,0xb0, 0xb1,0xd5, 0xc5,0xe3, 0xc1,0xea, 0xb3,0xc2, 0xc2,0xbd, 0xd2,0xf5, 0xda,0xf0, 0xcc,0xd5, 0xcf,0xdd, 0xda,0xee, 0xc8,0xb8, 0xd1,0xa9, 0xf6,0xa7, 0xd5,0xc2, 0xbe,0xb9, 0xb6,0xa5, 0xc7,0xea, 0xd3,0xe3, 0xc4,0xf1, 0xc2,0xb1, 0xc2,0xb9, 0xc2,0xf3, 0xc2,0xe9, 0xbc,0xd2, 0xb0,0xf8, 0xb8,0xb5, 0xb1,0xb8, 0xbd,0xdc, 0xbf,0xfe, 0xd8,0xf7, 0xc9,0xa1, 0xd0,0xa7, 0xd7,0xee, 0xbf,0xad, 0xb8,0xee, 0xd8,0xdc, 0xb4,0xb4, 0xca,0xa3, 0xc0,0xcd, 0xca,0xa4, 0xd1,0xab, 0xb2,0xa9, 0xd8,0xca, 0xe0,0xb4, 0xbf,0xa6, 0xd0,0xfa, 0xcc,0xe4, 0xba,0xb0, 0xba,0xc8, 0xb4,0xad, 0xce,0xb9, 0xcf,0xb2, 0xc9,0xa5, 0xe0,0xb8, 0xc0,0xae, 0xe0,0xa9, 0xe0,0xab, 0xd4,0xfb, 0xb5,0xa5, 0xe0,0xb0, 0xcd,0xd9, 0xd3,0xb4, 0xbb,0xbd, 0xd3,0xf7, 0xc7,0xc7, 0xe0,0xac, 0xe0,0xb1, 0xba,0xed, 0xa1,0xf5, 0xe0,0xb9, 0xce,0xa7, 0xd2,0xa2, 0xbf,0xb0, 0xb3,0xa1, 0xb5,0xcc, 0xd1,0xdf, 0xb1,0xa8, 0xb1,0xa4, 0xdb,0xf6, 0xdc,0xa9, 0xd2,0xbc, 0xba,0xf8, 0xb5,0xec, 0xe6,0xc3, 0xc3,0xc4, 0xd0,0xf6, 0xc3,0xbd, 0xe6,0xc2, 0xe6,0xb4, 0xe6,0xdc, 0xe5,0xee, 0xba,0xae, 0xb8,0xbb, 0xd4,0xa2, 0xc3,0xc2, 0xd7,0xf0, 0xd1,0xb0, 0xbe,0xcd, 0xc7,0xb6, 0xe1,0xb0, 0xe1,0xcb, 0xef,0xfa, 0xd9,0xe3, 0xb7,0xf9, 0xc3,0xb1, 0xd6,0xa1, 0xe0,0xf8, 0xbc,0xb8, 0xc0,0xc8, 0xb2,0xde, 0xcf,0xe1, 0xbe,0xc7, 0xe5,0xf6, 0xc5,0xed, 0xb8,0xb4, 0xd1,0xad, 0xe1,0xe5, 0xbb,0xf3, 0xb6,0xf1, 0xb1,0xaf, 0xc3,0xc6, 0xbb,0xdd, 0xe3,0xab, 0xe3,0xb6, 0xd0,0xca, 0xe3,0xb5, 0xb6,0xe8, 0xe2,0xfc, 0xe3,0xb7, 0xbf,0xae, 0xc4,0xd5, 0xe3,0xb9, 0xbb,0xcc, 0xd3,0xe4, 0xe3,0xb8, 0xa1,0xf5, 0xea,0xaa, 0xec,0xe9, 0xb3,0xb8, 0xd5,0xc6, 0xc3,0xe8, 0xbc,0xf0, 0xbf,0xab, 0xc8,0xe0, 0xde,0xf1, 0xd7,0xe1, 0xb2,0xe5, 0xb4,0xa7, 0xcc,0xe1, 0xce,0xd5, 0xd2,0xbe, 0xbd,0xd2, 0xbb,0xd3, 0xb4,0xb7, 0xd4,0xae, 0xbe,0xbe, 0xbb,0xbb, 0xde,0xf0, 0xd1,0xef, 0xb1,0xb3, 0xb3,0xa8, 0xb6,0xd8, 0xb8,0xd2, 0xc9,0xa2, 0xb0,0xdf, 0xec,0xb3, 0xcb,0xb9, 0xc6,0xd5, 0xce,0xfa, 0xc7,0xe7, 0xbe,0xa7, 0xbe,0xb0, 0xca,0xee, 0xd6,0xc7, 0xc1,0xc0, 0xea,0xd0, 0xd4,0xf8, 0xcc,0xe6, 0xc6,0xda, 0xb3,0xaf, 0xb9,0xd7, 0xd7,0xd8, 0xcc,0xc4, 0xbc,0xac, 0xd4,0xe6, 0xd2,0xce, 0xb6,0xb0, 0xbf,0xc3, 0xc9,0xad, 0xd5,0xbb, 0xe8,0xfe, 0xb0,0xf4, 0xc6,0xdc, 0xe9,0xa6, 0xc6,0xe5, 0xb9,0xf7, 0xd6,0xb2, 0xbd,0xb7, 0xd7,0xb5, 0xc3,0xde, 0xc5,0xef, 0xe8,0xfa, 0xa1,0xf5, 0xbf,0xee, 0xc6,0xdb, 0xc7,0xd5, 0xb2,0xd0, 0xd6,0xb3, 0xbf,0xc7, 0xcc,0xba, 0xb5,0xaa, 0xc2,0xc8, 0xeb,0xb2, 0xb8,0xdb, 0xd3,0xce, 0xe4,0xd5, 0xb6,0xc9, 0xe4,0xd6, 0xd3,0xbf, 0xb4,0xd5, 0xc7,0xfe, 0xe4,0xd7, 0xd4,0xfc, 0xbc,0xf5, 0xd5,0xbf, 0xcf,0xe6, 0xb2,0xb3, 0xba,0xfe, 0xe4,0xce, 0xce,0xbc, 0xce,0xd0, 0xcc,0xc0, 0xbf,0xca, 0xcd,0xc4, 0xc3,0xec, 0xb2,0xe2, 0xc5,0xc8, 0xd3,0xe5, 0xbb,0xeb, 0xd7,0xcc, 0xb8,0xc8, 0xbb,0xc1, 0xe4,0xcf, 0xe3,0xfd, 0xe4,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xd2, 0xb1,0xba, 0xb7,0xd9, 0xbd,0xb9, 0xd1,0xe6, 0xce,0xde, 0xc8,0xbb, 0xd6,0xf3, 0xa1,0xf5, 0xc5,0xc6, 0xea,0xf7, 0xcf,0xac, 0xd3,0xcc, 0xe2,0xab, 0xba,0xef, 0xd0,0xc9, 0xb7,0xa9, 0xe7,0xf7, 0xc1,0xd5, 0xd7,0xc1, 0xe7,0xfa, 0xc5,0xfd, 0xc5,0xc3, 0xc7,0xd9, 0xa1,0xf5, 0xe8,0xa1, 0xe7,0xf9, 0xe7,0xfb, 0xc9,0xfb, 0xcb,0xd5, 0xbb,0xad, 0xb7,0xac, 0xc1,0xa1, 0xcd,0xb4, 0xf0,0xeb, 0xbe,0xb7, 0xb6,0xbb, 0xc6,0xa6, 0xa1,0xf5, 0xb5,0xc7, 0xb7,0xa2, 0xcd,0xee, 0xf0,0xa9, 0xf1,0xe5, 0xb5,0xc1, 0xc0,0xa7, 0xb6,0xcc, 0xcf,0xf5, 0xd3,0xb2, 0xd1,0xe2, 0xc9,0xd4, 0xb8,0xd1, 0xb3,0xcc, 0xcb,0xb0, 0xcf,0xa1, 0xbe,0xbd, 0xb4,0xb0, 0xbd,0xd1, 0xcd,0xaf, 0xbf,0xa2, 0xb5,0xc8, 0xb2,0xdf, 0xb1,0xca, 0xbf,0xf0, 0xcd,0xb2, 0xb4,0xf0, 0xcb,0xf1, 0xbd,0xee, 0xb7,0xa4, 0xd6,0xfe, 0xcb,0xda, 0xd6,0xe0, 0xbd,0xca, 0xbd,0xe1, 0xc8,0xde, 0xbe,0xf8, 0xd7,0xcf, 0xd0,0xf5, 0xcb,0xbf, 0xc2,0xe7, 0xb8,0xf8, 0xd1,0xa4, 0xa1,0xf5, 0xe7,0xad, 0xc9,0xc6, 0xcf,0xe8, 0xf4,0xe2, 0xf1,0xf3, 0xf1,0xf8, 0xcb,0xe0, 0xcd,0xf3, 0xc7,0xbb, 0xd2,0xb8, 0xb8,0xad, 0xc9,0xf6, 0xd5,0xcd, 0xcc,0xf3, 0xc6,0xa2, 0xeb,0xe7, 0xeb,0xe8, 0xeb,0xe9, 0xca,0xe6, 0xcb,0xb4, 0xc6,0xd0, 0xdd,0xcd, 0xdd,0xce, 0xc6,0xbc, 0xb2,0xa4, 0xdd,0xd1, 0xdd,0xc2, 0xdd,0xbc, 0xbb,0xaa, 0xc1,0xe2, 0xa1,0xf5, 0xd6,0xf8, 0xc0,0xb3, 0xdd,0xd4, 0xc3,0xc8, 0xbe,0xfa, 0xdd,0xc4, 0xb7,0xc6, 0xbe,0xd5, 0xdd,0xc7, 0xce,0xae, 0xcc,0xd1, 0xb2,0xcb, 0xdc,0xc9, 0xdd,0xca, 0xdd,0xcb, 0xd0,0xe9, 0xf2,0xd4, 0xcd,0xdc, 0xf2,0xce, 0xbb,0xd7, 0xd6,0xeb, 0xb8,0xf2, 0xf2,0xd0, 0xf2,0xd2, 0xbd,0xd6, 0xb2,0xc3, 0xc1,0xd1, 0xb8,0xa4, 0xf1,0xfb, 0xca,0xd3, 0xd7,0xa2, 0xd3,0xbd, 0xc6,0xc0, 0xb4,0xca, 0xd6,0xa4, 0xda,0xac, 0xda,0xb0, 0xd7,0xe7, 0xd5,0xa9, 0xda,0xae, 0xcb,0xdf, 0xd5,0xef, 0xda,0xad, 0xa1,0xf5, 0xcf,0xf3, 0xf5,0xf5, 0xd6,0xfc, 0xcc,0xf9, 0xb7,0xa1, 0xea,0xdd, 0xea,0xda, 0xb7,0xd1, 0xba,0xd8, 0xb9,0xf3, 0xc2,0xf2, 0xb1,0xe1, 0xc3,0xb3, 0xb4,0xfb, 0xd4,0xbd, 0xb3,0xac, 0xb3,0xc3, 0xf5,0xc9, 0xbe,0xe0, 0xb0,0xcf, 0xf5,0xc7, 0xc5,0xdc, 0xb5,0xf8, 0xf5,0xcb, 0xf5,0xcc, 0xe9,0xf0, 0xd6,0xe1, 0xe9,0xf3, 0xb9,0xbc, 0xb4,0xfe, 0xe5,0xd3, 0xd6,0xdc, 0xd2,0xdd, 0xbd,0xf8, 0xe5,0xd4, 0xb6,0xf5, 0xd3,0xca, 0xcf,0xe7, 0xdb,0xb1, 0xba,0xa8, 0xcb,0xd6, 0xc1,0xbf, 0xb3,0xae, 0xc5,0xa5, 0xb8,0xc6, 0xc4,0xc6, 0xbe,0xfb, 0xb6,0xdb, 0xee,0xd4, 0xa1,0xf5, 0xee,0xd3, 0xe3,0xc9, 0xc8,0xf2, 0xbf,0xaa, 0xcf,0xd0, 0xbc,0xe4, 0xcf,0xd0, 0xe3,0xc8, 0xb6,0xd3, 0xbd,0xd7, 0xcb,0xe5, 0xd1,0xf4, 0xd3,0xe7, 0xc2,0xa1, 0xda,0xf2, 0xda,0xef, 0xb5,0xcc, 0xd1,0xe3, 0xd1,0xc5, 0xd0,0xdb, 0xbc,0xaf, 0xb9,0xcd, 0xf6,0xa9, 0xd4,0xc6, 0xc8,0xcd, 0xcf,0xee, 0xcb,0xb3, 0xd0,0xeb, 0xe2,0xb8, 0xe2,0xbf, 0xb7,0xb9, 0xe2,0xbd, 0xd2,0xfb, 0xe2,0xc1, 0xb7,0xeb, 0xd4,0xa6, 0xbb,0xc6, 0xca,0xf2, 0xba,0xda, 0xc2,0xd2, 0xd3,0xb6, 0xd5,0xae, 0xb0,0xc1, 0xb4,0xab, 0xbd,0xf6, 0xc7,0xe3, 0xb4,0xdf, 0xc9,0xcb, 0xc9,0xb5, 0xd9,0xcc, 0xa1,0xf5, 0xbd,0xcb, 0xb2,0xf9, 0xd8,0xe2, 0xc4,0xbc, 0xbd,0xcb, 0xc7,0xda, 0xca,0xc6, 0xbc,0xa8, 0xbb,0xe3, 0xe0,0xb5, 0xe0,0xcb, 0xc9,0xa4, 0xe0,0xc2, 0xc2,0xf0, 0xca,0xc8, 0xd8,0xc4, 0xe0,0xbe, 0xcb,0xc3, 0xe0,0xcd, 0xe0,0xc5, 0xce,0xd8, 0xce,0xcb, 0xd0,0xe1, 0xc7,0xba, 0xe0,0xc6, 0xe0,0xbc, 0xd4,0xb0, 0xd4,0xb2, 0xc8,0xfb, 0xcb,0xdc, 0xcc,0xc1, 0xcd,0xbf, 0xda,0xa3, 0xcb,0xfe, 0xcc,0xee, 0xcb,0xfa, 0xce,0xc1, 0xbf,0xe9, 0xce,0xeb, 0xdb,0xf5, 0xdc,0xe3, 0xb0,0xc2, 0xbc,0xde, 0xbc,0xb5, 0xcf,0xd3, 0xe6,0xc5, 0xc2,0xe8, 0xe6,0xc1, 0xcf,0xb1, 0xc9,0xa9, 0xe6,0xc7, 0xe1,0xd4, 0xe1,0xcf, 0xbb,0xcf, 0xb8,0xc9, 0xc1,0xae, 0xcf,0xc3, 0xdf,0xb1, 0xbb,0xe3, 0xc5,0xd4, 0xce,0xa2, 0xd3,0xde, 0xd2,0xe2, 0xb4,0xc8, 0xb8,0xd0, 0xcf,0xeb, 0xb0,0xae, 0xc8,0xc7, 0xb3,0xee, 0xd3,0xfa, 0xc9,0xf7, 0xbb,0xc5, 0xc0,0xf5, 0xe3,0xb3, 0xe2,0xe9, 0xe2,0xeb, 0xc0,0xa2, 0xed,0xaa, 0xed,0xa9, 0xe2,0xfd, 0xea,0xac, 0xea,0xab, 0xb4,0xea, 0xd5,0xa5, 0xb8,0xe3, 0xcc,0xc2, 0xb4,0xee, 0xb2,0xeb, 0xb0,0xe1, 0xb2,0xab, 0xcb,0xd1, 0xc9,0xa6, 0xcb,0xf0, 0xc7,0xc0, 0xd2,0xa1, 0xb5,0xb7, 0xb9,0xb9, 0xbe,0xb4, 0xd5,0xe5, 0xd0,0xc2, 0xb0,0xb5, 0xea,0xcd, 0xcf,0xbe, 0xd4,0xce, 0xc5,0xaf, 0xea,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xbb,0xe1, 0xc0,0xc6, 0xd2,0xb5, 0xb3,0xfe, 0xbf,0xac, 0xe9,0xaa, 0xd0,0xa8, 0xbc,0xab, 0xd2,0xac, 0xb8,0xc5, 0xd1,0xee, 0xe8,0xe5, 0xe9,0xae, 0xc0,0xe3, 0xb7,0xe3, 0xe9,0xba, 0xd3,0xdc, 0xe9,0xac, 0xe9,0xb9, 0xa1,0xf5, 0xd0,0xaa, 0xcb,0xea, 0xbb,0xd9, 0xb5,0xee, 0xd8,0xb9, 0xeb,0xa6, 0xd2,0xe7, 0xcb,0xdd, 0xd7,0xd2, 0xc8,0xdc, 0xe4,0xe8, 0xd4,0xb4, 0xb9,0xb5, 0xb5,0xe1, 0xc3,0xf0, 0xe4,0xdf, 0xe4,0xdb, 0xca,0xaa, 0xc4,0xe7, 0xce,0xc2, 0xbb,0xac, 0xd7,0xbc, 0xc1,0xef, 0xb2,0xd7, 0xcc,0xcf, 0xcf,0xaa, 0xe4,0xe0, 0xe4,0xe5, 0xbc,0xe5, 0xd1,0xcc, 0xb7,0xb3, 0xc3,0xba, 0xc1,0xb6, 0xd5,0xd5, 0xec,0xcf, 0xec,0xbe, 0xec,0xe3, 0xbb,0xcd, 0xbb,0xc0, 0xc9,0xb7, 0xcf,0xba, 0xec,0xd0, 0xa1,0xf5, 0xd2,0xaf, 0xeb,0xba, 0xe9,0xe0, 0xca,0xa8, 0xd4,0xb3, 0xbb,0xab, 0xc0,0xc5, 0xba,0xf7, 0xe8,0xa6, 0xc9,0xaa, 0xc8,0xf0, 0xe8,0xa3, 0xe7,0xf5, 0xe8,0xa7, 0xe7,0xf8, 0xe8,0xa4, 0xb5,0xb1, 0xbb,0xfb, 0xf0,0xf6, 0xcc,0xb5, 0xb4,0xe1, 0xc2,0xe9, 0xf0,0xf2, 0xb1,0xd4, 0xf0,0xf4, 0xb3,0xd5, 0xc2,0xe9, 0xd5,0xb5, 0xc3,0xcb, 0xbe,0xa6, 0xbd,0xde, 0xc4,0xc0, 0xed,0xf9, 0xb6,0xbd, 0xb6,0xc3, 0xd8,0xba, 0xb2,0xc7, 0xd5,0xf6, 0xee,0xa2, 0xed,0xfe, 0xee,0xa1, 0xb0,0xab, 0xcb,0xe9, 0xc5,0xf6, 0xcd,0xeb, 0xb5,0xe2, 0xc2,0xb5, 0xb5,0xef, 0xc5,0xf0, 0xb1,0xae, 0xed,0xd4, 0xa1,0xf5, 0xec,0xf7, 0xc2,0xbb, 0xbd,0xfb, 0xcd,0xf2, 0xc7,0xdd, 0xc0,0xe2, 0xd6,0xc9, 0xb3,0xed, 0xef,0xfe, 0xd9,0xf7, 0xef,0xfd, 0xbf,0xdf, 0xf1,0xbd, 0xbf,0xea, 0xbd,0xda, 0xf3,0xde, 0xf3,0xdf, 0xf3,0xc8, 0xc1,0xbb, 0xbe,0xac, 0xd4,0xc1, 0xbe,0xad, 0xbe,0xee, 0xc0,0xa7, 0xb0,0xf3, 0xcb,0xe7, 0xcc,0xd0, 0xd6,0xc3, 0xd5,0xd6, 0xd7,0xef, 0xca,0xf0, 0xd2,0xe5, 0xcf,0xdb, 0xc8,0xba, 0xca,0xa5, 0xc6,0xb8, 0xcb,0xc1, 0xd2,0xde, 0xeb,0xec, 0xd1,0xfc, 0xb3,0xa6, 0xd0,0xc8, 0xc8,0xf9, 0xbd,0xc5, 0xd6,0xd7, 0xb8,0xb9, 0xcf,0xd9, 0xc4,0xd4, 0xbe,0xcb, 0xcd,0xa7, 0xb5,0xd9, 0xbb,0xe7, 0xc2,0xe4, 0xdd,0xe6, 0xbf,0xfb, 0xce,0xad, 0xba,0xf9, 0xd2,0xb6, 0xd4,0xe1, 0xb8,0xf0, 0xdd,0xe0, 0xdd,0xab, 0xc6,0xcf, 0xb6,0xad, 0xdd,0xe2, 0xdd,0xe7, 0xdd,0xe1, 0xd3,0xdd, 0xc2,0xb2, 0xba,0xc5, 0xd3,0xbc, 0xf2,0xd1, 0xf2,0xda, 0xf2,0xd8, 0xca,0xf1, 0xb6,0xea, 0xcd,0xc9, 0xb7,0xe4, 0xf2,0xd7, 0xf2,0xb9, 0xf2,0xdb, 0xd1,0xc3, 0xf4,0xc4, 0xd2,0xe1, 0xc8,0xb9, 0xb2,0xb9, 0xf4,0xc3, 0xd7,0xb0, 0xc0,0xef, 0xf4,0xc1, 0xd4,0xa3, 0xd9,0xf6, 0xa1,0xf5, 0xbd,0xe2, 0xb2,0xef, 0xb8,0xc3, 0xcf,0xea, 0xca,0xd4, 0xca,0xab, 0xda,0xb5, 0xbf,0xe4, 0xda,0xb6, 0xd2,0xe8, 0xb3,0xcf, 0xbb,0xb0, 0xd6,0xef, 0xb9,0xee, 0xd1,0xaf, 0xda,0xb9, 0xda,0xb8, 0xd5,0xb2, 0xa1,0xf5, 0xf6,0xa4, 0xa1,0xf5, 0xbb,0xbf, 0xf5,0xf6, 0xba,0xd1, 0xd4,0xf4, 0xd7,0xca, 0xbc,0xd6, 0xbb,0xdf, 0xea,0xdf, 0xc1,0xde, 0xc2,0xb8, 0xea,0xe0, 0xbc,0xa3, 0xb8,0xfa, 0xbf,0xe7, 0xc2,0xb7, 0xcc,0xf8, 0xb6,0xe5, 0xb9,0xf2, 0xf5,0xd3, 0xa1,0xf5, 0xb6,0xe3, 0xbd,0xcf, 0xd4,0xd8, 0xe9,0xf8, 0xe9,0xf9, 0xb1,0xd9, 0xc5,0xa9, 0xd4,0xcb, 0xd3,0xce, 0xb5,0xc0, 0xcb,0xec, 0xb4,0xef, 0xb1,0xc6, 0xce,0xa5, 0xe5,0xda, 0xd3,0xf6, 0xb6,0xf4, 0xb9,0xfd, 0xb1,0xe9, 0xe5,0xd8, 0xd3,0xe2, 0xb6,0xdd, 0xd7,0xde, 0xa1,0xf5, 0xb3,0xea, 0xc0,0xd2, 0xf5,0xa4, 0xd3,0xd4, 0xee,0xdc, 0xc7,0xaf, 0xee,0xe0, 0xee,0xdf, 0xbc,0xd8, 0xd3,0xcb, 0xc7,0xa6, 0xc5,0xd9, 0xb9,0xb3, 0xb2,0xac, 0xc1,0xe5, 0xee,0xe7, 0xee,0xe9, 0xee,0xd2, 0xee,0xeb, 0xee,0xe4, 0xc3,0xad, 0xd5,0xa2, 0xb0,0xaf, 0xb8,0xf4, 0xd4,0xc9, 0xd3,0xba, 0xf6,0xc1, 0xef,0xf4, 0xa1,0xf5, 0xc0,0xd7, 0xb5,0xe7, 0xb1,0xa2, 0xc1,0xe3, 0xbe,0xb8, 0xd1,0xa5, 0xb0,0xd0, 0xd4,0xa4, 0xcd,0xe7, 0xb6,0xd9, 0xe7,0xef, 0xb0,0xe4, 0xcb,0xcc, 0xcb,0xc7, 0xe2,0xc2, 0xb1,0xa5, 0xca,0xce, 0xb3,0xdb, 0xcd,0xd4, 0xd1,0xb1, 0xf7,0xd5, 0xf0,0xaf, 0xf7,0xe4, 0xb6,0xa6, 0xb9,0xc4, 0xca,0xf3, 0xc9,0xae, 0xd9,0xd7, 0xbd,0xc4, 0xd9,0xd2, 0xd9,0xd4, 0xc1,0xc5, 0xc6,0xcd, 0xcf,0xf1, 0xc7,0xc8, 0xb9,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xbe,0xa4, 0xb5,0xca, 0xbb,0xae, 0xd8,0xe3, 0xd8,0xd1, 0xd1,0xe1, 0xe0,0xd5, 0xe0,0xd6, 0xc2,0xef, 0xb3,0xa2, 0xcb,0xd4, 0xc5,0xbb, 0xcc,0xbe, 0xbc,0xce, 0xe0,0xb6, 0xb8,0xc2, 0xe0,0xbb, 0xdf,0xf5, 0xe0,0xbd, 0xe0,0xd0, 0xa1,0xf5, 0xdf,0xd9, 0xcd,0xc5, 0xcd,0xbc, 0xb3,0xbe, 0xdb,0xd3, 0xbe,0xb3, 0xc4,0xb9, 0xb5,0xe6, 0xc7,0xb5, 0xca,0xfb, 0xa1,0xf5, 0xca,0xd9, 0xe2,0xb7, 0xc3,0xce, 0xe2,0xb9, 0xb6,0xe1, 0xde,0xc6, 0xb5,0xd5, 0xe6,0xcf, 0xc4,0xdb, 0xe5,0xfd, 0xe6,0xce, 0xe6,0xd0, 0xe6,0xcc, 0xb7,0xf5, 0xc4,0xaf, 0xc4,0xfe, 0xb9,0xd1, 0xc1,0xc8, 0xca,0xb5, 0xd5,0xaf, 0xc7,0xde, 0xe5,0xbb, 0xb2,0xec, 0xb6,0xd4, 0xc2,0xc5, 0xd5,0xb8, 0xe1,0xab, 0xe1,0xa4, 0xb1,0xd2, 0xc4,0xbb, 0xe0,0xfe, 0xe1,0xa3, 0xc0,0xaa, 0xc1,0xce, 0xb1,0xd7, 0xb1,0xf0, 0xd5,0xc3, 0xb3,0xb9, 0xd2,0xf3, 0xd4,0xb8, 0xcc,0xac, 0xbf,0xb6, 0xc2,0xfd, 0xb9,0xdf, 0xe2,0xfa, 0xb2,0xd1, 0xb2,0xd2, 0xe3,0xbc, 0xbd,0xd8, 0xc6,0xb2, 0xd5,0xaa, 0xcb,0xa4, 0xb3,0xb7, 0xc3,0xfe, 0xc2,0xa7, 0xdf,0xa1, 0xde,0xe2, 0xb4,0xdd, 0xe5,0xba, 0xde,0xfd, 0xb2,0xf4, 0xc7,0xc3, 0xce,0xd3, 0xc6,0xec, 0xec,0xbd, 0xb3,0xa9, 0xf4,0xdf, 0xea,0xd4, 0xb0,0xf1, 0xd5,0xa5, 0xe9,0xc5, 0xe9,0xc2, 0xc8,0xd9, 0xb8,0xdc, 0xb9,0xb9, 0xe9,0xbb, 0xc8,0xb6, 0xe9,0xbd, 0xe9,0xbe, 0xc1,0xf1, 0xbb,0xb1, 0xc7,0xb9, 0xe9,0xbf, 0xe9,0xb3, 0xa1,0xf5, 0xc5,0xcc, 0xa1,0xf5, 0xc7,0xb8, 0xb8,0xe8, 0xeb,0xb5, 0xd5,0xc4, 0xd1,0xdd, 0xb9,0xf6, 0xc0,0xec, 0xb5,0xce, 0xe4,0xf6, 0xd1,0xfa, 0xc4,0xae, 0xd7,0xd5, 0xc2,0xa9, 0xc6,0xaf, 0xba,0xba, 0xc2,0xfa, 0xd6,0xcd, 0xc6,0xe1, 0xca,0xfe, 0xbd,0xa5, 0xd5,0xc7, 0xc1,0xb0, 0xe4,0xee, 0xc2,0xfe, 0xe4,0xf0, 0xb3,0xba, 0xe4,0xf4, 0xbb,0xa6, 0xd3,0xe6, 0xc9,0xf8, 0xb5,0xd3, 0xc2,0xb1, 0xc8,0xdb, 0xce,0xf5, 0xc9,0xbf, 0xd0,0xdc, 0xcf,0xa8, 0xd3,0xab, 0xb6,0xfb, 0xea,0xfb, 0xdc,0xfd, 0xd3,0xfc, 0xe2,0xaf, 0xd1,0xfe, 0xcb,0xf6, 0xc2,0xea, 0xb9,0xe5, 0xe8,0xa9, 0xd5,0xe7, 0xd2,0xc9, 0xc5,0xb1, 0xd1,0xf1, 0xb7,0xe8, 0xd3,0xfa, 0xbb,0xbe, 0xbe,0xa1, 0xbc,0xe0, 0xc3,0xe9, 0xee,0xa5, 0xee,0xa3, 0xcb,0xaf, 0xb4,0xc5, 0xb5,0xfa, 0xb1,0xcc, 0xcc,0xbc, 0xcb,0xb6, 0xed,0xd9, 0xec,0xf5, 0xb8,0xa3, 0xbb,0xf6, 0xd6,0xd6, 0xb3,0xc6, 0xcd,0xdd, 0xce,0xd1, 0xbd,0xdf, 0xb6,0xcb, 0xb9,0xdc, 0xbb,0xfe, 0xbc,0xe3, 0xf3,0xdb, 0xcb,0xe3, 0xf3,0xe9, 0xb2,0xad, 0xf3,0xdd, 0xf3,0xe7, 0xb8,0xf6, 0xa1,0xf5, 0xb4,0xe2, 0xf4,0xd5, 0xbe,0xab, 0xd5,0xc0, 0xe7,0xba, 0xd7,0xdb, 0xb4,0xc2, 0xe7,0xb1, 0xc2,0xcc, 0xbd,0xf4, 0xd7,0xba, 0xcd,0xf8, 0xb8,0xd9, 0xe7,0xb2, 0xb3,0xf1, 0xc3,0xe0, 0xb2,0xca, 0xc2,0xda, 0xce,0xac, 0xd0,0xf7, 0xe7,0xbb, 0xe7,0xb7, 0xb7,0xa3, 0xb4,0xe4, 0xf4,0xe4, 0xb5,0xd4, 0xce,0xc5, 0xbe,0xdb, 0xd5,0xd8, 0xb8,0xaf, 0xb0,0xf2, 0xb8,0xe0, 0xeb,0xf5, 0xb2,0xb2, 0xcd,0xc8, 0xeb,0xf6, 0xea,0xb0, 0xcc,0xa8, 0xd3,0xeb, 0xcc,0xf2, 0xce,0xe8, 0xf4,0xbb, 0xc8,0xd8, 0xdd,0xef, 0xcf,0xaf, 0xd0,0xee, 0xc3,0xc9, 0xdd,0xb0, 0xc6,0xd1, 0xcb,0xe2, 0xb8,0xc7, 0xd5,0xf4, 0xdd,0xa5, 0xdd,0xed, 0xa1,0xf5, 0xb2,0xd4, 0xcb,0xf2, 0xdd,0xee, 0xf2,0xea, 0xc3,0xdb, 0xf2,0xdf, 0xf2,0xec, 0xf2,0xe1, 0xf2,0xe6, 0xd6,0xa9, 0xca,0xb4, 0xf2,0xe9, 0xf2,0xe8, 0xc9,0xd1, 0xb9,0xd3, 0xc5,0xe1, 0xb9,0xfc, 0xc2,0xe3, 0xd6,0xc6, 0xf1,0xd4, 0xf1,0xd2, 0xa1,0xf5, 0xcb,0xd0, 0xd6,0xbe, 0xd3,0xef, 0xce,0xdc, 0xc8,0xcf, 0xbd,0xeb, 0xca,0xc4, 0xce,0xf3, 0xcb,0xb5, 0xda,0xbe, 0xbb,0xe5, 0xd3,0xd5, 0xda,0xbf, 0xda,0xbd, 0xa1,0xf5, 0xba,0xc0, 0xc0,0xea, 0xc3,0xb2, 0xb1,0xf6, 0xea,0xe2, 0xc9,0xde, 0xba,0xd5, 0xd5,0xd4, 0xb8,0xcf, 0xbe,0xd6, 0xb8,0xa8, 0xe9,0xfc, 0xc7,0xe1, 0xcd,0xec, 0xc0,0xb1, 0xd4,0xb6, 0xe5,0xdc, 0xd1,0xb7, 0xc7,0xb2, 0xd2,0xa3, 0xb5,0xdd, 0xe5,0xdd, 0xa1,0xf5, 0xe5,0xde, 0xb1,0xc9, 0xa1,0xf5, 0xdb,0xb4, 0xbd,0xcd, 0xcb,0xe1, 0xbf,0xe1, 0xf5,0xa9, 0xbd,0xc2, 0xd2,0xf8, 0xcd,0xad, 0xc3,0xfa, 0xee,0xf9, 0xb8,0xf5, 0xee,0xfd, 0xcf,0xce, 0xef,0xa7, 0xa1,0xf5, 0xcf,0xb3, 0xba,0xd2, 0xb9,0xeb, 0xc3,0xf6, 0xb8,0xf3, 0xb7,0xa7, 0xb8,0xf3, 0xcf,0xb6, 0xd5,0xcf, 0xbc,0xca, 0xb4,0xc6, 0xf6,0xc3, 0xd0,0xe8, 0xf7,0xb0, 0xf7,0xb1, 0xc9,0xd8, 0xc6,0xc4, 0xc1,0xec, 0xec,0xaa, 0xcc,0xa8, 0xbd,0xc8, 0xb1,0xfd, 0xb6,0xfc, 0xe2,0xc3, 0xb2,0xb5, 0xb0,0xb9, 0xf7,0xbb, 0xf7,0xd6, 0xbf,0xfd, 0xbb,0xea, 0xc3,0xf9, 0xf0,0xb0, 0xb7,0xef, 0xc3,0xb4, 0xb1,0xc7, 0xc6,0xeb, 0xd2,0xda, 0xd2,0xc7, 0xc6,0xa7, 0xbd,0xa9, 0xbc,0xdb, 0xd9,0xaf, 0xbf,0xeb, 0xbc,0xf3, 0xa1,0xf5, 0xc1,0xdd, 0xbe,0xe7, 0xc5,0xfc, 0xc1,0xf5, 0xbd,0xa3, 0xb9,0xf4, 0xdb,0xc4, 0xc0,0xf7, 0xdf,0xeb, 0xce,0xfb, 0xe0,0xda, 0xb3,0xb0, 0xba,0xd9, 0xd7,0xec, 0xbb,0xa9, 0xd0,0xea, 0xd2,0xad, 0xe0,0xdb, 0xc5,0xe7, 0xcb,0xbb, 0xd0,0xa5, 0xdf,0xb4, 0xdc,0xaf, 0xd0,0xe6, 0xd4,0xf6, 0xb7,0xd8, 0xd7,0xb9, 0xb6,0xe9, 0xb6,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xd2, 0xe6,0xb5, 0xe6,0xbf, 0xe5,0xfc, 0xbd,0xbf, 0xe6,0xac, 0xe5,0xbc, 0xbf,0xed, 0xc9,0xf3, 0xd0,0xb4, 0xb2,0xe3, 0xc2,0xc4, 0xe1,0xd8, 0xa1,0xf5, 0xb4,0xb1, 0xd6,0xc4, 0xe1,0xa6, 0xb7,0xcf, 0xb3,0xf8, 0xc3,0xed, 0xd8,0xcb, 0xb9,0xe3, 0xb3,0xa7, 0xb5,0xaf, 0xd3,0xb0, 0xb5,0xc2, 0xe1,0xe7, 0xc7,0xec, 0xbb,0xdb, 0xc2,0xc7, 0xed,0xab, 0xc4,0xbd, 0xd3,0xc7, 0xc6,0xdd, 0xce,0xbf, 0xcb,0xcb, 0xd3,0xfb, 0xe3,0xbf, 0xc1,0xaf, 0xc3,0xf5, 0xd4,0xf7, 0xe3,0xbd, 0xb5,0xac, 0xb7,0xdf, 0xe3,0xbe, 0xe2,0xe4, 0xc2,0xbe, 0xc4,0xa6, 0xd6,0xbf, 0xc4,0xa1, 0xd7,0xb2, 0xc6,0xcb, 0xc0,0xcc, 0xb3,0xc5, 0xd7,0xab, 0xb2,0xa6, 0xc4,0xd3, 0xcb,0xba, 0xc1,0xc3, 0xc8,0xf6, 0xb4,0xe9, 0xb2,0xa5, 0xb8,0xa7, 0xc4,0xed, 0xc7,0xcb, 0xdf,0xa4, 0xb5,0xa7, 0xde,0xec, 0xb5,0xd0, 0xb7,0xf3, 0xca,0xfd, 0xc4,0xba, 0xd4,0xdd, 0xb1,0xa9, 0xea,0xc7, 0xd1,0xf9, 0xd5,0xc1, 0xe9,0xa4, 0xd7,0xae, 0xca,0xe0, 0xb1,0xea, 0xb2,0xdb, 0xc4,0xa3, 0xc2,0xa5, 0xb7,0xae, 0xbd,0xb0, 0xc0,0xd6, 0xe8,0xc8, 0xe9,0xca, 0xc1,0xba, 0xc5,0xb7, 0xcc,0xbe, 0xe9,0xe4, 0xd2,0xe3, 0xc5,0xb9, 0xbd,0xac, 0xe4,0xfc, 0xb3,0xce, 0xc6,0xc3, 0xc1,0xca, 0xbd,0xe0, 0xbd,0xbd, 0xcc,0xb6, 0xc7,0xb1, 0xe4,0xfa, 0xb3,0xb1, 0xc5,0xec, 0xe4,0xfd, 0xc0,0xa3, 0xc8,0xf3, 0xbd,0xa7, 0xc5,0xcb, 0xeb,0xf8, 0xe4,0xb1, 0xa1,0xf5, 0xf4,0xaa, 0xca,0xec, 0xb0,0xbe, 0xc8,0xc8, 0xec,0xd9, 0xeb,0xbb, 0xa1,0xf5, 0xbd,0xb1, 0xe2,0xb1, 0xd3,0xa8, 0xe8,0xb0, 0xc1,0xa7, 0xe8,0xaa, 0xe8,0xad, 0xe7,0xdc, 0xf1,0xa4, 0xb4,0xf1, 0xce,0xc1, 0xc1,0xf6, 0xca,0xdd, 0xb4,0xaf, 0xf1,0xa3, 0xb0,0xa8, 0xd6,0xe5, 0xc5,0xcc, 0xcf,0xb9, 0xc3,0xd0, 0xee,0xa7, 0xee,0xa8, 0xa1,0xf5, 0xb4,0xe8, 0xb0,0xf5, 0xc8,0xb7, 0xc0,0xda, 0xc4,0xeb, 0xbf,0xc4, 0xc2,0xeb, 0xc5,0xcd, 0xb8,0xe5, 0xbc,0xda, 0xb9,0xc8, 0xbb,0xfc, 0xf0,0xa2, 0xb5,0xbe, 0xd2,0xa4, 0xc7,0xee, 0xbc,0xfd, 0xcf,0xe4, 0xb7,0xb6, 0xf3,0xf0, 0xd7,0xad, 0xc6,0xaa, 0xf3,0xf2, 0xa1,0xf5, 0xf3,0xf3, 0xba,0xfd, 0xb5,0xde, 0xc1,0xb7, 0xce,0xb3, 0xd6,0xc2, 0xbc,0xea, 0xc3,0xe5, 0xbc,0xa9, 0xb1,0xe0, 0xd4,0xb5, 0xcf,0xdf, 0xb6,0xd0, 0xbb,0xba, 0xe7,0xb6, 0xe7,0xbc, 0xe7,0xbf, 0xe7,0xbe, 0xc2,0xee, 0xb0,0xd5, 0xf4,0xc9, 0xf4,0xe6, 0xf1,0xee, 0xcc,0xc5, 0xc4,0xa4, 0xcf,0xa5, 0xbd,0xba, 0xb7,0xf4, 0xb1,0xec, 0xd5,0xe1, 0xb1,0xce, 0xce,0xb5, 0xc1,0xab, 0xca,0xdf, 0xd2,0xf1, 0xc2,0xfb, 0xc3,0xef, 0xbd,0xaf, 0xb2,0xcc, 0xb2,0xb7, 0xc5,0xee, 0xb4,0xd0, 0xde,0xa3, 0xa1,0xf5, 0xf2,0xeb, 0xba,0xfb, 0xb5,0xfb, 0xf2,0xf0, 0xcf,0xba, 0xce,0xcf, 0xca,0xad, 0xf2,0xf9, 0xbb,0xc8, 0xf2,0xf2, 0xf2,0xf5, 0xce,0xc0, 0xb3,0xe5, 0xba,0xd6, 0xb8,0xb4, 0xb0,0xfd, 0xf1,0xd9, 0xa1,0xf5, 0xf1,0xdb, 0xd2,0xea, 0xc1,0xc2, 0xcc,0xb8, 0xd7,0xbb, 0xb5,0xae, 0xc7,0xeb, 0xd6,0xee, 0xbf,0xce, 0xda,0xc3, 0xda,0xc6, 0xb5,0xf7, 0xcb,0xad, 0xc2,0xdb, 0xda,0xba, 0xda,0xc7, 0xb7,0xcc, 0xda,0xc4, 0xcd,0xe3, 0xca,0xfa, 0xd6,0xed, 0xc5,0xe2, 0xc9,0xcd, 0xb8,0xb3, 0xbc,0xfa, 0xd5,0xcb, 0xb6,0xc4, 0xcf,0xcd, 0xc2,0xf4, 0xb4,0xcd, 0xd6,0xca, 0xe2,0xd9, 0xf4,0xf7, 0xcc,0xcb, 0xc8,0xa4, 0xa1,0xf5, 0xbc,0xf9, 0xf5,0xd7, 0xcc,0xdf, 0xcc,0xa4, 0xb2,0xc8, 0xf5,0xd8, 0xa1,0xf5, 0xbe,0xe1, 0xcc,0xc9, 0xbb,0xd4, 0xc1,0xbe, 0xea,0xa1, 0xb1,0xb2, 0xe9,0xfd, 0xc2,0xd6, 0xea,0xa2, 0xe9,0xfe, 0xb9,0xf5, 0xca,0xca, 0xd5,0xda, 0xe5,0xdb, 0xd4,0xe2, 0xc7,0xa8, 0xc1,0xda, 0xd6,0xa3, 0xb5,0xcb, 0xdb,0xb6, 0xb4,0xbc, 0xd7,0xed, 0xb4,0xd7, 0xeb,0xe7, 0xd0,0xbf, 0xcc,0xe0, 0xcf,0xfa, 0xc6,0xcc, 0xee,0xed, 0xb3,0xfa, 0xc2,0xc1, 0xc8,0xf1, 0xef,0xb1, 0xb7,0xe6, 0xb1,0xb5, 0xef,0xae, 0xba,0xb8, 0xe3,0xcc, 0xd4,0xc4, 0xcf,0xf6, 0xf6,0xaa, 0xd5,0xf0, 0xc3,0xb9, 0xbf,0xbf, 0xb0,0xb0, 0xd0,0xac, 0xb9,0xae, 0xf2,0xa1, 0xa1,0xf5, 0xf2,0xa2, 0xb9,0xce, 0xd1,0xf8, 0xb6,0xf6, 0xc4,0xd9, 0xe2,0xc5, 0xcd,0xd5, 0xd7,0xa4, 0xe6,0xe1, 0xca,0xbb, 0xe6,0xe5, 0xbc,0xdd, 0xbe,0xd4, 0xe6,0xe2, 0xf7,0xbc, 0xb7,0xa2, 0xf7,0xd7, 0xc4,0xd6, 0xf7,0xc8, 0xc6,0xc7, 0xf6,0xcf, 0xc2,0xb3, 0xf0,0xb2, 0xd1,0xbb, 0xf5,0xfb, 0xf4,0xef, 0xf7,0xe2, 0xc0,0xe8, 0xc4,0xab, 0xb3,0xdd, 0xc8,0xe5, 0xbe,0xa1, 0xd9,0xb1, 0xd9,0xcf, 0xd9,0xad, 0xbc,0xbd, 0xc3,0xdd, 0xc4,0xfd, 0xbc,0xc1, 0xd8,0xe6, 0xd1,0xab, 0xe0,0xdf, 0xe0,0xe6, 0xb5,0xb1, 0xd8,0xac, 0xe0,0xe4, 0xb6,0xd6, 0xd4,0xeb, 0xc6,0xf7, 0xdf,0xe6, 0xe0,0xe5, 0xe0,0xc8, 0xca,0xc9, 0xe0,0xde, 0xb8,0xc1, 0xb1,0xda, 0xbf,0xd1, 0xcc,0xb3, 0xdb,0xd5, 0xb7,0xdc, 0xa1,0xf5, 0xd9,0xf8, 0xd1,0xa7, 0xe5,0xbe, 0xb5,0xbc, 0xc7,0xbf, 0xcf,0xdc, 0xc6,0xbe, 0xed,0xac, 0xb1,0xb9, 0xe3,0xc1, 0xd2,0xe4, 0xba,0xb6, 0xb0,0xc3, 0xd0,0xb8, 0xd5,0xbd, 0xc9,0xc3, 0xd3,0xb5, 0xb5,0xb2, 0xcc,0xa2, 0xba,0xb3, 0xbe,0xdd, 0xc2,0xb0, 0xd4,0xf1, 0xc0,0xde, 0xb2,0xd9, 0xbc,0xf1, 0xc7,0xdc, 0xb5,0xa3, 0xce,0xce, 0xd5,0xfb, 0xc0,0xfa, 0xcf,0xfe, 0xe5,0xdf, 0xea,0xca, 0xea,0xbc, 0xa1,0xf5, 0xe9,0xd7, 0xc6,0xd3, 0xe8,0xeb, 0xb3,0xc8, 0xba,0xe1, 0xe9,0xd9, 0xca,0xf7, 0xe9,0xcf, 0xcd,0xd6, 0xcf,0xf0, 0xc7,0xc5, 0xc7,0xc1, 0xe9,0xd4, 0xbb,0xfa, 0xe8,0xe3, 0xec,0xa8, 0xc0,0xfa, 0xeb,0xa9, 0xe5,0xa5, 0xb5,0xed, 0xd4,0xe8, 0xc5,0xa8, 0xd4,0xf3, 0xd7,0xc7, 0xe5,0xa2, 0xb0,0xc4, 0xbc,0xa4, 0xe5,0xa3, 0xe5,0xa4, 0xa1,0xf5, 0xe4,0xc5, 0xa1,0xf5, 0xb3,0xe3, 0xec,0xc0, 0xc1,0xd7, 0xc9,0xd5, 0xb5,0xc6, 0xd1,0xe0, 0xec,0xe4, 0xc1,0xc7, 0xcc,0xcc, 0xec,0xcb, 0xc8,0xbc, 0xd1,0xe6, 0xb6,0xc0, 0xe8,0xab, 0xe7,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xb1, 0xc6,0xb0, 0xea,0xb1, 0xdd,0xf9, 0xd5,0xce, 0xc8,0xb3, 0xa1,0xf5, 0xc2,0xac, 0xee,0xc2, 0xee,0xaa, 0xc2,0xf7, 0xee,0xa9, 0xc6,0xb3, 0xc4,0xa5, 0xd7,0xa9, 0xed,0xe0, 0xed,0xd3, 0xd3,0xf9, 0xbb,0xfd, 0xd3,0xb1, 0xc4,0xc2, 0xf6,0xd5, 0xa1,0xf5, 0xbf,0xfa, 0xb8,0xdd, 0xa1,0xf5, 0xd6,0xfe, 0xf3,0xc6, 0xa1,0xf5, 0xb4,0xdb, 0xc9,0xb8, 0xf3,0xf7, 0xb8,0xe2, 0xcc,0xc7, 0xe7,0xcb, 0xe7,0xcc, 0xdd,0xd3, 0xb8,0xbf, 0xcf,0xd8, 0xe7,0xc9, 0xe7,0xc7, 0xe7,0xc6, 0xe7,0xa7, 0xee,0xbe, 0xf4,0xcb, 0xba,0xb2, 0xb0,0xbf, 0xf4,0xe7, 0xf1,0xf1, 0xc9,0xc5, 0xc4,0xe5, 0xc5,0xf2, 0xd5,0xe9, 0xd0,0xcb, 0xcb,0xd2, 0xb2,0xd5, 0xc8,0xef, 0xde,0xa5, 0xde,0xa6, 0xde,0xa7, 0xb5,0xb4, 0xde,0xac, 0xbd,0xb6, 0xcf,0xf4, 0xce,0xdf, 0xde,0xa9, 0xf3,0xa6, 0xc3,0xf8, 0xc2,0xec, 0xd3,0xa9, 0xc8,0xda, 0xba,0xe2, 0xcd,0xca, 0xbf,0xe3, 0xc8,0xec, 0xf1,0xdd, 0xf1,0xd7, 0xc7,0xd7, 0xea,0xec, 0xda,0xd0, 0xd1,0xe8, 0xda,0xc9, 0xbb,0xe4, 0xc4,0xb1, 0xb5,0xfd, 0xd0,0xb3, 0xda,0xd1, 0xc5,0xb5, 0xda,0xcb, 0xce,0xbd, 0xb7,0xed, 0xda,0xcd, 0xda,0xcf, 0xda,0xc8, 0xda,0xce, 0xd4,0xa5, 0xa1,0xf5, 0xc3,0xa8, 0xc0,0xb5, 0xcc,0xe3, 0xf5,0xe2, 0xd3,0xbb, 0xf5,0xe5, 0xf5,0xdf, 0xf5,0xe0, 0xb7,0xf8, 0xbc,0xad, 0xca,0xe4, 0xea,0xa3, 0xb1,0xe6, 0xb0,0xec, 0xd7,0xf1, 0xe5,0xe0, 0xd1,0xa1, 0xb3,0xd9, 0xc1,0xc9, 0xd2,0xc5, 0xda,0xfe, 0xd0,0xd1, 0xb6,0xa7, 0xb1,0xed, 0xbe,0xe2, 0xc3,0xcc, 0xb4,0xed, 0xc7,0xae, 0xb8,0xd6, 0xce,0xfd, 0xc2,0xbc, 0xef,0xa3, 0xd7,0xb6, 0xbd,0xf5, 0xa1,0xf5, 0xef,0xbf, 0xef,0xc0, 0xef,0xc5, 0xd1,0xd6, 0xcb,0xed, 0xcb,0xe6, 0xcf,0xd5, 0xb5,0xf1, 0xf6,0xae, 0xd5,0xb4, 0xc1,0xd8, 0xbb,0xf4, 0xc4,0xde, 0xf6,0xad, 0xb5,0xe5, 0xbe,0xb2, 0xcc,0xf3, 0xc7,0xca, 0xbc,0xd5, 0xbe,0xb1, 0xc6,0xb5, 0xf2,0xa5, 0xcd,0xb7, 0xcd,0xc7, 0xd2,0xc3, 0xb2,0xcd, 0xb9,0xdd, 0xbd,0xa4, 0xe2,0xc6, 0xcf,0xda, 0xeb,0xc8, 0xba,0xa7, 0xe6,0xe9, 0xc2,0xe6, 0xba,0xa1, 0xf7,0xc0, 0xf7,0xd9, 0xf7,0xda, 0xba,0xe5, 0xb1,0xab, 0xcd,0xd2, 0xf0,0xb3, 0xd1,0xec, 0xd1,0xbc, 0xc1,0xee, 0xd4,0xa7, 0xc4,0xac, 0xc7,0xad, 0xc1,0xfa, 0xb9,0xea, 0xd3,0xc5, 0xb3,0xa5, 0xc0,0xdc, 0xb4,0xa2, 0xc0,0xf8, 0xba,0xbf, 0xdf,0xcc, 0xb3,0xa2, 0xe0,0xe9, 0xcf,0xc5, 0xcc,0xe7, 0xba,0xbe, 0xd1,0xb9, 0xdb,0xd6, 0xa1,0xf5, 0xd3,0xa4, 0xe6,0xc9, 0xe6,0xd6, 0xc8,0xe6, 0xde,0xcf, 0xe5,0xf0, 0xd3,0xec, 0xc1,0xeb, 0xd4,0xc0, 0xe1,0xc9, 0xb0,0xef, 0xc3,0xd6, 0xbb,0xd5, 0xd3,0xa6, 0xb6,0xae, 0xbf,0xd2, 0xc5,0xb3, 0xed,0xae, 0xcf,0xb7, 0xb4,0xf7, 0xc7,0xe6, 0xbb,0xf7, 0xeb,0xa2, 0xbc,0xb7, 0xc5,0xa1, 0xb2,0xc1, 0xc4,0xe2, 0xb8,0xe9, 0xdf,0xaa, 0xa1,0xf5, 0xc1,0xb2, 0xb1,0xd0, 0xca,0xef, 0xea,0xd3, 0xcc,0xb4, 0xb5,0xb5, 0xcf,0xad, 0xbc,0xec, 0xe8,0xed, 0xe8,0xce, 0xe9,0xc9, 0xc5,0xf6, 0xe9,0xde, 0xe9,0xdc, 0xe9,0xd1, 0xa1,0xf5, 0xe9,0xe7, 0xa1,0xf5, 0xd5,0xb1, 0xc5,0xa2, 0xb1,0xf5, 0xbc,0xc3, 0xe5,0xa9, 0xc3,0xc9, 0xcc,0xce, 0xc0,0xc4, 0xe5,0xaa, 0xc9,0xac, 0xbf,0xa3, 0xe5,0xa6, 0xa1,0xf5, 0xca,0xaa, 0xe5,0xa7, 0xce,0xab, 0xec,0xdd, 0xd3,0xaa, 0xdb,0xc6, 0xb2,0xd3, 0xd4,0xef, 0xd6,0xf2, 0xbb,0xd9, 0xbb,0xe2, 0xec,0xdb, 0xbe,0xf4, 0xc7,0xbd, 0xc4,0xfc, 0xbb,0xf1, 0xe8,0xb3, 0xbb,0xb7, 0xe8,0xa8, 0xe8,0xb2, 0xf0,0xec, 0xc1,0xc6, 0xb0,0xa9, 0xb5,0xb4, 0xcd,0xab, 0xb5,0xc9, 0xee,0xab, 0xcb,0xb2, 0xc7,0xc6, 0xc1,0xcb, 0xbd,0xc3, 0xc1,0xd7, 0xbb,0xc7, 0xed,0xe3, 0xed,0xb6, 0xbd,0xb8, 0xec,0xfb, 0xec,0xf8, 0xcb,0xeb, 0xc1,0xfe, 0xb4,0xd8, 0xc2,0xa8, 0xf3,0xfa, 0xc5,0xf1, 0xf3,0xf9, 0xa1,0xf5, 0xbf,0xb7, 0xc3,0xd3, 0xb7,0xe0, 0xc4,0xa3, 0xd4,0xe3, 0xb2,0xda, 0xf4,0xd6, 0xcb,0xf5, 0xbc,0xa8, 0xe7,0xd1, 0xc2,0xc6, 0xe7,0xd0, 0xb1,0xc1, 0xb7,0xec, 0xd7,0xdc, 0xd7,0xdd, 0xe7,0xd2, 0xb7,0xb1, 0xcf,0xcb, 0xe7,0xce, 0xa1,0xf5, 0xe7,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xc0, 0xf4,0xe8, 0xd2,0xed, 0xf1,0xfa, 0xc9,0xf9, 0xb4,0xcf, 0xc1,0xaa, 0xcb,0xca, 0xd2,0xdc, 0xd3,0xb7, 0xe2,0xdf, 0xb1,0xdb, 0xcd,0xce, 0xc5,0xa7, 0xb5,0xa8, 0xc1,0xb3, 0xeb,0xda, 0xc1,0xd9, 0xbe,0xd9, 0xbc,0xe8, 0xd0,0xbd, 0xb1,0xa1, 0xc0,0xd9, 0xde,0xb5, 0xbd,0xaa, 0xc7,0xbe, 0xca,0xed, 0xd1,0xa6, 0xde,0xb1, 0xde,0xb0, 0xbc,0xbb, 0xbf,0xf7, 0xf3,0xb0, 0xf3,0xaf, 0xf3,0xab, 0xf2,0xfe, 0xf3,0xa1, 0xf3,0xa7, 0xf2,0xf7, 0xc2,0xdd, 0xf2,0xe5, 0xf3,0xac, 0xd9,0xf4, 0xf1,0xde, 0xcf,0xe5, 0xf1,0xda, 0xa1,0xf5, 0xea,0xe9, 0xc3,0xd5, 0xb0,0xf9, 0xc7,0xab, 0xbd,0xb2, 0xbb,0xd1, 0xd2,0xa5, 0xd0,0xbb, 0xcc,0xdc, 0xda,0xd7, 0xbb,0xed, 0xcf,0xaa, 0xe1,0xd9, 0xd7,0xac, 0xc8,0xfc, 0xb9,0xba, 0xa1,0xf5, 0xea,0xe7, 0xc7,0xf7, 0xf5,0xe3, 0xcc,0xa3, 0xb5,0xb8, 0xf5,0xe8, 0xcf,0xbd, 0xd5,0xb7, 0xec,0xb1, 0xd4,0xaf, 0xd3,0xdf, 0xb1,0xdc, 0xe5,0xe1, 0xbb,0xb9, 0xc2,0xf5, 0xe5,0xe2, 0xd1,0xfb, 0xdb,0xb8, 0xf5,0xb1, 0xd4,0xcd, 0xb3,0xf3, 0xb6,0xc6, 0xc3,0xbe, 0xc3,0xaa, 0xbc,0xfc, 0xc1,0xb4, 0xef,0xc6, 0xb9,0xf8, 0xb4,0xb8, 0xef,0xf1, 0xc7,0xc2, 0xb6,0xcd, 0xef,0xcc, 0xa1,0xf5, 0xef,0xc9, 0xc0,0xab, 0xe3,0xd7, 0xc0,0xbb, 0xe3,0xc7, 0xb0,0xe5, 0xd2,0xfe, 0xc1,0xa5, 0xcb,0xe4, 0xcb,0xaa, 0xcf,0xbc, 0xbe,0xcf, 0xba,0xab, 0xbf,0xc5, 0xec,0xab, 0xce,0xb9, 0xb3,0xd2, 0xbf,0xa5, 0xcf,0xca, 0xf6,0xde, 0xf6,0xdb, 0xf6,0xd9, 0xba,0xe8, 0xb8,0xeb, 0xf7,0xe7, 0xf0,0xa4, 0xb5,0xe3, 0xf7,0xed, 0xf7,0xee, 0xf7,0xec, 0xf7,0xfd, 0xd5,0xab, 0xb4,0xd4, 0xe0,0xe0, 0xcf,0xf2, 0xdb,0xdb, 0xc0,0xdd, 0xc9,0xf4, 0xd2,0xcd, 0xed,0xaf, 0xb4,0xc1, 0xc0,0xa9, 0xd6,0xc0, 0xc8,0xc5, 0xc4,0xec, 0xb0,0xda, 0xcb,0xd3, 0xdf,0xa2, 0xb6,0xcf, 0xea,0xd7, 0xeb,0xfc, 0xe9,0xc4, 0xc3,0xca, 0xb9,0xf1, 0xbc,0xf7, 0xc4,0xfb, 0xe8,0xfe, 0xa1,0xf5, 0xcc,0xa8, 0xec,0xa3, 0xb9,0xe9, 0xe9,0xeb, 0xd0,0xba, 0xe4,0xc9, 0xc2,0xcb, 0xe4,0xc2, 0xbd,0xa6, 0xc6,0xd9, 0xe4,0xaf, 0xd1,0xac, 0xbd,0xfd, 0xec,0xe2, 0xa1,0xf5, 0xe1,0xee, 0xc1,0xd4, 0xe8,0xb5, 0xa1,0xf5, 0xce,0xcd, 0xf1,0xb1, 0xf0,0xdd, 0xd3,0xfa, 0xee,0xad, 0xf6,0xc4, 0xd5,0xb0, 0xed,0xfa, 0xb4,0xa1, 0xc0,0xf1, 0xf0,0xa3, 0xbb,0xe0, 0xa1,0xf5, 0xb4,0xdc, 0xc7,0xcf, 0xf3,0xef, 0xbb,0xc9, 0xf4,0xa2, 0xf3,0xec, 0xf3,0xf1, 0xbc,0xf2, 0xc1,0xb8, 0xd6,0xaf, 0xc9,0xc9, 0xc8,0xc6, 0xe7,0xd4, 0xd0,0xe5, 0xe7,0xd5, 0xa1,0xf5, 0xcc,0xb3, 0xc7,0xcc, 0xb7,0xad, 0xd6,0xb0, 0xc4,0xf4, 0xc6,0xea, 0xeb,0xf7, 0xbe,0xc9, 0xb2,0xd8, 0xc8,0xf8, 0xc0,0xb6, 0xc3,0xea, 0xbd,0xe5, 0xde,0xb9, 0xdc,0xf9, 0xde,0xb7, 0xbc,0xf6, 0xf2,0xcd, 0xb2,0xf5, 0xb3,0xe6, 0xf3,0xb4, 0xb8,0xb2, 0xea,0xee, 0xf5,0xfc, 0xda,0xd3, 0xbd,0xf7, 0xc3,0xfd, 0xda,0xd8, 0xb7,0xe1, 0xd7,0xb8, 0xf5,0xbe, 0xf5,0xe7, 0xb1,0xc4, 0xd7,0xd9, 0xbc,0xa3, 0xf5,0xcf, 0xc7,0xfb, 0xd7,0xaa, 0xd5,0xde, 0xe5,0xc7, 0xe5,0xe4, 0xe5,0xe3, 0xd2,0xbd, 0xbd,0xb4, 0xc0,0xe5, 0xc8,0xdb, 0xb0,0xf7, 0xcb,0xf8, 0xce,0xd9, 0xc4,0xf8, 0xd5,0xf2, 0xb8,0xe4, 0xef,0xd7, 0xef,0xd3, 0xb4,0xb8, 0xc7,0xb9, 0xe3,0xd8, 0xb4,0xb3, 0xe3,0xd9, 0xe3,0xda, 0xc0,0xeb, 0xd4,0xd3, 0xcb,0xab, 0xb3,0xfb, 0xbc,0xa6, 0xa1,0xf5, 0xf7,0xb7, 0xc7,0xef, 0xb1,0xde, 0xa1,0xf5, 0xb6,0xee, 0xd1,0xd5, 0xcc,0xe2, 0xf2,0xa6, 0xf2,0xa7, 0xa1,0xf5, 0xc1,0xf3, 0xe2,0xc8, 0xc0,0xa1, 0xf7,0xd1, 0xf0,0xa5, 0xc6,0xef, 0xf7,0xc1, 0xd7,0xd7, 0xcb,0xc9, 0xce,0xba, 0xf7,0xcb, 0xf7,0xcd, 0xf6,0xe8, 0xc0,0xf0, 0xf6,0xea, 0xa1,0xf5, 0xf6,0xe7, 0xbe,0xe9, 0xb6,0xec, 0xf0,0xc0, 0xf7,0xef, 0xa1,0xf5, 0xf7,0xf8, 0xb2,0xf6, 0xd1,0xca, 0xbb,0xb5, 0xc2,0xa2, 0xdb,0xde, 0xb3,0xe8, 0xc5,0xd3, 0xc2,0xae, 0xb3,0xcd, 0xbb,0xb3, 0xc0,0xc1, 0xe3,0xc2, 0xc5,0xca, 0xc2,0xa3, 0xbf,0xf5, 0xc6,0xd8, 0xb3,0xf7, 0xe8,0xfc, 0xe9,0xb5, 0xe9,0xd6, 0xe5,0xad, 0xe4,0xec, 0xe4,0xfe, 0xe5,0xab, 0xc1,0xa4, 0xb1,0xf4, 0xe3,0xf2, 0xb1,0xac, 0xcb,0xb8, 0xeb,0xb9, 0xb6,0xbf, 0xca,0xde, 0xcc,0xa1, 0xe7,0xf4, 0xc7,0xed, 0xb0,0xea, 0xb3,0xeb, 0xbd,0xae, 0xb1,0xf1, 0xb3,0xd5, 0xc3,0xc9, 0xb0,0xad, 0xb5,0xbb, 0xbb,0xf1, 0xce,0xc8, 0xc1,0xb1, 0xb2,0xbe, 0xf4,0xa4, 0xc7,0xa9, 0xe9,0xdc, 0xf4,0xa6, 0xcf,0xb5, 0xbc,0xeb, 0xd2,0xef, 0xc9,0xfe, 0xbb,0xe6, 0xc2,0xde, 0xbd,0xc9, 0xeb,0xfe, 0xb8,0xfe, 0xd9,0xfa, 0xc0,0xb0, 0xb7,0xaa, 0xd2,0xd5, 0xde,0xb4, 0xc5,0xba, 0xcc,0xd9, 0xd2,0xa9, 0xa1,0xf5, 0xd2,0xcf, 0xd3,0xac, 0xd0,0xab, 0xd0,0xb7, 0xf3,0xb8, 0xf1,0xc9, 0xbd,0xf3, 0xb0,0xc0, 0xf4,0xc5, 0xbb,0xa9, 0xc6,0xd7, 0xca,0xb6, 0xd6,0xa4, 0xcc,0xb7, 0xda,0xdc, 0xbc,0xa5, 0xa1,0xf5, 0xda,0xdb, 0xd4,0xf9, 0xd4,0xde, 0xf5,0xeb, 0xb6,0xd7, 0xb3,0xf9, 0xf5,0xea, 0xb5,0xc5, 0xf5,0xce, 0xf5,0xed, 0xea,0xa5, 0xbd,0xce, 0xb4,0xc7, 0xb1,0xdf, 0xe5,0xe5, 0xc6,0xc9, 0xf5,0xb4, 0xbe,0xb5, 0xef,0xe1, 0xb2,0xf9, 0xef,0xdf, 0xc1,0xb4, 0xef,0xdb, 0xef,0xdc, 0xf7,0xe9, 0xef,0xda, 0xef,0xdd, 0xef,0xcf, 0xef,0xce, 0xef,0xac, 0xf6,0xc9, 0xb9,0xd8, 0xc2,0xa4, 0xc4,0xd1, 0xf6,0xaf, 0xce,0xed, 0xc3,0xd2, 0xe8,0xba, 0xd4,0xcf, 0xc0,0xe0, 0xd4,0xb8, 0xb5,0xdf, 0xec,0xac, 0xc2,0xf8, 0xe2,0xcb, 0xe6,0xf0, 0xc6,0xad, 0xba,0xfa, 0xbe,0xa8, 0xf6,0xf0, 0xf6,0xeb, 0xf6,0xf4, 0xf0,0xc8, 0xf0,0xc4, 0xc8,0xb5, 0xf0,0xc6, 0xc5,0xf4, 0xf7,0xe8, 0xc0,0xf6, 0xc2,0xb4, 0xf4,0xf0, 0xc8,0xb0, 0xc1,0xfc, 0xc8,0xc2, 0xe0,0xd3, 0xd1,0xcf, 0xbd,0xc0, 0xc8,0xc0, 0xe6,0xd7, 0xc4,0xef, 0xc4,0xf5, 0xb1,0xa6, 0xa1,0xf5, 0xd0,0xfc, 0xe2,0xe3, 0xc8,0xc1, 0xc0,0xb9, 0xb2,0xf3, 0xea,0xd8, 0xeb,0xca, 0xe9,0xb4, 0xc0,0xbd, 0xc3,0xd6, 0xe4,0xf2, 0xc2,0xaf, 0xcf,0xd7, 0xe7,0xe7, 0xd1,0xf7, 0xd5,0xf7, 0xbf,0xf3, 0xed,0xc2, 0xb7,0xaf, 0xc0,0xf9, 0xf1,0xbc, 0xbe,0xba, 0xb3,0xef, 0xc0,0xba, 0xbc,0xae, 0xc5,0xb4, 0xcd,0xc5, 0xb1,0xe8, 0xe7,0xcd, 0xbc,0xcc, 0xd7,0xeb, 0xf3,0xbf, 0xd2,0xab, 0xeb,0xcd, 0xbd,0xa2, 0xd4,0xe5, 0xb0,0xaa, 0xc4,0xa2, 0xdd,0xfe, 0xc2,0xab, 0xc6,0xbb, 0xcb,0xd5, 0xd4,0xcc, 0xf2,0xba, 0xc8,0xe4, 0xf1,0xdc, 0xbe,0xf5, 0xb4,0xa5, 0xd2,0xe9, 0xc6,0xa9, 0xbe,0xaf, 0xd2,0xeb, 0xd4,0xeb, 0xda,0xde, 0xd3,0xae, 0xc9,0xc4, 0xf5,0xbb, 0xd4,0xea, 0xf5,0xee, 0xcc,0xa4, 0xf5,0xb7, 0xca,0xcd, 0xd6,0xd3, 0xee,0xf3, 0xd0,0xe2, 0xb2,0xfb, 0xf6,0xb1, 0xc6,0xae, 0xc8,0xc4, 0xbc,0xa2, 0xdc,0xb0, 0xe5,0xb9, 0xcc,0xda, 0xc9,0xa7, 0xa1,0xf5, 0xc8,0xfa, 0xf6,0xfa, 0xcf,0xcc, 0xc3,0xe6, 0xb5,0xb3, 0xf7,0xf9, 0xf6,0xb4, 0xb3,0xf6, 0xc1,0xe4, 0xd9,0xb3, 0xa1,0xf5, 0xe0,0xbf, 0xdf,0xf9, 0xcf,0xf9, 0xd9,0xe7, 0xca,0xf4, 0xce,0xa1, 0xbe,0xe5, 0xc9,0xe5, 0xc9,0xe3, 0xd0,0xaf, 0xec,0xb5, 0xea,0xd9, 0xd3,0xa3, 0xc0,0xb8, 0xe8,0xf9, 0xbc,0xdf, 0xb9,0xe0, 0xc0,0xc3, 0xce,0xfe, 0xa1,0xf5, 0xe8,0xac, 0xf1,0xae, 0xeb,0xca, 0xcc,0xd9, 0xb2,0xf8, 0xd0,0xf8, 0xe5,0xf1, 0xde,0xc1, 0xc0,0xbc, 0xde,0xba, 0xf2,0xc3, 0xb4,0xc0, 0xf3,0xbb, 0xc0,0xaf, 0xcd,0xe0, 0xa1,0xf5, 0xc0,0xc0, 0xc7,0xb4, 0xbb,0xa4, 0xd3,0xfe, 0xd4,0xdf, 0xb3,0xec, 0xd4,0xbe, 0xf5,0xd2, 0xba,0xe4, 0xb1,0xe7, 0xf5,0xb8, 0xc1,0xad, 0xc0,0xd8, 0xcc,0xfa, 0xee,0xf5, 0xee,0xec, 0xef,0xed, 0xef,0xd4, 0xb1,0xd9, 0xb0,0xd4, 0xc5,0xf9, 0xc2,0xb6, 0xcf,0xec, 0xb9,0xcb, 0xf2,0xab, 0xf7,0xcf, 0xc7,0xfd, 0xe6,0xf4, 0xdd,0xeb, 0xc2,0xe2, 0xf7,0xc3, 0xc4,0xa7, 0xf7,0xce, 0xf7,0xa2, 0xf7,0xa4, 0xdd,0xba, 0xba,0xd7, 0xf0,0xce, 0xc8,0xf5, 0xf7,0xea, 0xf7,0xf6, 0xdc,0xb1, 0xf6,0xb7, 0xf6,0xb8, 0xc4,0xf6, 0xd9,0xb2, 0xd9,0xce, 0xdf,0xbd, 0xc4,0xd2, 0xc2,0xde, 0xc2,0xcf, 0xe1,0xdb, 0xc2,0xcd, 0xcd,0xe4, 0xdc,0xb2, 0xcc,0xaf, 0xc8,0xa8, 0xbb,0xb6, 0xc8,0xf7, 0xcc,0xb2, 0xe2,0xa4, 0xc8,0xbf, 0xb5,0xfe, 0xf1,0xab, 0xd1,0xa2, 0xec,0xfc, 0xc1,0xfd, 0xf4,0xa5, 0xc1,0xfb, 0xcc,0xfd, 0xd4,0xe0, 0xcf,0xae, 0xb3,0xc4, 0xa1,0xf5, 0xb6,0xc1, 0xca,0xea, 0xd8,0xcd, 0xf5,0xdc, 0xf5,0xd9, 0xe0,0xce, 0xdb,0xaa, 0xd6,0xfd, 0xbc,0xf8, 0xbc,0xf8, 0xf6,0xab, 0xf6,0xb2, 0xf7,0xb2, 0xe7,0xd6, 0xb2,0xfc, 0xf7,0xd2, 0xbd,0xbe, 0xe6,0xe7, 0xd4,0xe0, 0xd0,0xeb, 0xb1,0xee, 0xf6,0xe3, 0xf7,0xa7, 0xf7,0xa9, 0xf0,0xd1, 0xc5,0xb8, 0xf7,0xfa, 0xf6,0xb9, 0xf6,0xba, 0xb9,0xa8, 0xcb,0xd5, 0xd1,0xd2, 0xc1,0xb5, 0xc2,0xce, 0xbe,0xf0, 0xbd,0xc1, 0xc9,0xb9, 0xa1,0xf5, 0xe8,0xb6, 0xc7,0xd4, 0xc7,0xa9, 0xa1,0xf5, 0xd9,0xdf, 0xd3,0xa7, 0xcf,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xd5,0xba, 0xc2,0xdc, 0xb9,0xc6, 0xb1,0xe4, 0xe5,0xce, 0xc2,0xdf, 0xef,0xf0, 0xee,0xe5, 0xa1,0xf5, 0xd8,0xcc, 0xcf,0xd4, 0xf7,0xd0, 0xbe,0xaa, 0xe6,0xe4, 0xd1,0xe9, 0xcb,0xe8, 0xcc,0xe5, 0xf7,0xc7, 0xf7,0xad, 0xc1,0xdb, 0xf7,0xac, 0xf0,0xb8, 0xf7,0xeb, 0xc3,0xb9, 0xd6,0xf6, 0xb0,0xd3, 0xc0,0xbf, 0xe5,0xb1, 0xcc,0xb1, 0xf1,0xb2, 0xb4,0xa3, 0xb9,0xde, 0xee,0xbf, 0xb2,0xcf, 0xf3,0xbc, 0xe1,0xe9, 0xc8,0xc3, 0xb2,0xf7, 0xda,0xdf, 0xd1,0xde, 0xb8,0xd3, 0xc4,0xf0, 0xa1,0xf5, 0xf6,0xa8, 0xc1,0xe9, 0xf6,0xb0, 0xc7,0xa7, 0xf2,0xad, 0xd6,0xe8, 0xf7,0xde, 0xf7,0xca, 0xf6,0xd7, 0xd3,0xa5, 0xf0,0xd8, 0xbc,0xee, 0xd1,0xce, 0xf2,0xfc, 0xf6,0xbb, 0xc8,0xa3, 0xcc,0xfc, 0xe9,0xad, 0xcd,0xe5, 0xc0,0xe9, 0xc2,0xe1, 0xc2,0xf9, 0xb9,0xdb, 0xf5,0xe6, 0xd0,0xc6, 0xcf,0xe2, 0xd4,0xbf, 0xc2,0xad, 0xb2,0xf6, 0xf7,0xc5, 0xf7,0xe0, 0xd9,0xe4, 0xc2,0xd0, 0xd6,0xf5, 0xd4,0xde, 0xc4,0xf7, 0xf7,0xb5, 0xc2,0xbf, 0xe6,0xf7, 0xc0,0xc2, 0xda,0xd4, 0xf5,0xef, 0xf5,0xa6, 0xd7,0xea, 0xf6,0xc7, 0xc2,0xe0, 0xf6,0xf9, 0xf6,0xd4, 0xf7,0xf2, 0xd1,0xde, 0xd4,0xe4, 0xf0,0xd0, 0xec,0xe0, 0xe6,0xea, 0xd3,0xf4, 0xf0,0xd9, 0xf0,0xbd, 0xd3,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xbf, 0xdb,0xc9, 0xd8,0xce, 0xb3,0xa7, 0xcd,0xf2, 0xd8,0xa2, 0xd8,0xb1, 0xd8,0xa1, 0xe0,0xed, 0xd8,0xa3, 0xe5,0xf8, 0xe1,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xd3,0xeb, 0xa1,0xf5, 0xd8,0xc1, 0xd8,0xec, 0xd8,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb0,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xaf, 0xa1,0xf5, 0xc6,0xf8, 0xe3,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xee, 0xd9,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xca,0xa5, 0xa1,0xf5, 0xba,0xbb, 0xc4,0xfe, 0xe5,0xb3, 0xa1,0xf5, 0xe5,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xcf, 0xa1,0xf5, 0xe2,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbc,0xbf, 0xd3,0xc5, 0xa1,0xf5, 0xd8,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbc,0xdb, 0xd0,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xef, 0xd8,0xb6, 0xdb,0xdc, 0xdb,0xd9, 0xa1,0xf5, 0xde,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xd8, 0xde,0xcd, 0xa1,0xf5, 0xe1,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbf,0xaa, 0xd7,0xaf, 0xd2,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xe3, 0xa1,0xf5, 0xba,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xc7,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xb9, 0xea,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbb,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xae, 0xd9,0xdb, 0xa1,0xf5, 0xe3,0xe1, 0xa1,0xf5, 0xe3,0xe2, 0xe3,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xed, 0xa1,0xf5, 0xe7,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xb4, 0xdc,0xb5, 0xf2,0xae, 0xa1,0xf5, 0xda,0xf8, 0xda,0xf5, 0xa1,0xf5, 0xda,0xf6, 0xa1,0xf5, 0xda,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcc,0xe5, 0xd8,0xf4, 0xa1,0xf5, 0xd8,0xfb, 0xa1,0xf5, 0xd9,0xa1, 0xa1,0xf5, 0xd9,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xa9, 0xa1,0xf5, 0xe1,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xaf, 0xec,0xfd, 0xec,0xfe, 0xe2,0xed, 0xa1,0xf5, 0xe2,0xe5, 0xa1,0xf5, 0xe2,0xe7, 0xe2,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd0,0xda, 0xd0,0xc3, 0xbb,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbc,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xc8,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbf,0xbc, 0xea,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xbb, 0xe8,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xaf, 0xeb,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xf0, 0xa1,0xf5, 0xe1,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xae, 0xa1,0xf5, 0xf0,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xc0, 0xa1,0xf5, 0xdc,0xb6, 0xa1,0xf5, 0xdc,0xba, 0xdc,0xbb, 0xa1,0xf5, 0xdc,0xb7, 0xa1,0xf5, 0xdc,0xb9, 0xf5,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xa5, 0xd9,0xa6, 0xd9,0xa8, 0xd6,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xb1, 0xa1,0xf5, 0xe1,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcc,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xca, 0xa1,0xf5, 0xe0,0xf2, 0xc5,0xf7, 0xa1,0xf5, 0xdb,0xe8, 0xdb,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xe9, 0xa1,0xf5, 0xc7,0xf0, 0xdb,0xe6, 0xdb,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc4,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xdf, 0xe6,0xdb, 0xe5,0xb5, 0xe5,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xb5, 0xa1,0xf5, 0xe1,0xb8, 0xc1,0xeb, 0xe1,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xfa, 0xe0,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xf1, 0xe2,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc1,0xaf, 0xea,0xa7, 0xec,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xc7,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xc4, 0xa1,0xf5, 0xb9,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbc,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xb3, 0xa1,0xf5, 0xe3,0xf9, 0xe3,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xef, 0xe3,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc5,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc8,0xb2, 0xa1,0xf5, 0xea,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xf4, 0xa1,0xf5, 0xb5,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xaf, 0xe7,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcb,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xf4, 0xa1,0xf5, 0xb0,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xbe, 0xa1,0xf5, 0xdc,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xcc, 0xdc,0xb8, 0xdc,0xcd, 0xdc,0xcb, 0xa1,0xf5, 0xdc,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb0, 0xa1,0xf5, 0xf2,0xb1, 0xd8,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xfb, 0xba,0xaa, 0xda,0xfc, 0xdb,0xa2, 0xa1,0xf5, 0xda,0xe7, 0xda,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xb6, 0xa1,0xf5, 0xd9,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xd9, 0xef,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xc7, 0xc0,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xd2, 0xa1,0xf5, 0xdf,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xda, 0xdf,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xec, 0xdb,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb8,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xad, 0xcf,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbf,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xc3, 0xa1,0xf5, 0xe2,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xfe, 0xd0,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbf,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb8,0xf1, 0xa1,0xf5, 0xde,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xc3, 0xea,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xd4, 0xe8,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb9,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xcf, 0xa1,0xf5, 0xbc,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xd5, 0xa1,0xf5, 0xe8,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xe3, 0xe9,0xe5, 0xa1,0xf5, 0xb1,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xdd, 0xa1,0xf5, 0xc8,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb2, 0xe4,0xa7, 0xe4,0xa8, 0xa1,0xf5, 0xe4,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbd,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xe6, 0xe7,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xce,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xf1, 0xa1,0xf5, 0xed,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xbc, 0xc5,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xf5, 0xd6,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xfd, 0xa1,0xf5, 0xee,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xe8, 0xde,0xc7, 0xa1,0xf5, 0xdb,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xd1, 0xca,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xd3, 0xa1,0xf5, 0xeb,0xd2, 0xa1,0xf5, 0xf4,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xbb, 0xdc,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xe6, 0xdc,0xfb, 0xc9,0xbb, 0xa1,0xf5, 0xdc,0xda, 0xa1,0xf5, 0xdc,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xdd, 0xdc,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xd6, 0xdc,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xa4, 0xdb,0xa5, 0xdb,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xc6, 0xee,0xc5, 0xda,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb5,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xe0, 0xb9,0xcc, 0xbe,0xbb, 0xa1,0xf5, 0xd8,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc7,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xea, 0xdf,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xc1, 0xdf,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xf4, 0xdb,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xa2, 0xed,0xa3, 0xed,0xa4, 0xed,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xa8, 0xa1,0xf5, 0xe3,0xa6, 0xe3,0xa7, 0xa1,0xf5, 0xe3,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xb1, 0xa1,0xf5, 0xde,0xdc, 0xa1,0xf5, 0xde,0xda, 0xde,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xb7, 0xec,0xb9, 0xec,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xf1, 0xe8,0xe0, 0xe8,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xe4, 0xe8,0xe6, 0xa1,0xf5, 0xe8,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb4, 0xe4,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb7, 0xa1,0xf5, 0xe4,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xbc, 0xa1,0xf5, 0xcd,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xfe, 0xe1,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xfc, 0xe2,0xa1, 0xe1,0xfb, 0xa1,0xf5, 0xe7,0xee, 0xe7,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xf2, 0xa1,0xf5, 0xe7,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xac, 0xa1,0xf5, 0xea,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xb3, 0xa1,0xf5, 0xf0,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xf4, 0xed,0xf2, 0xed,0xf3, 0xa1,0xf5, 0xed,0xc8, 0xed,0xc7, 0xa1,0xf5, 0xb2,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xee, 0xa1,0xf5, 0xec,0xef, 0xec,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xcb, 0xf3,0xc5, 0xf3,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xb0,0xb7, 0xeb,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xa8, 0xf4,0xb1, 0xa1,0xf5, 0xdc,0xfc, 0xdc,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xa2, 0xa1,0xf5, 0xdc,0xeb, 0xdc,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xf2, 0xa1,0xf5, 0xdc,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb2,0xe7, 0xa1,0xf5, 0xbc,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb6, 0xa1,0xf5, 0xf2,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xbb, 0xb2,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xad, 0xf4,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb8,0xcf, 0xa1,0xf5, 0xf5,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xca,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xae, 0xdb,0xad, 0xdb,0xac, 0xa1,0xf5, 0xf4,0xfb, 0xf4,0xfc, 0xf4,0xfd, 0xee,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xec, 0xf6,0xc0, 0xa1,0xf5, 0xf7,0xd4, 0xdb,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb9,0xd0, 0xdb,0xc3, 0xa1,0xf5, 0xd8,0xd0, 0xa1,0xf5, 0xe0,0xa3, 0xe0,0xa4, 0xdf,0xfe, 0xa1,0xf5, 0xdf,0xfd, 0xa1,0xf5, 0xdf,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc9,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xf5, 0xe0,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xfa, 0xdc,0xa5, 0xdc,0xa4, 0xdc,0xa3, 0xa1,0xf5, 0xdb,0xfc, 0xdc,0xa1, 0xa1,0xf5, 0xdb,0xef, 0xdd,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xbc, 0xe6,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xed, 0xe1,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xc1, 0xe1,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xd5, 0xa1,0xf5, 0xe2,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xae, 0xa1,0xf5, 0xe3,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xbe,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xfd, 0xa1,0xf5, 0xde,0xe5, 0xb5,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xe1, 0xa1,0xf5, 0xb6,0xde, 0xc6,0xfe, 0xbe,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xe3, 0xde,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb2,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xf5, 0xa1,0xf5, 0xe8,0xf4, 0xe8,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xf8, 0xd8,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xb4, 0xb5,0xed, 0xe4,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xba,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xc4, 0xa1,0xf5, 0xc4,0xd7, 0xa1,0xf5, 0xe4,0xcb, 0xa1,0xf5, 0xe4,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xe9, 0xbe,0xd6, 0xcc,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xf6, 0xe2,0xa7, 0xe2,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd1,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc3,0xd0, 0xed,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xf6, 0xa1,0xf5, 0xed,0xf7, 0xa1,0xf5, 0xce,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xd1, 0xed,0xce, 0xb9,0xe8, 0xed,0xcf, 0xa1,0xf5, 0xec,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xeb, 0xa1,0xf5, 0xbd,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xcc, 0xa1,0xf5, 0xf3,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xd4, 0xf3,0xd5, 0xa1,0xf5, 0xf3,0xce, 0xa1,0xf5, 0xf3,0xd1, 0xf3,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd5,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xc6, 0xa1,0xf5, 0xf1,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xf5, 0xa1,0xf5, 0xeb,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xe3, 0xeb,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xb4, 0xf4,0xb6, 0xa1,0xf5, 0xf4,0xb7, 0xa1,0xf5, 0xe5,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xb6,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xb3, 0xdd,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xf0, 0xdd,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xc5, 0xf2,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc8, 0xec,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xcd, 0xe5,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xd2, 0xdb,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xb3,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb2, 0xa1,0xf5, 0xb7,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xcc, 0xee,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xae, 0xdf,0xf6, 0xdf,0xf7, 0xe0,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xa7, 0xdc,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xd1, 0xa1,0xf5, 0xe1,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xa2, 0xa1,0xf5, 0xe5,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xfe, 0xde,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xeb, 0xde,0xde, 0xa1,0xf5, 0xde,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc4,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xe2, 0xe8,0xe2, 0xe8,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xfb, 0xa1,0xf5, 0xe9,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xa5, 0xc7,0xe8, 0xed,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xcd, 0xa1,0xf5, 0xcd,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xa9, 0xe2,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xfd, 0xe7,0xfe, 0xe7,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xb8, 0xa1,0xf5, 0xee,0xb4, 0xf0,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xf3, 0xa1,0xf5, 0xed,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xcb, 0xa1,0xf5, 0xed,0xd2, 0xc8,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xfc, 0xa1,0xf5, 0xef,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xd8, 0xf3,0xda, 0xf4,0xd2, 0xf4,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcf,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xba,0xca, 0xdd,0xcf, 0xa1,0xf5, 0xdd,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xbd, 0xdd,0xc3, 0xdd,0xbe, 0xdd,0xbf, 0xa1,0xf5, 0xdd,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xcc, 0xa1,0xf5, 0xdd,0xc8, 0xdd,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb9,0xbd, 0xa1,0xf5, 0xdd,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xcb, 0xf1,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xcc, 0xa1,0xf5, 0xea,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xfd, 0xa1,0xf5, 0xda,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xb1, 0xee,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xdc, 0xa1,0xf5, 0xea,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc5, 0xa1,0xf5, 0xf5,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xf7, 0xe9,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xd5, 0xa1,0xf5, 0xe5,0xd6, 0xdb,0xa9, 0xa1,0xf5, 0xdb,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xa2, 0xf4,0xfe, 0xa1,0xf5, 0xf5,0xa1, 0xa1,0xf5, 0xee,0xd5, 0xa1,0xf5, 0xee,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xd7, 0xee,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xf1, 0xda,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xfc, 0xa1,0xf5, 0xe2,0xc0, 0xa1,0xf5, 0xed,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcf,0xc9, 0xd8,0xf1, 0xa1,0xf5, 0xd9,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xc3, 0xa1,0xf5, 0xe0,0xc1, 0xe0,0xc4, 0xdf,0xef, 0xa1,0xf5, 0xe0,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xb2, 0xa1,0xf5, 0xe0,0xc7, 0xe0,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xf7, 0xdb,0xee, 0xeb,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xba,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xc1, 0xa1,0xf5, 0xe6,0xca, 0xa1,0xf5, 0xeb,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xb0, 0xa1,0xf5, 0xe1,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xbb, 0xe3,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xad, 0xea,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf8, 0xde,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf4, 0xa1,0xf5, 0xcc,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xce,0xe6, 0xb4,0xb7, 0xa1,0xf5, 0xde,0xf5, 0xa1,0xf5, 0xde,0xf6, 0xa1,0xf5, 0xde,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xa8, 0xb4,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xa9, 0xe9,0xab, 0xe9,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xaa, 0xa1,0xf5, 0xe9,0xa2, 0xe9,0xb1, 0xe9,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xa7, 0xa1,0xf5, 0xec,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xe7, 0xa1,0xf5, 0xe4,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xe1, 0xb3,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xe6, 0xe4,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xe4, 0xec,0xd2, 0xec,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd5,0xe8, 0xe7,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xf1, 0xa1,0xf5, 0xf0,0xe2, 0xf0,0xf3, 0xb1,0xd4, 0xa1,0xf5, 0xf0,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xd6, 0xed,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc2,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb0,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb2,0xdf, 0xa1,0xf5, 0xf3,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xb0, 0xe7,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xc7, 0xf4,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xd6,0xfa, 0xa1,0xf5, 0xeb,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xe1, 0xa1,0xf5, 0xf4,0xba, 0xf4,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xd8, 0xdd,0xd9, 0xa1,0xf5, 0xdd,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xdd, 0xa1,0xf5, 0xdd,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xa6, 0xd2,0xa9, 0xa1,0xf5, 0xdd,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xd9, 0xa1,0xf5, 0xf2,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xfe, 0xb4,0xa5, 0xa1,0xf5, 0xda,0xb2, 0xda,0xb4, 0xda,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xb3, 0xda,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb5,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xfb, 0xe9,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xd9, 0xa1,0xf5, 0xe5,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd4,0xc7, 0xda,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xcd,0xaa, 0xf5,0xa5, 0xee,0xe8, 0xa1,0xf5, 0xee,0xe6, 0xee,0xda, 0xee,0xdb, 0xee,0xdd, 0xa1,0xf5, 0xee,0xe1, 0xef,0xa5, 0xee,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xe3, 0xee,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xf3, 0xf6,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbd,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xfe, 0xa1,0xf5, 0xf1,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xec, 0xa1,0xf5, 0xf6,0xbc, 0xd9,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xc7, 0xc0,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xd7, 0xa1,0xf5, 0xe0,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xc5, 0xdf,0xe9, 0xe0,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc9,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xef, 0xe1,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xaf, 0xea,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xd2, 0xa1,0xf5, 0xbf,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc1,0xcc, 0xde,0xfb, 0xde,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xbc, 0xe9,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xc0, 0xa1,0xf5, 0xe9,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc5,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xf1, 0xa1,0xf5, 0xe4,0xef, 0xa1,0xf5, 0xe4,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd1,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xf4, 0xe2,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xf8, 0xf0,0xfd, 0xa1,0xf5, 0xf0,0xfa, 0xa1,0xf5, 0xf1,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xb3,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xa6, 0xa1,0xf5, 0xd8,0xba, 0xa1,0xf5, 0xed,0xda, 0xa1,0xf5, 0xb2,0xea, 0xed,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xe2, 0xa1,0xf5, 0xf1,0xbf, 0xa1,0xf5, 0xf1,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xe4, 0xa1,0xf5, 0xb9,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xeb, 0xa1,0xf5, 0xd4,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xb5, 0xa1,0xf5, 0xe7,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xeb, 0xf4,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xbc, 0xeb,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf5, 0xa1,0xf5, 0xdd,0xf2, 0xa1,0xf5, 0xdd,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf3, 0xdd,0xf4, 0xdd,0xe8, 0xdd,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xe1, 0xa1,0xf5, 0xb1,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xe2, 0xf2,0xe0, 0xc0,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd1,0xd1, 0xa1,0xf5, 0xf2,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xd5, 0xa1,0xf5, 0xf1,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xd5, 0xd3,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xa8, 0xf5,0xaa, 0xa1,0xf5, 0xd2,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xef, 0xee,0xee, 0xa1,0xf5, 0xee,0xf0, 0xa1,0xf5, 0xee,0xf7, 0xef,0xa2, 0xef,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xfe, 0xef,0xa8, 0xee,0xf1, 0xf6,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xd3, 0xd9,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xdb, 0xdb,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xe1, 0xdf,0xd8, 0xb6,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xd9, 0xd1,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xdc, 0xa1,0xf5, 0xdf,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xd7, 0xe1,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xdc, 0xa1,0xf5, 0xe2,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xb1,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xfe, 0xa1,0xf5, 0xbe,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb5,0xa7, 0xde,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc1,0xac, 0xa1,0xf5, 0xe9,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xa7, 0xa1,0xf5, 0xf2,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xf8, 0xe4,0xf7, 0xe4,0xf9, 0xe4,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb3,0xce, 0xa1,0xf5, 0xe4,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xaf, 0xe7,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xfb, 0xf0,0xf9, 0xf0,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xdf, 0xec,0xfa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc1, 0xa1,0xf5, 0xf3,0xe6, 0xa1,0xf5, 0xf3,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xdb, 0xf4,0xda, 0xf4,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xbd, 0xe7,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xc1, 0xe7,0xc2, 0xe7,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc6,0xcc, 0xf4,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc4,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xea, 0xdd,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xfb, 0xdc,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xbd, 0xa1,0xf5, 0xf2,0xf6, 0xf2,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd0,0xab, 0xce,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xf3, 0xa1,0xf5, 0xf2,0xfa, 0xa1,0xf5, 0xf2,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd6,0xdc, 0xa1,0xf5, 0xea,0xe3, 0xa1,0xf5, 0xea,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb5,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xac, 0xd5,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xf2, 0xef,0xab, 0xef,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xb2, 0xee,0xfa, 0xef,0xaf, 0xa1,0xf5, 0xef,0xb0, 0xa1,0xf5, 0xf6,0xc8, 0xa1,0xf5, 0xef,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xcf, 0xe3,0xcd, 0xa1,0xf5, 0xd1,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xac, 0xa1,0xf5, 0xf6,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xc4, 0xb2,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xc9, 0xd0,0xd0, 0xf6,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xd4, 0xa1,0xf5, 0xe6,0xd3, 0xe6,0xcd, 0xa1,0xf5, 0xe6,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xe8, 0xed,0xad, 0xba,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xa8, 0xa1,0xf5, 0xdf,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xd3, 0xa1,0xf5, 0xe9,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xec, 0xe9,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc2,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xc7, 0xa1,0xf5, 0xec,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xb3, 0xa1,0xf5, 0xe1,0xfd, 0xe1,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xac, 0xf1,0xa2, 0xf1,0xa9, 0xa1,0xf5, 0xf1,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xf4, 0xa1,0xf5, 0xf3,0xf6, 0xf3,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc5,0xd5, 0xf1,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc1,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xbf, 0xa1,0xf5, 0xdc,0xe9, 0xa1,0xf5, 0xdd,0xdb, 0xde,0xa8, 0xdd,0xa1, 0xdd,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xa5, 0xf2,0xfb, 0xa1,0xf5, 0xf3,0xa2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd0,0xfa, 0xda,0xbb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xca, 0xda,0xcc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xe1, 0xf5,0xe4, 0xd3,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xa6, 0xa1,0xf5, 0xf5,0xad, 0xf5,0xaf, 0xf5,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xc3, 0xef,0xc4, 0xef,0xba, 0xa1,0xf5, 0xd5,0xe0, 0xef,0xaa, 0xa1,0xf5, 0xef,0xbc, 0xa1,0xf5, 0xef,0xb9, 0xef,0xbe, 0xee,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xd5, 0xa1,0xf5, 0xe3,0xd0, 0xd1,0xcb, 0xa1,0xf5, 0xe3,0xd1, 0xe3,0xd3, 0xa1,0xf5, 0xe3,0xd4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb2,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xd6, 0xf6,0xd8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb7, 0xf7,0xe6, 0xa1,0xf5, 0xf7,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xea, 0xdf,0xe2, 0xa1,0xf5, 0xe0,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xda, 0xe0,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xfb, 0xa1,0xf5, 0xb1,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xdd, 0xa1,0xf5, 0xe8,0xdf, 0xbc,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xbd,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbd,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe1,0xfd, 0xe2,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xb5, 0xa1,0xf5, 0xea,0xb4, 0xa1,0xf5, 0xf1,0xaa, 0xa1,0xf5, 0xf0,0xf7, 0xf0,0xef, 0xf0,0xab, 0xa1,0xf5, 0xee,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe1, 0xed,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xfc, 0xa1,0xf5, 0xf3,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xfe, 0xf3,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xdd, 0xe7,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xe3, 0xf4,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xc1, 0xa1,0xf5, 0xee,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xef, 0xeb,0xfe, 0xa1,0xf5, 0xeb,0xfb, 0xeb,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc2,0xa6, 0xf4,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xae, 0xde,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xcc,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xf6, 0xde,0xb6, 0xde,0xb3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xa9, 0xa1,0xf5, 0xf3,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xfc, 0xd5,0xdd, 0xf3,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xd5, 0xa1,0xf5, 0xd6,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc4, 0xe5,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc3,0xd1, 0xf5,0xb0, 0xc8,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xca, 0xa1,0xf5, 0xef,0xc7, 0xd5,0xeb, 0xd5,0xa1, 0xa1,0xf5, 0xef,0xc8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xcc, 0xa1,0xf5, 0xf6,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xf4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xba,0xfd, 0xa1,0xf5, 0xe2,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xcc, 0xf6,0xda, 0xa1,0xf5, 0xf6,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xbb, 0xa1,0xf5, 0xf0,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xea, 0xf6,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xf7, 0xf6,0xb3, 0xd9,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc4,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xa3, 0xa1,0xf5, 0xe1,0xa6, 0xa1,0xf5, 0xea,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe4,0xf3, 0xe3,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xb6, 0xf1,0xb0, 0xf0,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbb,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xc0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xb2, 0xa1,0xf5, 0xf3,0xb3, 0xf3,0xa8, 0xa1,0xf5, 0xf6,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc7,0xfe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc3,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xf8, 0xa1,0xf5, 0xd8,0xd3, 0xea,0xde, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd4,0xe3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xbf, 0xa1,0xf5, 0xea,0xa4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xb5, 0xf5,0xb2, 0xef,0xd8, 0xc1,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xf8, 0xa1,0xf5, 0xef,0xcb, 0xa1,0xf5, 0xef,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xbe, 0xa1,0xf5, 0xe6,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xc2, 0xa1,0xf5, 0xf7,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xc3, 0xf0,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xc1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xf0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd8,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xaa, 0xa1,0xf5, 0xe3,0xf1, 0xe4,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe6, 0xec,0xf2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xd8, 0xa1,0xf5, 0xe7,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xbc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xf9, 0xf2,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xef, 0xa1,0xf5, 0xf6,0xa3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xda, 0xd7,0xab, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb2,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xb3, 0xef,0xde, 0xef,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xa5, 0xef,0xea, 0xa1,0xf5, 0xef,0xd2, 0xa1,0xf5, 0xef,0xa1, 0xa1,0xf5, 0xf6,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xaa, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xca, 0xa1,0xf5, 0xe2,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xc4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xec, 0xf6,0xed, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xef, 0xa1,0xf5, 0xf6,0xf2, 0xf6,0xf3, 0xf6,0xf6, 0xf6,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb5,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xd0, 0xa1,0xf5, 0xe8,0xc0, 0xe8,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xa8, 0xe8,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xc7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe7,0xd7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xd0,0xc6, 0xf4,0xbf, 0xa1,0xf5, 0xdc,0xd7, 0xde,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdc,0xc2, 0xde,0xad, 0xa1,0xf5, 0xde,0xbf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xd3, 0xf2,0xee, 0xa1,0xf5, 0xf3,0xb7, 0xf3,0xb6, 0xa1,0xf5, 0xf1,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbb,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xa6, 0xef,0xe6, 0xa1,0xf5, 0xef,0xe8, 0xa1,0xf5, 0xef,0xe2, 0xa1,0xf5, 0xa1,0xf5, 0xc1,0xcd, 0xef,0xd0, 0xef,0xeb, 0xa1,0xf5, 0xee,0xfc, 0xa1,0xf5, 0xef,0xe4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xa9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xcd, 0xc0,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xe3, 0xa1,0xf5, 0xe6,0xf2, 0xe6,0xf3, 0xe6,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xf8, 0xca,0xc7, 0xa1,0xf5, 0xf6,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xc9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xca, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xf4, 0xa1,0xf5, 0xf7,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xb6, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xb5, 0xa1,0xf5, 0xd9,0xd0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbf,0xf9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xb7, 0xa1,0xf5, 0xe3,0xe3, 0xe4,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xdf, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xcf, 0xe6,0xfe, 0xa1,0xf5, 0xe7,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xdb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xc0, 0xdd,0xfc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc3,0xef, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdb,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xee, 0xa1,0xf5, 0xbb,0xb7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xcb, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xf5, 0xe6,0xee, 0xe6,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe5, 0xf7,0xa3, 0xf7,0xa5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xcf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xbc,0xb9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd9,0xe6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd4,0xdc, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xeb,0xac, 0xc0,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xea, 0xa1,0xf5, 0xa1,0xf5, 0xc2,0xab, 0xd9,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf4,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xea,0xeb, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf5,0xe9, 0xf5,0xf0, 0xf5,0xd1, 0xf5,0xc8, 0xf5,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xf6, 0xa1,0xf5, 0xef,0xd9, 0xa1,0xf5, 0xef,0xec, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xf6, 0xa1,0xf5, 0xe6,0xe8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xf7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xa8, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe4, 0xf7,0xa6, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe6, 0xa1,0xf5, 0xf7,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xd2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xe8, 0xba,0xcd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdf,0xac, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe8,0xef, 0xe9,0xa1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd3,0xb8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xde,0xc2, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xee,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd1,0xe7, 0xf6,0xc5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe9,0xf1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xdf, 0xa1,0xf5, 0xf7,0xae, 0xf6,0xe0, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xd1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xd3, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xd6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xd4, 0xf0,0xd5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xc2, 0xf0,0xc2, 0xa1,0xf5, 0xb7,0xb2, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xfb, 0xa1,0xf5, 0xa1,0xf5, 0xec,0xb4, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc4,0xf6, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe5,0xb0, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xfd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xbd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xc0,0xbe, 0xf5,0xf3, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xc6, 0xa1,0xf5, 0xa1,0xf5, 0xf7,0xaf, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd3,0xae, 0xa1,0xf5, 0xa1,0xf5, 0xdd,0xba, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe0,0xec, 0xdf,0xad, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xd6, 0xa1,0xf5, 0xf4,0xd0, 0xa1,0xf5, 0xe7,0xda, 0xf4,0xee, 0xa1,0xf5, 0xd9,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf1,0xe1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xb4,0xda, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xef,0xe7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe2,0xc3, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xbe, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf3,0xbd, 0xf4,0xf5, 0xf5,0xf2, 0xf5,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xda,0xdd, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf2,0xa8, 0xc8,0xa7, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe6,0xf8, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf0,0xb5, 0xa1,0xf5, 0xa1,0xf5, 0xed,0xb0, 0xe8,0xf9, 0xa1,0xf5, 0xb1,0xee, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xe3,0xce, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xf6,0xe2, 0xf0,0xbf, 0xe4,0xd9, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xd0,0xe2, 0xc0,0xef, 0xa1,0xf5, 0xba,0xe3, 0xd7,0xb1, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, 0xa1,0xf5, }; } // namespace QTerm qterm-0.7.3/src/qtermconvert.h000066400000000000000000000011421332762052600163460ustar00rootroot00000000000000#ifndef QTERMCONVERT_H #define QTERMCONVERT_H #include class QTextCodec; namespace QTerm { class Convert { public: Convert(); ~Convert(); QString S2T(const QString & source); QString T2S(const QString & source); private: char * G2B( const char * string, int length ); char * B2G( const char * string, int length ); void g2b( unsigned char c1, unsigned char c2, char * s); void b2g( unsigned char c1, unsigned char c2, char * s); static unsigned char GtoB[]; static unsigned char BtoG[]; QTextCodec * m_gbk; QTextCodec * m_big5; }; } // namespace QTErm #endif //QTERMCONVERT_H qterm-0.7.3/src/qtermdecode.cpp000066400000000000000000000352601332762052600164540ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermdecode.cpp REVISION: 2001.8.12 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qterm.h" #include "qtermdecode.h" #include "qtermbuffer.h" #include #include //#include #define MODE_MouseX11 0 namespace QTerm { /************************************************************************/ // state for FSM // please read ANSI decoding StateOption Decode::normalState[] = { { CHAR_CR, &Decode::cr, normalState }, { CHAR_LF, &Decode::lf, normalState }, { CHAR_FF, &Decode::lf, normalState }, { CHAR_VT, &Decode::lf, normalState }, { CHAR_TAB, &Decode::tab, normalState }, { CHAR_BS, &Decode::bs, normalState }, { CHAR_BELL, &Decode::bell, normalState }, { CHAR_ESC, 0, escState }, { CHAR_NORMAL, &Decode::normalInput, normalState } }; // state after a ESC_CHAR // only for BBS, so I reduce a lots StateOption Decode::escState[] = { { '[', &Decode::clearParam, bracketState }, { ']', &Decode::terminalAttribute, normalState }, // VT100 { 'D', &Decode::index, normalState }, { 'E', &Decode::lf, normalState }, { 'M', &Decode::reverseIndex, normalState }, { '7', &Decode::saveCursor, normalState }, { '8', &Decode::restoreCursor, normalState }, { 'H', &Decode::test, normalState }, //changeTabStop { 'Z', &Decode::test, normalState }, //reportTerminalType { 'c', &Decode::test, normalState }, //reset { '>', &Decode::test, normalState }, { '<', &Decode::test, normalState }, { CHAR_NORMAL, 0, normalState } }; // state after ESC [ StateOption Decode::bracketState[] = { { '0', &Decode::paramDigit, bracketState }, { '1', &Decode::paramDigit, bracketState }, { '2', &Decode::paramDigit, bracketState }, { '3', &Decode::paramDigit, bracketState }, { '4', &Decode::paramDigit, bracketState }, { '5', &Decode::paramDigit, bracketState }, { '6', &Decode::paramDigit, bracketState }, { '7', &Decode::paramDigit, bracketState }, { '8', &Decode::paramDigit, bracketState }, { '9', &Decode::paramDigit, bracketState }, { ';', &Decode::nextParam, bracketState }, { '?', &Decode::clearParam, privateState}, { 'A', &Decode::cursorUp, normalState }, { 'B', &Decode::cursorDown, normalState }, { 'C', &Decode::cursorRight, normalState }, { 'D', &Decode::cursorLeft, normalState }, { 'H', &Decode::cursorPosition, normalState }, // { 'I', &Decode::tab, normalState }, { 'J', &Decode::eraseScreen, normalState }, { 'K', &Decode::eraseLine, normalState }, { 'L', &Decode::insertLine, normalState }, { 'M', &Decode::deleteLine, normalState }, { 'P', &Decode::deleteStr, normalState }, { 'X', &Decode::eraseStr, normalState }, { 'f', &Decode::cursorPosition, normalState }, { 'h', &Decode::setMode, normalState }, { 'l', &Decode::resetMode, normalState }, { 'm', &Decode::getAttr, normalState }, { 'r', &Decode::setMargins, normalState }, { 's', &Decode::saveCursor, normalState }, { 'u', &Decode::restoreCursor, normalState }, { '@', &Decode::insertStr, normalState }, { CHAR_CR, &Decode::cr, bracketState }, { CHAR_LF, &Decode::lf, bracketState }, { CHAR_FF, &Decode::lf, bracketState }, { CHAR_VT, &Decode::lf, bracketState }, { CHAR_TAB, &Decode::tab, bracketState }, { CHAR_BS, &Decode::bs, bracketState }, { CHAR_BELL, &Decode::bell, bracketState }, { CHAR_NORMAL, 0, normalState } }; // state after ESC [ ? StateOption Decode::privateState[] = { { '0', &Decode::paramDigit, privateState }, { '1', &Decode::paramDigit, privateState }, { '2', &Decode::paramDigit, privateState }, { '3', &Decode::paramDigit, privateState }, { '4', &Decode::paramDigit, privateState }, { '5', &Decode::paramDigit, privateState }, { '6', &Decode::paramDigit, privateState }, { '7', &Decode::paramDigit, privateState }, { '8', &Decode::paramDigit, privateState }, { '9', &Decode::paramDigit, privateState }, { ';', &Decode::nextParam, privateState }, { 'h', &Decode::setMode, normalState }, { 'l', &Decode::resetMode, normalState }, { 's', &Decode::saveMode, normalState }, { 'r', &Decode::restoreMode, normalState }, { CHAR_NORMAL, 0, normalState } }; Decode::Decode(Buffer * buffer, QTextCodec * codec) { m_pBuffer = buffer; currentState = /*Decode::*/normalState; m_defAttr = SETCOLOR(/*0x4b*/NO_COLOR) | SETATTR(NO_ATTR); m_curAttr = m_defAttr; m_pBuffer->setCurAttr(m_curAttr); bCurMode[MODE_MouseX11] = bSaveMode[MODE_MouseX11] = false; m_decoder = codec; m_state = new QTextCodec::ConverterState; m_attrHack = false; } Decode::~Decode() { //delete m_decoder; } // precess input string from telnet socket //void Decode::ansiDecode( const QCString &cstr, int length ) void Decode::decode(const char *cstr, int length) { inputData = cstr; inputLength = length;//inputData.length(); dataIndex = 0; m_bBell = false; int i; StateOption *lastState; m_pBuffer->startDecode(); // here we use FSM to ANSI decoding // use switch case is ok too // but i think use function pointer array can make this clear // you can see the defination at the beginning while (dataIndex < inputLength) { // current state always be initialized to point to the deginning of three structures // ( normalState, escState, bracketState ) i = 0; while (currentState[i].byte != CHAR_NORMAL && currentState[i].byte != inputData[dataIndex]) i++; // action must be allowed to redirect state change // get current state with input character i ( hehe, current now become last one ) lastState = currentState + i; // good !! if (lastState->action != 0) (this->*(lastState->action))(); // reinit current state currentState = lastState->nextState; dataIndex++; } m_pBuffer->endDecode(); } // fill letters into char buffer void Decode::normalInput() { if (m_state->remainingChars == 0 && inputData[dataIndex] < 0x20 && inputData[dataIndex] >= 0x00) // not print char return; bool fixAttr = false; if (m_state->remainingChars != 0 && m_attrHack) { fixAttr = true; m_attrHack = false; } QString str; int n = 0; while ((m_state->remainingChars != 0 || inputData[dataIndex + n] >= 0x20 || inputData[dataIndex + n] < 0x00) && (dataIndex + n) < inputLength) { str += m_decoder->toUnicode(inputData+dataIndex + n, 1, m_state); n++; if (m_state->remainingChars != 0 && (dataIndex + n + 1) < inputLength && inputData[dataIndex+n] == CHAR_ESC && inputData[dataIndex+n+1] == '[') { //qDebug("Decode::normalInput: esc sequence in the middle of a char"); m_attrHack = true; break; } } //QByteArray cstr(inputData + dataIndex, n); //QString str = m_decoder->toUnicode(inputData+dataIndex, n, m_state); m_pBuffer->setBuffer(str, n); if (fixAttr == true) { //qDebug("Decode::normalInput: load attr"); m_pBuffer->restoreAttr(); } if (m_attrHack == true) { //qDebug("Decode::normalInput: save attr"); m_pBuffer->saveAttr(); } n--; dataIndex += n; } void Decode::cleanupState() { delete m_state; m_state = new QTextCodec::ConverterState; m_attrHack = false; } // non-printing characters functions void Decode::cr() { if (m_attrHack == true) cleanupState(); // FIXME: dirty m_pBuffer->cr(); } void Decode::lf() { if (m_attrHack == true) cleanupState(); m_pBuffer->newLine(); } void Decode::ff() { if (m_attrHack == true) cleanupState(); m_pBuffer->eraseEntireScreen(); m_pBuffer->moveCursor(0, 0); } void Decode::tab() { int n = 1; if (bParam) n = param[0]; for (int i = 0; i < n; i++) m_pBuffer->tab(); } void Decode::bs() { m_pBuffer->moveCursorOffset(- 1, 0); } void Decode::bell() { m_bBell = true; } void Decode::setMargins() { m_pBuffer->setMargins(param[0], param[1]); } void Decode::nextLine() { cr(); lf(); } // parameters functions void Decode::clearParam() { nParam = 0; memset(param, 0, sizeof(param)); bParam = false; } // for performance, this grabs all digits void Decode::paramDigit() { bParam = true; // make stream into number // ( e.g. this input character is '1' and this param is 4 // after the following sentence this param is changed to 41 param[nParam] = param[nParam] * 10 + inputData[dataIndex] - '0'; } void Decode::nextParam() { nParam++; } void Decode::saveCursor() { m_pBuffer->saveCursor(); } void Decode::restoreCursor() { m_pBuffer->restoreCursor(); } void Decode::cursorLeft() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->moveCursorOffset(-n, 0); } void Decode::cursorRight() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->moveCursorOffset(n, 0); } void Decode::cursorUp() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->moveCursorOffset(0, -n); } void Decode::index() { m_pBuffer->index(); } void Decode::reverseIndex() { m_pBuffer->reverseIndex(); } void Decode::cursorDown() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->moveCursorOffset(0, n); } void Decode::cursorPosition() { int x = param[1]; int y = param[0]; if (x == 0) x = 1; if (y == 0) y = 1; m_pBuffer->moveCursor(x - 1, y - 1); } // erase functions void Decode::eraseStr() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->eraseStr(n); } // insert functions void Decode::insertStr() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->insertStr(n); } // delete functions void Decode::deleteStr() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->deleteStr(n); } void Decode::eraseLine() { switch (param[0]) { case 0: m_pBuffer->eraseToEndLine(); break; case 1: m_pBuffer->eraseToBeginLine(); break; case 2: m_pBuffer->eraseEntireLine(); break; default: break; } } void Decode::insertLine() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->insertLine(n); } void Decode::deleteLine() { int n = param[0]; if (n < 1) n = 1; m_pBuffer->deleteLine(n); } void Decode::eraseScreen() { switch (param[0]) { case 0: m_pBuffer->eraseToEndScreen(); break; case 1: m_pBuffer->eraseToBeginScreen(); break; case 2: m_pBuffer->eraseEntireScreen(); break; case 3: break; } } void Decode::getAttr() { // get all attributes of character if (!nParam && param[0] == 0) { m_curAttr = m_defAttr ; m_pBuffer->setCurAttr(m_curAttr); return; } char cp = GETCOLOR(m_curAttr); char ea = GETATTR(m_curAttr); for (int n = 0; n <= nParam; n++) { if (param[n] / 10 == 4) { // background color cp = cp & ~BGMASK; cp += SETBG(param[n] % 10); } else if (param[n] / 10 == 3) { // front color cp = cp & ~FGMASK; cp += SETFG(param[n] % 10); } else { switch (param[n]) { case 0: // attr off cp = GETCOLOR(m_defAttr); //NO_COLOR; ea = GETATTR(m_defAttr); //NO_ATTR; break; case 1: // bold ea = SETBOLD(ea); break; case 2: // dim ea = SETDIM(ea); break; case 4: // underline ea = SETUNDERLINE(ea); break; case 5: // blink ea = SETBLINK(ea); break; case 7: // reverse ea = SETREVERSE(ea); break; case 8: // invisible ea = SETINVISIBLE(ea); break; default: break; } } } m_curAttr = SETCOLOR(cp) | SETATTR(ea); m_pBuffer->setCurAttr(m_curAttr); } void Decode::setMode() { for (int i = 0; i <= nParam; i++) { int n = param[i]; switch (n) { case 4: m_pBuffer->setMode(INSERT_MODE); break; case 20: m_pBuffer->setMode(INSERT_MODE); break; case 1000: case 1001: emit mouseMode(true); bCurMode[MODE_MouseX11] = true; break; default: break; } } } void Decode::resetMode() { for (int i = 0; i <= nParam; i++) { int n = param[i]; switch (n) { case 4: m_pBuffer->resetMode(INSERT_MODE); break; case 20: m_pBuffer->resetMode(NEWLINE_MODE); break; case 1000: case 1001: bCurMode[MODE_MouseX11] = false; emit mouseMode(false); break; default: break; } } } void Decode::saveMode() { for (int i = 0; i <= nParam; i++) { int n = param[i]; switch (n) { case 1000: case 1001: bSaveMode[MODE_MouseX11] = bCurMode[MODE_MouseX11]; break; default: break; } } } void Decode::restoreMode() { for (int i = 0; i <= nParam; i++) { int n = param[i]; switch (n) { case 1000: case 1001: bCurMode[MODE_MouseX11] = bSaveMode[MODE_MouseX11]; emit mouseMode(bCurMode[MODE_MouseX11]); break; default: break; } } } void Decode::terminalAttribute() { dataIndex++; int n = 0; while ((inputData[dataIndex + n] != CHAR_BELL) && (dataIndex + n) < inputLength) n++; //QStringList attributes = m_decoder->toUnicode(inputData+dataIndex, n - 1).split(";"); dataIndex += n; } void Decode::test() { } } // namespace QTerm #include qterm-0.7.3/src/qtermdecode.h000066400000000000000000000045341332762052600161210ustar00rootroot00000000000000#ifndef QTERMDECODE_H #define QTERMDECODE_H #include #include class QTextDecoder; namespace QTerm { class Decode; class Buffer; // this for FSM typedef void (Decode::*StateFunc)(); struct StateOption { int byte; // char value to look for; -1==end/default StateFunc action; StateOption *nextState; }; class Decode : public QObject { Q_OBJECT public: Decode(Buffer *, QTextCodec * codec); ~Decode(); // translate data from telnet socket to our own buffer void decode(const char *cstr, int length); bool bellReceive() { return m_bBell; } //signals: // void decodeFinished(); private: // escape sequence actions // you'd better see FSM structure array in Decode.cpp void nextLine(); void getAttr(); void setMargins(); // char screen functions void deleteStr(); void deleteLine(); void insertStr(); void insertLine(); void eraseStr(); void eraseLine(); void eraseScreen(); // cursor functions void saveCursor(); void restoreCursor(); void cursorLeft(); void cursorDown(); void cursorRight(); void cursorUp(); void cursorPosition(); void reverseIndex(); void index(); /*****************************************************************************/ // other escape sequence actions void normalInput(); // action parameters void clearParam(); void paramDigit(); void nextParam(); // non-printing characters void cr(), lf(), ff(), bell(), tab(), bs(); void cleanupState(); void setMode(); void resetMode(); void saveMode(); void restoreMode(); void terminalAttribute(); void test(); signals: void mouseMode(bool); private: bool m_bBell; short m_curAttr, m_defAttr; // ********** ansi decoder states **************** StateOption *currentState; static StateOption normalState[], escState[], bracketState[], privateState[]; // ********** decoder ***************** const char *inputData; int inputLength, dataIndex; int nParam, param[30]; bool bParam; bool bSaveMode[30]; bool bCurMode[30]; Buffer * m_pBuffer; QTextCodec * m_decoder; QTextCodec::ConverterState * m_state; //bool CheckESCState(char next); bool m_test; bool m_attrHack; }; } // namespace QTerm #endif qterm-0.7.3/src/qtermframe.cpp000066400000000000000000001121701332762052600163170ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermframe.cpp REVISION: 2001.10.4 first created. AUTHOR: kingson fiasco hooey *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermwindow.h" #include "qtermframe.h" #include "qtermtimelabel.h" #include "qtermconfig.h" #include "qtermglobal.h" #include "qterm.h" #include "qtermparam.h" #include "qtermtoolbutton.h" #include "statusBar.h" #include "aboutdialog.h" #include "addrdialog.h" #include "prefdialog.h" #include "quickdialog.h" #include "keydialog.h" #include "imageviewer.h" #include "shortcutsdialog.h" #include "toolbardialog.h" #include "closedialog.h" #include "pallete.h" #ifdef DBUS_ENABLED #include "dbus.h" #endif //DBUS_ENABLED #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace QTerm { Frame* Frame::s_instance = 0; //constructor Frame::Frame() : QMainWindow(0) { s_instance = this; setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_NoSystemBackground, false); setAttribute(Qt::WA_DeleteOnClose); setupUi(this); updateTabBar(); connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(windowActivated(QMdiSubWindow*)) ); setCentralWidget(mdiArea); mdiArea->setTabPosition(QTabWidget::South); tray = 0; trayMenu = 0; Global::instance()->setParent(this); #ifdef DBUS_ENABLED DBus::instance()->setParent(this); connect(DBus::instance(), SIGNAL(showQTerm()), this, SLOT(slotShowQTerm())); #endif //DBUS_ENABLED // pallete box Pallete * pallete = new Pallete(ansiToolBar); actionPallete = ansiToolBar->addWidget(pallete); actionPallete->setObjectName(QString::fromUtf8("actionPallete")); connect(pallete, SIGNAL(colorChanged(int,int)), SLOT(palleteColorChanged(int,int))); // symbols table input actionSymbols = new QAction(this); actionSymbols->setObjectName(QString::fromUtf8("actionSymbols")); connect(scrollArea->widget(), SIGNAL(characterSelectedSignal(QString)), SLOT(characterSelected(QString))); //create a progress bar to notify the download process m_pStatusBar = new QTerm::StatusBar(statusBar(), "mainStatusBar"); statusBar()->addWidget(m_pStatusBar, 0); groupActions(); initShortcuts(); //setup toolbar loadToolbars(); // add the custom defined key updateKeyToolBar(); //initialize all settings iniSetting(); loadShortcuts(); initThemeMenu(); initToolbarMenu(); connect(menuWindow, SIGNAL(aboutToShow()), this, SLOT(windowsMenuAboutToShow())); connect(actionQuit, SIGNAL(triggered()), this, SLOT(confirmExitQTerm())); connectMenu = new QMenu(this); QToolButton * connectButton = qobject_cast (terminalToolBar->widgetForAction(actionConnect)); connectButton->setObjectName("buttonConnect"); connect(connectMenu, SIGNAL(aboutToShow()), this, SLOT(connectMenuAboutToShow())); connectButton->setMenu(connectMenu); connectButton->setPopupMode(QToolButton::InstantPopup); installEventFilter(this); } //destructor Frame::~Frame() { } QMenu * Frame::createPopupMenu() { QMenu * menuContext = QMainWindow::createPopupMenu(); menuContext->addAction(actionMenubar); return menuContext; } /********************************************************* * Initialize and Finalize Routines * *********************************************************/ void Frame::iniSetting() { Global::instance()->loadConfig(); restoreGeometry(Global::instance()->loadGeometry("Frame")); restoreState(Global::instance()->loadState("Frame")); if (Global::instance()->isFullScreen()) { actionFullscreen->setChecked(true); showFullScreen(); } QString theme = Global::instance()->style(); QStyle * style = QStyleFactory::create(theme); if (style) qApp->setStyle(style); //language if (Global::instance()->language() == Global::English) actionEnglish->setChecked(true); else if (Global::instance()->language() == Global::SimplifiedChinese) actionSimplified_Chinese->setChecked(true); else if (Global::instance()->language() == Global::TraditionalChinese) actionTraditional_Chinese->setChecked(true); else actionEnglish->setChecked(true); actionNone_Color->setChecked(true); switch (Global::instance()->clipConversion()) { case Global::No_Conversion: actionNone->setChecked(true); break; case Global::Simplified_To_Traditional: actionCHS_CHT->setChecked(true); break; case Global::Traditional_To_Simplified: actionCHT_CHS->setChecked(true); break; default: qDebug("ClipboardConversion: we should not be here"); break; } if (Global::instance()->scrollPosition() == Global::Hide) { actionScroll_Hide->setChecked(true); } else if (Global::instance()->scrollPosition() == Global::Left) { actionScroll_Left->setChecked(true); } else { actionScroll_Right->setChecked(true); } actionStatusbar->setChecked(Global::instance()->showStatusBar()); statusBar()->setVisible(Global::instance()->showStatusBar()); actionMenubar->setChecked(Global::instance()->showMenuBar()); menuBar()->setVisible(Global::instance()->showMenuBar()); setUseTray(Global::instance()->m_pref.bTray); } void Frame::saveSetting() { Global::instance()->saveGeometry("Frame", saveGeometry()); Global::instance()->saveState("Frame", saveState()); Global::instance()->saveConfig(); saveShortcuts(); saveToolbars(); } /********************************************************* * SLOTS * *********************************************************/ // pallete box delegate void Frame::palleteColorChanged(int index, int role) { actionPallete->setData((index << 4) + role); actionPallete->trigger(); } // symbol table delegate void Frame::characterSelected(QString str) { actionSymbols->setData(str); actionSymbols->trigger(); } //addressbook void Frame::on_actionAddressBook_triggered() { addrDialog addr(this, false); if (addr.exec() == 1) { newWindow(addr.param, addr.uuid()); } } //quicklogin void Frame::on_actionQuick_Login_triggered() { quickDialog quick(this); Global::instance()->loadAddress(Global::instance()->addrXml(), QUuid().toString(), quick.param); if (quick.exec() == 1) { newWindow(quick.param); } } //quit bool Frame::confirmExitQTerm() { QList sites; QList windows = mdiArea->subWindowList(); QStringList titleList; for (int i = 0; i < int(windows.count()); ++i) { if ((qobject_cast(windows.at(i)))->isConnected()) { titleList << windows.at(i)->windowTitle(); sites << qobject_cast(windows.at(i))->uuid(); } } if ((!titleList.isEmpty())&&(Global::instance()->m_pref.bWarn)) { CloseDialog close(this); close.setSiteList(titleList); if (close.exec() == 0) { return false; } } saveAndDisconnect(); setUseTray(false); qApp->quit(); // We should never reach here; return true; } void Frame::saveAndDisconnect() { QList sites; QList windows = mdiArea->subWindowList(); QStringList titleList; for (int i = 0; i < int(windows.count()); ++i) { if ((qobject_cast(windows.at(i)))->isConnected()) { titleList << windows.at(i)->windowTitle(); sites << qobject_cast(windows.at(i))->uuid(); } } Global::instance()->saveSession(sites); saveSetting(); // clear zmodem and pool if needed if (Global::instance()->m_pref.bClearPool) { Global::instance()->clearDir(Global::instance()->m_pref.strZmPath); Global::instance()->clearDir(Global::instance()->m_pref.strPoolPath); Global::instance()->clearDir(Global::instance()->m_pref.strPoolPath + "shadow-cache/"); } } //create a new display window void Frame::newWindow(const Param& param, const QString& uuid) { Window * window = new Window(this, param, uuid, mdiArea, 0); window->setWindowTitle(param.m_mapParam["name"].toString()); window->setWindowIcon(QIcon(":/pic/tabpad.png")); window->setAttribute(Qt::WA_DeleteOnClose); window->showMaximized(); //mdiArea->addSubWindow(window); mdiArea->setActiveSubWindow(window); connect(window, SIGNAL(destroyed(QObject*)), this, SLOT(windowClosed(QObject*))); } //slot Help->About QTerm void Frame::on_actionAbout_QTerm_triggered() { aboutDialog about(this); about.exec(); } //slot Help->About Qt void Frame::on_actionAbout_Qt_triggered() { qApp->aboutQt(); } //slot Help->Homepage void Frame::on_actionQTerm_Online_triggered() { QString strUrl = "http://www.qterm.org"; Global::instance()->openUrl(strUrl); } //slot Help->Contents void Frame::on_actionContents_triggered() { QString errorMessage; if (!m_assistant.showPage("qthelp://org.qterm/doc/index.html", &errorMessage)) QMessageBox::warning(this, tr("Assistant"), errorMessage); } //slot Windows menu aboutToShow void Frame::windowsMenuAboutToShow() { menuWindow->clear(); QAction * cascadeAction = menuWindow->addAction(tr("&Cascade"), mdiArea, SLOT(cascadeSubWindows())); QAction * tileAction = menuWindow->addAction(tr("&Tile"), mdiArea, SLOT(tileSubWindows())); if (mdiArea->subWindowList().isEmpty()) { cascadeAction->setEnabled(false); tileAction->setEnabled(false); } menuWindow->addSeparator(); #ifdef Q_OS_MACX // used to dock the programe if (isHidden()) menuWindow->addAction(tr("&Main Window"), this, SLOT(trayShow())); #endif QList windows = mdiArea->subWindowList(); QActionGroup * windowsGroup = new QActionGroup(this); windowsGroup->setExclusive(true); for (int i = 0; i < int(windows.count()); ++i) { QAction * idAction = menuWindow->addAction(windows.at(i)->windowTitle(), this, SLOT(windowsMenuActivated())); idAction->setCheckable(true); idAction->setData(i); windowsGroup->addAction(idAction); idAction->setChecked(mdiArea->activeSubWindow() == windows.at(i)); } } //slot activate the window correspond with the menu id void Frame::windowsMenuActivated() { QObject * action = sender(); if (action == 0) { qDebug("Frame::windowsMenuActivated: No sender found"); return; } int id = qobject_cast(action)->data().toInt(); Window * w = qobject_cast(mdiArea->subWindowList().at(id)); if (w) { w->setFocus(); w->showMaximized(); } else { qDebug() << "Frame::windowsMenuActivated: No window found, id: " << id; } } void Frame::connectMenuAboutToShow() { connectMenu->clear(); connectMenu->addAction(actionQuick_Login); connectMenu->addSeparator(); QMap listSite = Global::instance()->loadFavoriteList( Global::instance()->addrXml()); QMapIterator i(listSite); QSignalMapper * connectMapper = new QSignalMapper(this); while (i.hasNext()) { i.next(); QAction * idAction = new QAction(i.value(), connectMenu); connectMenu->addAction(idAction); connect(idAction, SIGNAL(triggered()), connectMapper, SLOT(map())); connectMapper->setMapping(idAction, i.key()); } connect(connectMapper, SIGNAL(mapped(QString)), this, SLOT(connectMenuActivated(QString))); } void Frame::connectMenuActivated(const QString& uuid) { Param param; if (Global::instance()->loadAddress( Global::instance()->addrXml(), uuid, param)) newWindow(param, uuid); } /********************************************************* * Window Switch Management * *********************************************************/ void Frame::closeWindowByIndex(int index) { QList listWindow = mdiArea->subWindowList(); if (index < listWindow.count()) { QMdiSubWindow *window = listWindow.at(index); window->close(); } } void Frame::windowClosed(QObject*w) { QList listWindow = mdiArea->subWindowList(); // if no window left, only show basic actions if(listWindow.count()==0) { QList actions = findChildren(QRegExp("action*")); foreach(QAction* action, actions) action->setVisible(listBasicActions.contains(action->objectName()) || action->actionGroup()!=actionsExtra); } } void Frame::windowActivated(QMdiSubWindow * w) { WindowBase * wb=qobject_cast(w); if(wb==0) return; QList actions = findChildren(QRegExp("action*")); foreach(QAction* action, actions) { // only show actions belonging to BasicActions or WindowActions action->setVisible(listBasicActions.contains(action->objectName()) || action->actionGroup()!=actionsExtra || wb->hasAction(action->objectName())); // update checkable actions status if (wb->hasAction(action->objectName()) && action->isCheckable()) action->setChecked(wb->isActionChecked(action->objectName())); } } void Frame :: actionsDispatcher(QAction* action) { WindowBase * wb=qobject_cast(mdiArea->activeSubWindow()); if(wb==0) return; if (action->isCheckable()) { QString nameSlot="on_"+action->objectName()+"_toggled"; if(wb->hasAction(action->objectName())) { bool ret=QMetaObject::invokeMethod(wb, nameSlot.toLatin1().constData(), Q_ARG(bool, action->isChecked())); if(!ret) qWarning("Failed to execute %s", nameSlot.toLatin1().constData()); } } else { QString nameSlot="on_"+action->objectName()+"_triggered"; if(wb->hasAction(action->objectName())) { bool ret = false; QVariant data = action->data(); if (data.isNull()) ret=QMetaObject::invokeMethod(wb, nameSlot.toLatin1().constData()); else ret=QMetaObject::invokeMethod(wb, nameSlot.toLatin1().constData(), Q_ARG(QVariant, data)); if(!ret) qWarning("Failed to execute %s", nameSlot.toLatin1().constData()); } } } void Frame::switchWin(int id) { QList windows = mdiArea->subWindowList(); if (windows.count() <= id && id < 200) return; if (id == 200) { mdiArea->activatePreviousSubWindow(); return; } if (id == 201 || id == 202) { mdiArea->activateNextSubWindow(); return; } QMdiSubWindow *w = windows.at(id); if (w != NULL) { mdiArea->setActiveSubWindow(w); } } void Frame::closeEvent(QCloseEvent * clse) { QList windows = mdiArea->subWindowList(); for (int i = 0; i < int(windows.count()); ++i) { if (((Window *)windows.at(i))->isConnected()) { if (Global::instance()->m_pref.bTray) { trayHide(); clse->ignore(); return; } } } if (confirmExitQTerm()) { clse->accept(); } else { clse->ignore(); } } void Frame::updateLang(QAction * action) { if (action == actionEnglish) Global::instance()->setLanguage(Global::English); else if (action == actionSimplified_Chinese) Global::instance()->setLanguage(Global::SimplifiedChinese); else if (action == actionTraditional_Chinese) Global::instance()->setLanguage(Global::TraditionalChinese); } void Frame::connectIt() { if (mdiArea->activeSubWindow() == NULL) { Param param; Global::instance()->loadAddress(Global::instance()->addrXml(), QUuid().toString(), param); newWindow(param); } else if (!qobject_cast(mdiArea->activeSubWindow())->isConnected()) qobject_cast(mdiArea->activeSubWindow())->reconnect(); } void Frame::updateESC(QAction * action) { if (action == actionNone_Color) { Global::instance()->setEscapeString(""); } else if (action == actionESC_ESC) { Global::instance()->setEscapeString("^[^[["); } else if (action == actionCtrl_U) { Global::instance()->setEscapeString("^u["); } else if (action == actionCustom) { bool ok; QString strEsc = QInputDialog::getText(this, "define escape", "scape string *[", QLineEdit::Normal, Global::instance()->escapeString(), &ok); if (ok) Global::instance()->setEscapeString(strEsc); } else { qDebug("updateESC: should not be here"); } } void Frame::updateCodec(QAction * action) { if (action == actionNone) { Global::instance()->setClipConversion(Global::No_Conversion); } else if (action == actionCHS_CHT) { Global::instance()->setClipConversion(Global::Simplified_To_Traditional); } else if (action == actionCHT_CHS) { Global::instance()->setClipConversion(Global::Traditional_To_Simplified); } else { qDebug("updateCodec: should not be here"); } } void Frame::on_actionFont_triggered() { bool ok; QFont font = QFontDialog::getFont(&ok, qApp->font()); if (Global::instance()->m_pref.bAA) font.setStyleStrategy(QFont::PreferAntialias); if (ok == true) { qApp->setFont(font); } } void Frame::on_actionMenubar_toggled(bool show) { Global::instance()->setMenuBar(show); menuBar()->setVisible(show); } void Frame::on_actionFullscreen_triggered(bool isFullScreen) { Global::instance()->setFullScreen(isFullScreen); //TODO: add an item to the popup menu so we can go back to normal without touch the keyboard if (isFullScreen) { Global::instance()->saveGeometry("Frame",saveGeometry()); Global::instance()->saveState("Frame",saveState()); mainToolBar->hide(); terminalToolBar->hide(); keyToolBar->hide(); ansiToolBar->hide(); //mdiArea->findChild()->hide(); QList windows = mdiArea->subWindowList(); foreach (QMdiSubWindow * window, windows) { window->setWindowFlags(Qt::FramelessWindowHint); } showFullScreen(); mdiArea->setViewMode(QMdiArea::SubWindowView); mdiArea->activeSubWindow()->showMaximized(); } else { restoreGeometry(Global::instance()->loadGeometry("Frame")); restoreState(Global::instance()->loadState("Frame")); emit scrollChanged(); QList windows = mdiArea->subWindowList(); foreach (QMdiSubWindow * window, windows) { window->setWindowFlags(Qt::SubWindow); } showNormal(); mdiArea->setViewMode(QMdiArea::TabbedView); mdiArea->activeSubWindow()->showMaximized(); updateTabBar(); } actionFullscreen->setChecked(isFullScreen); } void Frame::initToolbarMenu() { menuToolbar->clear(); foreach(QToolBar *toolbar, findChildren()) menuToolbar->addAction(toolbar->toggleViewAction()); } void Frame::initThemeMenu() { menuTheme->clear(); QActionGroup * themesGroup = new QActionGroup(this); QStringList styles = QStyleFactory::keys(); for (QStringList::ConstIterator it = styles.begin(); it != styles.end(); it++) themesGroup->addAction(insertThemeItem(*it)); connect(themesGroup, SIGNAL(triggered(QAction*)), this, SLOT(themesMenuActivated(QAction*))); } QAction * Frame::insertThemeItem(const QString & themeitem) { QAction * idAction = new QAction(themeitem, this); menuTheme->addAction(idAction); idAction->setCheckable(true); idAction->setChecked( themeitem.compare(qApp->style()->objectName(), Qt::CaseInsensitive)==0); return idAction; } void Frame::themesMenuActivated(QAction * action) { QString theme = action->text(); QStyle * style = QStyleFactory::create(theme); if (style) { qApp->setStyle(style); Global::instance()->setStyle(theme); } } void Frame::updateScroll(QAction * action) { if (action == actionScroll_Hide) { Global::instance()->setScrollPosition(Global::Hide); } else if (action == actionScroll_Left) { Global::instance()->setScrollPosition(Global::Left); } else if (action == actionScroll_Right) { Global::instance()->setScrollPosition(Global::Right); } else { qDebug("updateScroll: should not be here"); } emit scrollChanged(); } void Frame::on_actionStatusbar_toggled(bool isEnabled) { Global::instance()->setStatusBar(isEnabled); statusBar()->setVisible(isEnabled); emit statusBarChanged(isEnabled); } void Frame::on_actionDefault_Session_Setting_triggered() { addrDialog set(this, true); // load default Global::instance()->loadAddress(Global::instance()->addrXml(),QUuid().toString(), set.param); set.updateData(false); if (set.exec() == 1) { QDomDocument doc = Global::instance()->addrXml(); Global::instance()->saveAddress(doc, QUuid().toString(), set.param); Global::instance()->saveAddressXml(doc); } } void Frame::on_actionPreference_triggered() { prefDialog pref(this); if (pref.exec() == 1) { Global::instance()->loadPrefence(); setUseTray(Global::instance()->m_pref.bTray); } } void Frame::on_actionKey_Setup_triggered() { keyDialog keyDlg(this); if (keyDlg.exec() == 1) { updateKeyToolBar(); } } void Frame::on_actionPrint_triggered() { QPrinter printer(QPrinter::HighResolution); QPrintDialog *dialog = new QPrintDialog(&printer, this); dialog->setWindowTitle(tr("Print Document")); if (dialog->exec() != QDialog::Accepted) return; QPainter painter; painter.begin(&printer); QPixmap screen = QPixmap::grabWidget(qobject_cast(mdiArea->activeSubWindow())); QPixmap target = screen.scaled(printer.pageRect().width(),printer.pageRect().height(),Qt::KeepAspectRatio,Qt::SmoothTransformation); painter.drawPixmap(0,0,target); painter.end(); } void Frame::on_actionImage_Viewer_triggered() { Image *pViewer = new Image(Global::instance()->m_pref.strPoolPath); pViewer->show(); } void Frame::keyClicked(int id) { if (qobject_cast(mdiArea->activeSubWindow()) == NULL) return; Config * conf = Global::instance()->fileCfg(); QString strItem = QString("key%1").arg(id); QString strTmp = conf->getItemValue("key", strItem).toString(); if (strTmp[0] == '0') { // key qobject_cast(mdiArea->activeSubWindow())->externInput(strTmp.mid(1)); } else if (strTmp[0] == '1') { // script qobject_cast(mdiArea->activeSubWindow())->runScript(strTmp.mid(1)); } else if (strTmp[0] == '2') { // program system((strTmp.mid(1) + " &").toLocal8Bit()); } } void Frame::initShortcuts() { int i = 0; QShortcut * shortcut = NULL; // FIXME: map number to favorite site list // shortcuts to addressbook entries //QSignalMapper * addrMapper = new QSignalMapper(this); //for (i = 0; i < 9; i++) { // shortcut = new QShortcut(Qt::CTRL + Qt::ALT + 0x30 + 1 + i, this); // shortcut->setObjectName(QString(tr("Open addressbook enetry %1")).arg(i+1)); // connect(shortcut, SIGNAL(activated()), addrMapper, SLOT(map())); // addrMapper->setMapping(shortcut, i); //} //connect(addrMapper, SIGNAL(mapped(int)), this, SLOT(connectMenuActivated(int))); // shortcuts to swtch windows QSignalMapper * windowMapper = new QSignalMapper(this); for (i = 0; i < 9; i++) { shortcut = new QShortcut(Qt::ALT + 0x30 + 1 + i, this); shortcut->setObjectName(QString(tr("Switch to window %1")).arg(i+1)); connect(shortcut, SIGNAL(activated()), windowMapper, SLOT(map())); windowMapper->setMapping(shortcut, i); } shortcut = new QShortcut(Qt::ALT + Qt::Key_Left, this); shortcut->setObjectName(tr("Previous window")); connect(shortcut, SIGNAL(activated()), windowMapper, SLOT(map())); windowMapper->setMapping(shortcut, 200); shortcut = new QShortcut(Qt::ALT + Qt::Key_Right, this); shortcut->setObjectName(tr("Next window")); connect(shortcut, SIGNAL(activated()), windowMapper, SLOT(map())); windowMapper->setMapping(shortcut, 201); connect(windowMapper, SIGNAL(mapped(int)), this, SLOT(switchWin(int))); } QMenu * Frame::genPopupMenu(QWidget * owner) { QMenu * popupMenu = new QMenu(owner); popupMenu->addAction(actionMenubar); popupMenu->addAction(actionFullscreen); popupMenu->addSeparator(); popupMenu->addAction(actionCopy); popupMenu->addAction(actionPaste); popupMenu->addAction(actionCopy_Article); popupMenu->addSeparator(); popupMenu->addAction(actionCurrent_Session_Setting); return popupMenu; } void Frame::updateKeyToolBar() { keyToolBar->clear(); keyToolBar->addAction(actionKey_Setup); Config * conf = Global::instance()->fileCfg(); QString strItem, strTmp; strTmp = conf->getItemValue("key", "num").toString(); int num = strTmp.toInt(); for (int i = 0; i < num; i++) { strItem = QString("name%1").arg(i); strTmp = conf->getItemValue("key", strItem).toString(); ToolButton *button = new ToolButton(keyToolBar, i, strTmp); button->setText(strTmp); strItem = QString("key%1").arg(i); strTmp = (conf->getItemValue("key", strItem).toString()); connect(button, SIGNAL(buttonClicked(int)), this, SLOT(keyClicked(int))); keyToolBar->addWidget(button); } } void Frame::popupFocusIn(Window *) { // bring to font if (isHidden()) { show(); } if (isMinimized()) { if (isMaximized()) showMaximized(); else showNormal(); } raise(); activateWindow(); } void Frame::setUseTray(bool use) { if (use == false) { if (tray) { delete tray; tray = 0; delete trayMenu; trayMenu = 0; } return; } if (tray || !QSystemTrayIcon::isSystemTrayAvailable()) return; trayMenu = new QMenu; connect(trayMenu, SIGNAL(aboutToShow()), SLOT(buildTrayMenu())); tray = new QSystemTrayIcon(this); tray->setIcon(QIcon(":/pic/qterm_tray.png")); tray->setContextMenu(trayMenu); connect(tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); tray->show(); } void Frame::buildTrayMenu() { if (!trayMenu) return; trayMenu->clear(); if (isHidden()) trayMenu->addAction(tr("&Show"), this, SLOT(trayShow())); else trayMenu->addAction(tr("&Hide"), this, SLOT(trayHide())); trayMenu->addSeparator(); trayMenu->addAction(tr("&About"), this, SLOT(aboutQTerm())); trayMenu->addAction(tr("&Exit"), this, SLOT(confirmExitQTerm())); } void Frame::trayActivated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { case QSystemTrayIcon::Trigger: case QSystemTrayIcon::DoubleClick: if (isHidden()) { trayShow(); } else { trayHide(); } break; case QSystemTrayIcon::Context: return; default: return; } } void Frame::trayShow() { show(); // bring to font if (isHidden()) { show(); } if (isMinimized()) { if (isMaximized()) showMaximized(); else #ifdef Q_OS_MACX showMaximized(); #else showNormal(); #endif } restoreGeometry(Global::instance()->loadGeometry("Frame")); restoreState(Global::instance()->loadState("Frame")); raise(); activateWindow(); } void Frame::trayHide() { Global::instance()->saveGeometry("Frame",saveGeometry()); Global::instance()->saveState("Frame",saveState()); hide(); } void Frame::buzz() { int xp = x(); int yp = y(); QTime t; t.start(); for (int i = 32; i > 0;) { if (t.elapsed() >= 1) { int delta = i >> 2; int dir = i & 3; int dx = ((dir == 1) || (dir == 2)) ? delta : -delta; int dy = (dir < 2) ? delta : -delta; move(xp + dx, yp + dy); t.restart(); i--; } } move(xp, yp); } void Frame::saveShortcuts() { Config * conf = Global::instance()->fileCfg(); QList actions = findChildren(QRegExp("action*")); foreach (QAction* action, actions) { conf->setItemValue("Shortcuts", action->objectName(), action->shortcut().toString()); } QList shortcuts = findChildren(); foreach (QShortcut* shortcut, shortcuts) { conf->setItemValue("Shortcuts", shortcut->objectName(), shortcut->key().toString()); } conf->save(); } void Frame::loadShortcuts() { Config * conf = Global::instance()->fileCfg(); QList actions = findChildren(QRegExp("action*")); foreach(QAction* action, actions) { QString keyseq=conf->getItemValue("Shortcuts", action->objectName()).toString(); if (!keyseq.isEmpty()) action->setShortcut(QKeySequence(keyseq)); } QList shortcuts = findChildren(); foreach (QShortcut* shortcut, shortcuts) { QString keyseq=conf->getItemValue("Shortcuts", shortcut->objectName()).toString(); if (!keyseq.isEmpty()) shortcut->setKey(QKeySequence(keyseq)); } } void Frame::on_actionConfigure_Shortcuts_triggered() { QList actions = findChildren(QRegExp("action*")); QList shortcuts = findChildren(); ShortcutsDialog sd(this,actions,shortcuts); sd.exec(); saveShortcuts(); } void Frame::saveToolbars() { Config * conf = Global::instance()->fileCfg(); QSize toolButtonIconSize; foreach (QToolBar *toolbar, findChildren()) { toolButtonIconSize = toolbar->iconSize(); QStringList listActions; if (toolbar == keyToolBar) continue; foreach(QAction* action, toolbar->actions()) { if (action->objectName() == "actionConnectButton") continue; if(action->isSeparator()) listActions+="Separator"; else if (action->objectName().isEmpty()==false) listActions+=action->objectName(); else qDebug() << toolbar->objectName() << ": Action without an object name cannot be saved"; } conf->setItemValue("ToolBars", toolbar->objectName(), listActions); } conf->setItemValue("ToolBars", "ButtonStyle", int(toolButtonStyle())); conf->setItemValue("ToolBars", "IconSize", toolButtonIconSize); conf->save(); } void Frame::loadToolbars() { Config * conf = Global::instance()->fileCfg(); QList toolbars = findChildren(); QToolBar * toolbar; foreach (toolbar, toolbars) { QStringList actions=conf->getItemValue("ToolBars", toolbar->objectName()).toStringList(); if (toolbar == keyToolBar) continue; foreach(QString action, actions) { QAction* act; if (action.isEmpty()) continue; if(action=="Separator") toolbar->addSeparator(); else { act=findChild(action); if (act != 0 && act->actionGroup()->objectName() == "extraGroup") // Only the actions in the extraGroup can be added to the toolbar toolbar->addAction(act); } } } setToolButtonStyle(Qt::ToolButtonStyle(conf->getItemValue("ToolBars", "ButtonStyle").toInt())); setIconSize(conf->getItemValue("ToolBars", "IconSize").toSize()); } void Frame::on_actionConfigure_Toolbars_triggered() { ToolbarDialog td(this); td.exec(); saveToolbars(); } void Frame::slotShowQTerm() { popupFocusIn(NULL); } void Frame::keyPressEvent(QKeyEvent * e) { if (mdiArea->subWindowList().count() == 0 && (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)) { loadSession(); e->accept(); } else { e->ignore(); } } void Frame::mouseReleaseEvent(QMouseEvent * e) { if (mdiArea->subWindowList().count() == 0 && (e->button() == Qt::LeftButton)) { loadSession(); e->accept(); } else { e->ignore(); } } void Frame::loadSession() { QList sites = Global::instance()->loadSession(); if (sites.empty()) { connectMenuActivated(""); } else { for (int i = 0; i < sites.size(); i++) { QString uuid = sites.at(i).toString(); connectMenuActivated(uuid); } } } bool Frame::showMessage(const QString & title, const QString & message, int millisecondsTimeoutHint) { if (tray == 0 || !QSystemTrayIcon::isSystemTrayAvailable() || !QSystemTrayIcon::supportsMessages()) { return false; } tray->showMessage(title, message, QSystemTrayIcon::Information, millisecondsTimeoutHint); return true; } void Frame::groupActions() { // These are actions which are enabled without any subwindow listBasicActions << "actionNew_Console" << "actionConnect" << "actionQuick_Login" << "actionAddressBook" << "actionQuit" << "actionNew_ANSI" << "actionOpen_ANSI" << "actionFont" << "actionStatusbar" << "actionMenubar" << "actionFullscreen" << "actionImage_Viewer" << "actionManage_Favarites" << "actionArticle_Manager" << "actionDefault_Session_Setting" << "actionPreference" << "actionConfigure_Toolbars" << "actionConfigure_Shortcuts" << "actionKey_Setup" << "actionQTerm_Online" << "actionContents" <<"actionWhat_s_this" << "actionAbout_QTerm" << "actionAbout_Qt"; QActionGroup *group; // These actions belong to Edit->Past with Color submenu group = new QActionGroup(this); group->addAction(actionNone_Color); group->addAction(actionESC_ESC); group->addAction(actionCtrl_U); group->addAction(actionCustom); connect(group, SIGNAL(triggered(QAction*)), this, SLOT(updateESC(QAction*))); // These actions belong to Edit->Clipboard Conversion submenu group = new QActionGroup(this); group->addAction(actionNone); group->addAction(actionCHS_CHT); group->addAction(actionCHT_CHS); connect(group, SIGNAL(triggered(QAction*)), this, SLOT(updateCodec(QAction*))); // These actions belong to View->Scrollbar submenu group = new QActionGroup(this); group->addAction(actionScroll_Hide); group->addAction(actionScroll_Left); group->addAction(actionScroll_Right); connect(group, SIGNAL(triggered(QAction*)), this, SLOT(updateScroll(QAction*))); // These actions belong to View->Language submenu group = new QActionGroup(this); group->addAction(actionEnglish); group->addAction(actionSimplified_Chinese); group->addAction(actionTraditional_Chinese); connect(group, SIGNAL(triggered(QAction*)), this, SLOT(updateLang(QAction*))); // The other actions are grouped and redirected to subwindow QList actions = findChildren(QRegExp("action*")); actionsExtra = new QActionGroup(this); actionsExtra->setObjectName("extraGroup"); actionsExtra->setExclusive(false); connect(actionsExtra, SIGNAL(triggered(QAction*)), this, SLOT(actionsDispatcher(QAction*))); foreach(QAction* action, actions) { action->setVisible(listBasicActions.contains(action->objectName()) || action->actionGroup() != 0); if (action->actionGroup() == 0) actionsExtra->addAction(action); } } void Frame::updateTabBar() { foreach(QTabBar* tabBar, findChildren()) { tabBar->setTabsClosable(true); tabBar->setMovable(true); tabBar->setExpanding(false); connect(tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(closeWindowByIndex(int))); } } } #include qterm-0.7.3/src/qtermframe.h000066400000000000000000000071731332762052600157720ustar00rootroot00000000000000#ifndef QTERMFRAME_H #define QTERMFRAME_H #include "ui_mainframe.h" #include "assistantclient.h" #include "statusBar.h" #include #include #include #include #include #include #include #include #include class QLineEdit; class QToolButton; class QMdiArea; class QTabBar; class QFontDialog; namespace QTerm { class Window; class QTermTimeLabel; class Param; class Config; class Frame : public QMainWindow, public Ui::Frame { Q_OBJECT public: Frame(); ~Frame(); static Frame * instance() { return s_instance; } QMenu * createPopupMenu(); void popupFocusIn(Window * window = 0); void buzz(); QMenu * genPopupMenu(QWidget * owner); bool showMessage(const QString & title, const QString & message, int millisecondsTimeoutHint = 10000); public slots: bool confirmExitQTerm(); void saveAndDisconnect(); signals: void scrollChanged(); void statusBarChanged(bool); protected slots: // custum key void on_actionKey_Setup_triggered(); void keyClicked(int); // theme submenu void initThemeMenu(); void themesMenuActivated(QAction *); // toolbar submenu void initToolbarMenu(); // File void on_actionAddressBook_triggered(); void on_actionQuick_Login_triggered(); void on_actionPrint_triggered(); // View void on_actionFont_triggered(); void on_actionMenubar_toggled(bool); void on_actionStatusbar_toggled(bool); void on_actionFullscreen_triggered(bool); // BBS void on_actionImage_Viewer_triggered(); // Options void on_actionDefault_Session_Setting_triggered(); void on_actionPreference_triggered(); void on_actionConfigure_Shortcuts_triggered(); void on_actionConfigure_Toolbars_triggered(); // Help void on_actionAbout_QTerm_triggered(); void on_actionQTerm_Online_triggered(); void on_actionAbout_Qt_triggered(); void on_actionContents_triggered(); protected slots: // Action groups void connectIt(); void updateESC(QAction*); void updateCodec(QAction*); void updateScroll(QAction*); void updateLang(QAction*); void windowsMenuAboutToShow(); void windowsMenuActivated(); void connectMenuAboutToShow(); void connectMenuActivated(const QString &uuid); void closeWindowByIndex(int index); void windowActivated(QMdiSubWindow*); void windowClosed(QObject*); void actionsDispatcher(QAction*); void trayActivated(QSystemTrayIcon::ActivationReason reason); void trayHide(); void trayShow(); void buildTrayMenu(); void switchWin(int); void slotShowQTerm(); void palleteColorChanged(int index, int role); void characterSelected(QString str); protected: //variables QMenu * connectMenu; QToolButton *connectButton; QMenu *trayMenu; QSystemTrayIcon *tray; QAction *actionPallete; QAction *actionSymbols; StatusBar *m_pStatusBar; //function void newWindow(const Param& param, const QString& uuid=""); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); void mouseReleaseEvent(QMouseEvent *); void selectStyleMenu(int , int); void iniSetting(); void initShortcuts(); void groupActions(); void saveSetting(); void saveShortcuts(); void loadShortcuts(); void saveToolbars(); void loadToolbars(); void loadSession(); void updateKeyToolBar(); QAction * insertThemeItem(const QString &); void setUseTray(bool); void updateTabBar(); private: static Frame * s_instance; AssistantClient m_assistant; QStringList listBasicActions; QActionGroup* actionsExtra; }; } // namespace QTerm #endif //QTERMFRAME_H qterm-0.7.3/src/qtermglobal.cpp000066400000000000000000000604011332762052600164640ustar00rootroot00000000000000// // C++ Implementation: Global // // Description: // // // Author: hooey , (C) 2008 // // Copyright: See COPYING file that comes with this distribution // // #include "qtermglobal.h" #include "qtermconfig.h" #include "qtermparam.h" #include "qtermconvert.h" #ifdef KWALLET_ENABLED #include "wallet.h" #endif // KWALLET_ENABLED #include "qterm.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) #include #include #ifndef MAX_PATH #define MAX_PATH 128 #endif #endif namespace QTerm { Global * Global::m_Instance = 0; Global * Global::instance() { static QMutex mutex; if (!m_Instance) { mutex.lock(); if (!m_Instance) m_Instance = new Global; mutex.unlock(); } return m_Instance; } Global::Global() : m_fileCfg("./qterm.cfg"), m_addrCfg("./address.cfg"), m_addrXml("./address.xml"), m_pathLib("./"), m_pathCfg("./"), m_windowState(), m_status(INIT_OK), m_style(), m_fullScreen(false), m_language(Global::English) { #ifdef KWALLET_ENABLED if (Wallet::isWalletAvailable()) { qDebug() << "KWallet service found"; m_wallet = new Wallet(this); } else { m_wallet = NULL; } #endif // KWALLET_ENABLED if (!iniWorkingDir(qApp->arguments()[0])) { m_status = INIT_ERROR; return; } m_translatorQT = new QTranslator(0); m_translatorQTerm = new QTranslator(0); m_config = new Config(m_fileCfg); m_converter = new Convert(); if (!iniSettings()) { m_status = INIT_ERROR; return; } } bool Global::isOK() { if (m_status == INIT_OK) { return true; } return false; } Config * Global::fileCfg() { return m_config; } QDomDocument Global::addrXml() { QDomDocument doc; QFile file(m_addrXml); if (file.open(QIODevice::ReadOnly)) { doc.setContent(&file); file.close(); } return doc; } const QString & Global::pathLib() { return m_pathLib; } const QString & Global::pathCfg() { return m_pathCfg; } void Global::clearDir(const QString & path) { QDir dir(path); if (dir.exists()) { const QFileInfoList list = dir.entryInfoList(); foreach(QFileInfo fi, list) { if (fi.isFile()) dir.remove(fi.fileName()); } } } QMap Global::loadFavoriteList(QDomDocument doc) { QMap listSite; // import xml address book QDomNodeList nodeList = doc.elementsByTagName("site"); for (int i=0; iopen(); param.m_mapParam["password"] = m_wallet->readPassword( node.attribute("name"), node.attribute("user")); } else #endif // KWALLET_ENABLED param.m_mapParam[key] = node.attribute(key); } } return true; } bool Global::loadAddress(Config& addrCfg, int n, Param& param) { QString strTmp, strSection; strTmp = addrCfg.getItemValue("bbs list", "num").toString(); if ((n < 0 && strTmp.toInt() <= 0) || n < -1) strSection = "default"; else { n = n < 0 ? 0 : n; strSection.sprintf("bbs %d", n); } // check if larger than existence strTmp = addrCfg.getItemValue("bbs list", "num").toString(); if (n >= strTmp.toInt()) return false; foreach(QString key,param.m_mapParam.keys()) { #ifdef KWALLET_ENABLED if (key == "password" && m_wallet != NULL) { m_wallet->open(); param.m_mapParam["password"] = m_wallet->readPassword( param.m_mapParam["name"].toString(), param.m_mapParam["user"].toString()); } else #endif // KWALLET_ENABLED param.m_mapParam[key] = addrCfg.getItemValue(strSection,key); } return true; } void Global::saveAddress(QDomDocument doc, QString uuid, const Param& param) { bool result = false; // find and replace existing site QDomNodeList nodeList = doc.elementsByTagName("site"); for (int i=0; iopen(); m_wallet->writePassword(param.m_mapParam["name"].toString(), param.m_mapParam["user"].toString(), param.m_mapParam["password"].toString()); } #endif // KWALLET_ENABLED foreach (QString key, param.m_mapParam.keys()) { #ifdef KWALLET_ENABLED if (key == "password") node.setAttribute(key, ""); else #endif // KWALLET_ENABLED node.setAttribute(key, param.m_mapParam[key].toString()); } result = true; break; } } // create new site otherwise if (!result) { QDomElement site = doc.createElement("site"); site.setAttribute("uuid", uuid); foreach (QString key, param.m_mapParam.keys()) site.setAttribute(key, param.m_mapParam[key].toString()); doc.documentElement().appendChild(site); result = true; } if (!result) return; } void Global::removeAddress(QDomDocument doc, QString uuid) { QDomNodeList nodeList; // remove the actual site nodeList = doc.elementsByTagName("site"); for (int i=0; igetItemValue("preference", "xim").toInt(); m_pref.nWordWrap = m_config->getItemValue("preference", "wordwrap").toInt(); // Cursor Size: 0:16,1:32:,3:48,4:64 m_pref.nCursorSize = m_config->getItemValue("preference", "cursor").toInt()*16+16; m_pref.bWheel = m_config->getItemValue("preference", "wheel").toBool(); m_pref.bUrl = m_config->getItemValue("preference", "url").toBool(); m_pref.bBlinkTab = m_config->getItemValue("preference", "blinktab").toBool(); m_pref.bWarn = m_config->getItemValue("preference", "warn").toBool(); m_pref.nBeep = m_config->getItemValue("preference", "beep").toInt(); m_pref.strWave = m_config->getItemValue("preference", "wavefile").toString(); m_pref.strHttp = m_config->getItemValue("preference", "http").toString(); m_pref.bAA = m_config->getItemValue("preference", "antialias").toBool(); m_pref.bTray = m_config->getItemValue("preference", "tray").toBool(); m_pref.strPlayer = m_config->getItemValue("preference", "externalplayer").toString(); m_pref.strImageViewer = m_config->getItemValue("preference", "image").toString(); m_pref.bClearPool = m_config->getItemValue("preference", "clearpool").toBool(); QString strTmp = m_config->getItemValue("preference", "pool").toString(); m_pref.strPoolPath = strTmp.isEmpty() ? Global::instance()->pathCfg() + "pool/" : strTmp; if (m_pref.strPoolPath.right(1) != "/") m_pref.strPoolPath.append('/'); strTmp = m_config->getItemValue("preference", "zmodem").toString(); m_pref.strZmPath = strTmp.isEmpty() ? Global::instance()->pathCfg() + "zmodem/" : strTmp; if (m_pref.strZmPath.right(1) != "/") m_pref.strZmPath.append('/'); } QString Global::getOpenFileName(const QString & filter, QWidget * widget) { QString path = m_config->getItemValue("global", "openfiledialog").toString(); QString strOpen = QFileDialog::getOpenFileName(widget, "choose a file", path, filter); if (!strOpen.isEmpty()) { // save the path QFileInfo fi(strOpen); m_config->setItemValue("global", "openfiledialog", fi.absolutePath()); m_config->save(); } return strOpen; } // warning for overwrite getSaveFileName QString Global::getSaveFileName(const QString& filename, QWidget* widget) { // get the previous dir QString path = m_config->getItemValue("global", "savefiledialog").toString(); QString strSave = QFileDialog::getSaveFileName(widget, tr("Choose a file to save under"), path + "/" + filename, "*"); QFileInfo fi(strSave); while (fi.exists()) { int yn = QMessageBox::warning(widget, "QTerm", tr("File exists. Overwrite?"), tr("Yes"), tr("No")); if (yn == 0) break; strSave = QFileDialog::getSaveFileName(widget, tr("Choose a file to save under"), path + "/" + filename, "*"); if (strSave.isEmpty()) break; } if (!strSave.isEmpty()) { // save the path m_config->setItemValue("global", "savefiledialog", fi.absolutePath()); m_config->save(); } return strSave; } #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) bool Global::iniWorkingDir(QString param) { char ExeNamePath[MAX_PATH]; size_t LastSlash = 0; if (0 == GetModuleFileNameA(NULL, ExeNamePath, MAX_PATH)) { const char *DefaultModuleName = "./qterm.exe"; strcpy(ExeNamePath, DefaultModuleName); } for (size_t i = 0, ModuleNameLen = strlen(ExeNamePath) ; i < ModuleNameLen ; ++i) { if (ExeNamePath[i] == '\\') { ExeNamePath[i] = '/'; LastSlash = i; } } ExeNamePath[LastSlash+1] = '\0'; // if "qterm.cfg" exists alongside "qterm.exe", assume this is the build directoy QFileInfo conf(QString(ExeNamePath)+"/qterm.cfg"); if (conf.exists()) { m_pathLib = ExeNamePath; m_pathCfg = ExeNamePath; return true; } m_pathLib = QString::fromLocal8Bit(ExeNamePath) + "../share/qterm/"; m_pathCfg = QDir::homePath() + "/.qterm/"; if (!isPathExist(m_pathCfg)) return false; // copy configuration files m_fileCfg = m_pathCfg + "qterm.cfg"; if (!createLocalFile(m_fileCfg, m_pathLib + "qterm.cfg")) return false; m_addrCfg = m_pathCfg + "address.cfg"; m_addrXml = m_pathCfg + "address.xml"; if (!convertAddressBook2XML()) return false; QString pathScheme = m_pathCfg + "scheme"; if (!isPathExist(pathScheme)) return false; return true; } #else bool Global::iniWorkingDir(QString param) { QDir dir; QFileInfo fi; QString prefix = QCoreApplication::applicationDirPath(); #ifdef Q_OS_MACX // $HOME/Library/QTerm/ QString pathHome = QDir::homePath(); m_pathCfg = pathHome + "/Library/QTerm/"; if (!isPathExist(m_pathCfg)) return false; // get executive file path m_pathLib = prefix + "/../Resources/"; #else QFileInfo conf(prefix+"/qterm.cfg"); if (conf.exists()) { QString path= QCoreApplication::applicationDirPath()+"/"; m_pathLib = path; m_pathCfg = path; return true; } prefix.chop(3); // "bin" m_pathCfg = QDir::homePath() + "/.qterm/"; if (!isPathExist(m_pathCfg)) return false; // pathLib --- where datedir "pic", "cursor", "po" if (param.indexOf('/') == -1) m_pathLib = prefix + "share/qterm/"; else { QFileInfo fi(param); if (fi.isSymLink()) param = fi.readLink(); // get the pathname param.truncate(param.lastIndexOf('/')); QString oldPath = QDir::currentPath(); QDir::setCurrent(param); dir.setPath(QCoreApplication::applicationDirPath()); if (dir == QDir::current()) m_pathLib = prefix + "share/qterm/"; else m_pathLib = QDir::currentPath(); QDir::setCurrent(oldPath); m_pathLib += '/'; } #endif QString pathScheme = m_pathCfg + "scheme"; if (!isPathExist(pathScheme)) return false; // copy configuration files m_fileCfg = m_pathCfg + "qterm.cfg"; if (!createLocalFile(m_fileCfg, m_pathLib + "qterm.cfg")) return false; m_addrCfg = m_pathCfg + "address.cfg"; //if (!createLocalFile(m_addrCfg, m_pathLib + "address.cfg")) // return false; m_addrXml = m_pathCfg + "address.xml"; //if (!createLocalFile(m_addrXml, m_pathLib + "address.xml")) // return false; if (!convertAddressBook2XML()) return false; return true; } #endif bool Global::iniSettings() { //install the translator QString lang = m_config->getItemValue("global", "language").toString(); Global::Language language = Global::English; if (lang == "chs") language = Global::SimplifiedChinese; else if (lang == "cht") language = Global::TraditionalChinese; setLanguage(language); //set font QString family = m_config->getItemValue("global", "font").toString(); QString pointsize = m_config->getItemValue("global", "pointsize").toString(); if (!family.isEmpty()) { QFont font(family); if (pointsize.toInt() > 0) font.setPointSize(pointsize.toInt()); QString bAA = m_config->getItemValue("global", "antialias").toString(); if (bAA != "0") font.setStyleStrategy(QFont::PreferAntialias); qApp->setFont(font); } // zmodem and pool directory QString pathZmodem = m_config->getItemValue("preference", "zmodem").toString(); if (pathZmodem.isEmpty()) pathZmodem = m_pathCfg + "zmodem"; if (!isPathExist(pathZmodem)) return false; QString pathPool = m_config->getItemValue("preference", "pool").toString(); if (pathPool.isEmpty()) pathPool = m_pathCfg + "pool/"; if (pathPool.right(1) != "/") pathPool.append('/'); QString pathCache = pathPool + "shadow-cache/"; if ((!isPathExist(pathPool)) || (!isPathExist(pathCache))) return false; return true; } bool Global::isPathExist(const QString& path) { QDir dir(path); if (! dir.exists()) { if (!dir.mkdir(path)) { qDebug("Failed to create directory %s", (const char*)path.toLocal8Bit()); return false; } } return true; } bool Global::createLocalFile(const QString& dst, const QString& src) { QDir dir; if (dir.exists(dst)) return true; if (!dir.exists(src)) { qDebug("QTerm failed to find %s.\n" "Please copy the %s from the source tarball to %s yourself.", (const char*)src.toLocal8Bit(), (const char*)src.toLocal8Bit(), (const char*) dst.toLocal8Bit()); return false; } if (!QFile::copy(src, dst)) { qDebug("QTerm failed to copy %s to %s.\n" "Please copy the %s from the source tarball to %s yourself.", (const char*)src.toLocal8Bit(), (const char *)dst.toLocal8Bit(), (const char*)src.toLocal8Bit(), (const char *)dst.toLocal8Bit()); return false; } return true; } bool Global::isBossColor() const { return m_bossColor; } const QString & Global::escapeString() const { return m_escape; } Global::Conversion Global::clipConversion() const { return m_clipConversion; } Global::Language Global::language() const { return m_language; } Global::Position Global::scrollPosition() const { return m_scrollPos; } bool Global::isFullScreen() const { return m_fullScreen; } bool Global::showSwitchBar() const { return m_switchBar; } bool Global::showStatusBar() const { return m_statusBar; } bool Global::showMenuBar() const { return m_menuBar; } void Global::setClipConversion(Global::Conversion conversionId) { m_clipConversion = conversionId; } void Global::setEscapeString(const QString & escapeString) { m_escape = escapeString; } void Global::setScrollPosition(Global::Position position) { m_scrollPos = position; } void Global::setStatusBar(bool isShow) { m_statusBar = isShow; } void Global::setMenuBar(bool isShow) { m_menuBar = isShow; } void Global::setBossColor(bool isBossColor) { m_bossColor = isBossColor; } void Global::setFullScreen(bool isFullscreen) { m_fullScreen = isFullscreen; } void Global::setSwitchBar(bool isShow) { m_switchBar = isShow; } void Global::setLanguage(Global::Language language) { m_language = language; // unload previous translation if (!m_translatorQT->isEmpty()) qApp->removeTranslator(m_translatorQT); if (!m_translatorQTerm->isEmpty()) qApp->removeTranslator(m_translatorQTerm); // check new translation files QString qt_qm, qterm_qm; switch(language) { case Global::SimplifiedChinese: qt_qm = QLibraryInfo::location(QLibraryInfo::TranslationsPath)+"/qt_zh_CN.qm"; qterm_qm = m_pathCfg + "/po/qterm_chs.qm"; if (!QFile::exists(qterm_qm)) qterm_qm = m_pathLib + "po/qterm_chs.qm"; break; case Global::TraditionalChinese: qt_qm = QLibraryInfo::location(QLibraryInfo::TranslationsPath)+"/qt_zh_TW.qm"; qterm_qm = m_pathCfg + "/po/qterm_cht.qm"; if (!QFile::exists(qterm_qm)) qterm_qm = m_pathLib + "po/qterm_cht.qm"; break; case Global::English: return; } // load qt library translation if (m_translatorQT->load(qt_qm)) qApp->installTranslator(m_translatorQT); // load qterm translation if (m_translatorQTerm->load(qterm_qm)) qApp->installTranslator(m_translatorQTerm); } const QString & Global::style() const { return m_style; } void Global::setStyle(const QString & style) { m_style = style; } void Global::loadConfig() { setFullScreen(m_config->getItemValue("global", "fullscreen").toBool()); setStyle(m_config->getItemValue("global", "theme").toString()); setClipConversion((Conversion)m_config->getItemValue("global", "clipcodec").toInt()); setScrollPosition((Position)m_config->getItemValue("global", "vscrollpos").toInt()); setMenuBar(m_config->getItemValue("global", "menubar").toBool()); setStatusBar(m_config->getItemValue("global", "statusbar").toBool()); setSwitchBar( m_config->getItemValue("global", "switchbar").toBool()); setBossColor(false); setEscapeString(""); loadPrefence(); } void Global::saveConfig() { QString lang; //language switch (m_language) { case English: lang = "eng"; break; case SimplifiedChinese: lang = "chs"; break; case TraditionalChinese: lang = "cht"; break; } m_config->setItemValue("global", "language", lang); m_config->setItemValue("global", "font", qApp->font().family()); m_config->setItemValue("global", "pointsize", QFontInfo(qApp->font()).pointSize()); m_config->setItemValue("global", "fullscreen", isFullScreen()); m_config->setItemValue("global", "theme", style()); m_config->setItemValue("global", "clipcodec", clipConversion()); m_config->setItemValue("global", "vscrollpos", scrollPosition()); m_config->setItemValue("global", "menubar", showMenuBar()); m_config->setItemValue("global", "statusbar", showStatusBar()); m_config->setItemValue("global", "switchbar", showSwitchBar()); m_config->save(); } QByteArray Global::loadGeometry(const QString & window) { return m_config->getItemValue("global",window+"_geometry").toByteArray(); } QByteArray Global::loadState(const QString & window) { return m_config->getItemValue("global",window+"_state").toByteArray(); } void Global::saveGeometry(const QString & window, const QByteArray & geometry) { m_config->setItemValue("global", window+"_geometry", geometry); } void Global::saveState(const QString & window, const QByteArray & state) { m_config->setItemValue("global", window+"_state", state); } void Global::saveSession(const QList& sites) { m_config->setItemValue("global", "sites", sites); } QList Global::loadSession() { return m_config->getItemValue("global", "sites").toList(); } void Global::cleanup() { #ifdef KWALLET_ENABLED if (m_wallet != NULL) m_wallet->close(); #endif // KWALLET_ENABLED if (m_pref.bClearPool) { clearDir(m_pref.strZmPath); clearDir(m_pref.strPoolPath); clearDir(m_pref.strPoolPath + "shadow-cache/"); } } void Global::openUrl(const QString & urlStr) { QString command = m_pref.strHttp; if (command.isEmpty()) { QUrl url(urlStr,QUrl::TolerantMode); if (!QDesktopServices::openUrl(url)) { qDebug("Failed to open the url with QDesktopServices"); } return; } if(command.indexOf("%L")==-1) // no replace //QApplication::clipboard()->setText(strUrl); command += " \"" + urlStr +"\""; else command.replace("%L", "\"" + urlStr + "\""); //cstrCmd.replace("%L", strUrl.toLocal8Bit()); #if !defined(_OS_WIN32_) && !defined(Q_OS_WIN32) command += " &"; system(command.toUtf8().data()); #else QProcess::startDetached(command); #endif } QString Global::convert(const QString & source, Global::Conversion flag) { switch (flag) { case No_Conversion: return source; case Simplified_To_Traditional: return m_converter->S2T(source); case Traditional_To_Simplified: return m_converter->T2S(source); default: return source; } // Just in case qDebug("Global::convert: we should not be here"); return source; } } // namespace QTerm #include qterm-0.7.3/src/qtermglobal.h000066400000000000000000000107761332762052600161430ustar00rootroot00000000000000// // C++ Interface: Global // // Description: // // // Author: hooey , (C) 2008 // // Copyright: See COPYING file that comes with this distribution // // #ifndef QTERMGLOBAL_H #define QTERMGLOBAL_H #include "qtermparam.h" #include #include #include #include #include #include namespace QTerm { class Config; class Convert; #ifdef KWALLET_ENABLED class Wallet; #endif //KWALLET_ENABLED class Global : public QObject { Q_OBJECT public: enum Language { SimplifiedChinese, TraditionalChinese, English }; enum Codec { GBK, Big5 }; enum Status { INIT_OK, INIT_ERROR }; enum Conversion { No_Conversion = 0, Simplified_To_Traditional, Traditional_To_Simplified }; enum Position { Hide = 0, Left, Right }; struct Pref { Conversion XIM; int nWordWrap; int nCursorSize; bool bWheel; bool bWarn; bool bBlinkTab; QString strHttp; int nBeep; QString strWave; QString strPlayer; bool bUrl; bool bAutoCopy; bool bAA; bool bTray; bool bClearPool; QString strZmPath; QString strPoolPath; QString strImageViewer; }; static Global * instance(); Config * fileCfg(); QDomDocument addrXml(); const QString & pathLib(); const QString & pathPic(); const QString & pathCfg(); void clearDir(const QString & path); // XML address book QMap loadFavoriteList(QDomDocument); bool loadAddress(QDomDocument doc, QString uuid, Param & param); void saveAddress(QDomDocument doc, QString uuid, const Param & param); void removeAddress(QDomDocument doc, QString uuid); void saveAddressXml(const QDomDocument& doc); bool convertAddressBook2XML(); // deprecated cfg address book, here only for conversion reason bool loadAddress(Config &addrCfg, int n, Param & param); QString getOpenFileName(const QString & filter, QWidget * widget); QString getSaveFileName(const QString & filename, QWidget * widget); bool isOK(); Pref m_pref; void loadPrefence(); bool isBossColor() const; const QString & escapeString() const; Conversion clipConversion() const; Language language() const; Position scrollPosition() const; bool isFullScreen() const; bool showSwitchBar() const; bool showStatusBar() const; bool showMenuBar() const; const QString & style() const; void setClipConversion(Conversion conversionId); void setEscapeString(const QString & escapeString); void setScrollPosition(Position position); void setStatusBar(bool isShow); //Better name? void setMenuBar(bool isShow); void setBossColor(bool isBossColor); void setFullScreen(bool isFullscreen); void setSwitchBar(bool isShow); void setLanguage(const Language language); void setStyle(const QString & style); void loadConfig(); //TODO: Merge with iniSettings void saveConfig(); QByteArray loadGeometry(const QString & window); QByteArray loadState(const QString & window); void saveGeometry(const QString & window, const QByteArray & geometry); void saveState(const QString & window, const QByteArray & state); void saveSession(const QList& sites); QList loadSession(); void cleanup(); void openUrl(const QString & url); QString convert(const QString & source, Conversion flag); private: Global(); static Global* m_Instance; bool iniWorkingDir(QString param); bool iniSettings(); bool isPathExist(const QString & path); bool createLocalFile(const QString & dst, const QString & src); void closeNotification(uint id); QString m_fileCfg; QString m_addrCfg; QString m_addrXml; QString m_pathLib; QString m_pathPic; QString m_pathCfg; Config * m_config; QByteArray * m_windowState; Status m_status; QString m_style; bool m_bossColor; QString m_escape; Conversion m_clipConversion; Convert * m_converter; bool m_statusBar; Position m_scrollPos; bool m_fullScreen; bool m_switchBar; bool m_menuBar; Language m_language; QTranslator *m_translatorQT; QTranslator *m_translatorQTerm; #ifdef KWALLET_ENABLED Wallet * m_wallet; #endif // KWALLET_ENABLED }; } // namespace QTerm #endif // GLOBAL_H qterm-0.7.3/src/qtermhttp.cpp000066400000000000000000000150171332762052600162060ustar00rootroot00000000000000#include "qtermhttp.h" #include "qtermcanvas.h" #include "qterm.h" #include "qtermconfig.h" #include "qtermglobal.h" #include "qtermframe.h" #include "imageviewer.h" #include #include #include #include #include #include #include #include namespace QTerm { Http::Http(QWidget *parent, QTextCodec * codec) :QObject(parent) { m_codec = codec; m_pCanvas = NULL; m_httpReply = NULL; } Http::~Http() { } void Http::cancel() { if (m_httpReply) m_httpReply->abort(); // remove unsuccessful download if (QFile::exists(m_strHttpFile)) QFile::remove(m_strHttpFile); emit done(this); } void Http::getLink(const QString& url, bool preview) { m_bExist = false; m_bPreview = preview; QUrl u(url); m_url = u; // local files need no network if (u.isRelative() || u.scheme() == "file") { previewImage(u.path()); emit done(this); return; } // alternative host substitute if (QFile::exists(Global::instance()->pathCfg() + "hosts.cfg")) { Config conf(Global::instance()->pathCfg() + "hosts.cfg"); QString strTmp = conf.getItemValue("hosts", u.host()).toString(); if (!strTmp.isEmpty()) { QString strUrl = url; strUrl.replace(QRegExp(u.host(), Qt::CaseInsensitive), strTmp); u = strUrl; } } m_strHttpFile = QFileInfo(u.path()).fileName(); m_httpReply = m_httpDown.get(QNetworkRequest(u)); connect(m_httpReply, SIGNAL(finished()), this, SLOT(httpDone())); connect(m_httpReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(httpRead(qint64, qint64))); connect(m_httpReply, SIGNAL(metaDataChanged()), this, SLOT(httpHeader())); } void Http::httpHeader() { if (m_httpReply->error() != QNetworkReply::NoError) return; if(!m_httpReply->attribute(QNetworkRequest::RedirectionTargetAttribute).isNull()) return; int FileLength = m_httpReply->header(QNetworkRequest::ContentLengthHeader).toInt(); // extract filename if exists // m_httpReply->header(QNetworkRequest::ContentDispositionHeader) returns QVariant(null) as of Qt5.1 beta QString ValueString = m_codec->toUnicode(m_httpReply->rawHeader("Content-Disposition")); if (ValueString.right(1) != ";") ValueString += ";"; QRegExp re("filename=(.*);", Qt::CaseInsensitive); re.setMinimal(true); //Dont FIXME:this will also split filenames with ';' inside, does anyone really do this? int pos = re.indexIn(ValueString); if (pos != -1) m_strHttpFile = re.cap(1); if (m_bPreview) { QString strPool = Global::instance()->m_pref.strPoolPath; m_strHttpFile = strPool + m_strHttpFile; QFileInfo fi(m_strHttpFile); // append .n if local file exists int i = 1; QFileInfo fi2 = fi; while (fi2.exists()) { // all the same if (fi2.size() == FileLength) { m_bExist = true; m_httpReply->abort(); break; } else { m_strHttpFile = QString("%1/%2(%3).%4") .arg(fi.path()) .arg(fi.completeBaseName()) .arg(i) .arg(fi.suffix()); fi2.setFile(m_strHttpFile); i++; } } fi.setFile(m_strHttpFile); QString strExt = fi.suffix().toLower(); if (strExt == "jpg" || strExt == "jpeg" || strExt == "gif" || strExt == "mng" || strExt == "png" || strExt == "bmp") m_bPreview = true; else m_bPreview = false; } else { QString strSave = Global::instance()->getSaveFileName(m_strHttpFile, NULL); // no filename specified which means the user canceled this download if (strSave.isEmpty()) { m_httpReply->abort(); emit done(this); return; } m_strHttpFile = strSave; } QTerm::StatusBar::instance()->newProgressOperation(this) .setDescription(m_strHttpFile) .setAbortSlot(this, SLOT(cancel())) .setMaximum(100); QTerm::StatusBar::instance()->resetMainText(); connect(this, SIGNAL(done(QObject*)), StatusBar::instance(), SLOT(endProgressOperation(QObject *))); connect(this, SIGNAL(percent(int)), StatusBar::instance(), SLOT(setProgress(int))); } void Http::httpRead(qint64 done, qint64 total) { if(!m_httpReply->attribute(QNetworkRequest::RedirectionTargetAttribute).isNull()) return; QByteArray ba = m_httpReply->readAll(); QFile file(m_strHttpFile); if (file.open(QIODevice::ReadWrite | QIODevice::Append)) { QDataStream ds(&file); ds.writeRawData(ba, ba.size()); file.close(); } if (total != 0) //m_pDialog->setProgress(done,total); emit percent(done*100 / total); } void Http::httpDone() { switch (m_httpReply->error()) { case QNetworkReply::NoError: break; case QNetworkReply::OperationCanceledError: if (m_bExist) break; else { emit done(this); return; } default: QMessageBox::critical(NULL, tr("Download Error"), tr("Failed to download file")); deleteLater(); return; } // we are redirected QVariant redirectionTarget = m_httpReply->attribute(QNetworkRequest::RedirectionTargetAttribute); if (!redirectionTarget.isNull()) { m_url = m_url.resolved(redirectionTarget.toUrl()); m_httpReply->abort(); m_httpReply->deleteLater(); getLink(m_url.toString(), m_bPreview); return; } if (m_bPreview) { QString strPool = Global::instance()->m_pref.strPoolPath; previewImage(m_strHttpFile); } else emit message("Download one file successfully"); emit done(this); } void Http::previewImage(const QString& filename) { QString strViewer = Global::instance()->fileCfg()->getItemValue("preference", "image").toString(); if (strViewer.isEmpty()) { delete m_pCanvas; m_pCanvas = new Canvas(qobject_cast(parent()),Qt::Dialog); m_pCanvas->loadImage(filename); m_pCanvas->show(); } else { QString strCmd = strViewer + " \"" + filename + "\""; QProcess::startDetached(strCmd); } } } // namespace QTerm #include qterm-0.7.3/src/qtermhttp.h000066400000000000000000000015461332762052600156550ustar00rootroot00000000000000#ifndef QTERMHTTP_H #define QTERMHTTP_H #include #include #include class QWidget; class QTextCodec; namespace QTerm { class Canvas; class Http : public QObject { Q_OBJECT public: Http(QWidget*,QTextCodec *); ~Http(); void getLink(const QString&, bool); protected slots: void cancel(); void httpDone(); void httpRead(qint64 bytesRead, qint64 totlaBytes); void httpHeader(); void previewImage(const QString&); signals: void done(QObject*); void message(const QString &); void percent(int); protected: QNetworkAccessManager m_httpDown; QNetworkReply *m_httpReply; QUrl m_url; QString m_strHttpFile; bool m_bPreview; bool m_bExist; QTextCodec * m_codec; Canvas * m_pCanvas; }; } // namespace QTerm #endif qterm-0.7.3/src/qtermiplocation.cpp000066400000000000000000000124551332762052600173730ustar00rootroot00000000000000//*************************************************************************** //* made by cyber@thuee.org * //*************************************************************************** #include "qtermiplocation.h" #include "qtermglobal.h" //Added by qt3to4: #include #include #include #include #include #include #ifdef Q_OS_WIN32 #include #else #include #include #endif namespace QTerm { IPLocation::IPLocation(QString & pathLib) { f = new _ip_finder; f->ipfp = NULL; fileExist = true; QString pathCfg = Global::instance()->pathCfg(); //case-insensitive match QDir dir(pathCfg); QStringList files = dir.entryList(QStringList("[Qq][Qq][Ww][Rr][Yy].[Dd][Aa][Tt]"), QDir::Files); if (!files.isEmpty()) { if ((f->ipfp = fopen((pathCfg + (files.at(0))).toLocal8Bit(), "r")) == NULL) { qDebug("can't open ipfile !"); fileExist = false; } } else fileExist = false; m_codec = QTextCodec::codecForName("GB18030"); } IPLocation::~IPLocation() { if (f->ipfp != NULL) fclose(f->ipfp); } bool IPLocation::haveFile() { return fileExist; } uint32 IPLocation::byteArrayToInt(char *ip, int count) { uint32 tmp, ret = 0L; if (count < 1 || count > 4) { qDebug("error byteArrayToInt!"); return 0; } for (int i = 0; i < count; i++) { tmp = ((uint32)ip[ i ]) & 0x000000FF; ret |= (tmp << (8 * i)); } return ret; }// _byte_array_to_int void IPLocation::readFrom(FILE *fp, uint32 offset, char *buf, int len) { if (fseek(fp, (long)offset, SEEK_SET) == -1) { qDebug(" readFrom error 1 "); memset(buf, 0, len); return; } if (fread(buf, sizeof(char), len, fp) == 0) { qDebug(" readFrom error 2 "); memset(buf, 0, len); return; } return; } int IPLocation::readLineFrom(FILE *fp, uint32 offset, QString& ret_str) { char str[512]; if (fseek(fp, (long)offset, SEEK_SET) == -1) { qDebug(" readLineFrom error 1 "); ret_str = QString(); return -1; } if (fgets((char *) str, 512, fp) == NULL) { qDebug(" readLineFrom error 2 "); ret_str = QString(); return -1; } ret_str = m_codec->toUnicode(str); return strlen(str); } uint32 IPLocation::getString(FILE *fp, uint32 offset, uint32 lastoffset, QString& ret, unsigned int flag) { char *buf; unsigned int fg; int len; if (fp == NULL) return 0; buf = (char *) calloc(3, sizeof(char)); readFrom(fp, offset, buf , 1); if (buf[0] == 0x01 || buf[0] == 0x02) { fg = buf[0]; readFrom(fp, offset + 1, buf, 3); return getString(fp, byteArrayToInt(buf, 3), offset, ret, fg); } else { len = readLineFrom(fp, offset, ret); } switch (flag) { case 0x01: return 0; case 0x02: return lastoffset + 4; default: return offset + len + 1; }// switch } void IPLocation::getCountryCity(FILE *fp, uint32 offset, QString& country, QString& city) { uint32 next_offset; if (fp == NULL) return ; next_offset = getString(fp, offset, 0L, country, 0); if (next_offset == 0) city = ""; else getString(fp, next_offset, 0L, city, 0); return; } void IPLocation::setIpRange(int rec_no, _ip_finder *f) { char *buf; uint32 offset; if (f == NULL) return; buf = (char *)calloc(7, sizeof(char)); offset = f->offset_first_start_ip + rec_no * 7 ; readFrom(f->ipfp, offset, buf, 7); f->cur_start_ip = byteArrayToInt(buf, 4); f->offset_cur_end_ip = byteArrayToInt(buf + 4, 3); readFrom(f->ipfp, f->offset_cur_end_ip, buf, 4); f->cur_end_ip = byteArrayToInt(buf, 4); }// _set_ip_range bool IPLocation::getLocation(QString& url, QString& country, QString& city) { int rec, record_count, B, E; char *buf; uint32 ip; #ifdef Q_OS_WIN32 uint32 ipValue = inet_addr((const char*)url.toLatin1()); #else in_addr_t ipValue = inet_addr((const char*)url.toLatin1()); #endif if (ipValue == -1) return false; else ip = ntohl(ipValue); buf = (char *)calloc(4, sizeof(char)); memset(buf , 0 , 4); readFrom(f->ipfp, 0L, (char *)buf, 4); f->offset_first_start_ip = byteArrayToInt((char *)buf, 4); readFrom(f->ipfp, 4L, (char *)buf, 4); f->offset_last_start_ip = byteArrayToInt((char *)buf, 4); record_count = (f->offset_last_start_ip - f->offset_first_start_ip) / 7; if (record_count <= 1) return false; // search for right range B = 0; E = record_count; while (B < E - 1) { rec = (B + E) / 2; setIpRange(rec, f) ; if (ip == f->cur_start_ip) { B = rec; break; } if (ip > f->cur_start_ip) B = rec; else E = rec; } setIpRange(B, f); if (f->cur_start_ip <= ip && ip <= f->cur_end_ip) { getCountryCity(f->ipfp, f->offset_cur_end_ip + 4, country, city); //country.replace( country.find( "CZ88.NET", 0, FALSE ), 8, "" ); if ((rec = city.indexOf("CZ88.NET", 0, Qt::CaseInsensitive)) >= 0) city.replace(rec, 8, ""); } else {// not in this range... miss country = "unkown"; city = ""; }// if ip_start<=ip<=ip_end return true; } } qterm-0.7.3/src/qtermiplocation.h000066400000000000000000000025651332762052600170410ustar00rootroot00000000000000#ifndef QTERMIPLOCATION_H #define QTERMIPLOCATION_H #include #include //Added by qt3to4: class QString; class QTextCodec; typedef unsigned long uint32; namespace QTerm { struct _ip_finder { uint32 offset_first_start_ip; // first abs offset of start ip uint32 offset_last_start_ip; // last abs offset of start ip uint32 cur_start_ip; // start ip of current search range uint32 cur_end_ip; // end ip of current search range uint32 offset_cur_end_ip; // where is the current end ip saved FILE *ipfp; // IO Channel to read file };// struct _ip_finder class IPLocation { public: IPLocation(QString& pathLib); ~IPLocation(); _ip_finder *f; bool getLocation(QString& url, QString& country, QString& city); bool haveFile(); protected: bool fileExist; uint32 byteArrayToInt(char *ip, int count); void readFrom(FILE *fp, uint32 offset, char *buf, int len); int readLineFrom(FILE *fp, uint32 offset, QString& ret_str); uint32 getString(FILE *fp, uint32 offset, uint32 lastoffset, QString& str, unsigned int flag); void getCountryCity(FILE *fp, uint32 offset, QString& country, QString& city); void setIpRange(int rec_no, _ip_finder *f); QTextCodec * m_codec; }; } // namespace QTerm #endif //QTERMIPLOOKER_H qterm-0.7.3/src/qtermparam.cpp000066400000000000000000000050231332762052600163230ustar00rootroot00000000000000/******************************************************************* * FILENAME: qtermparam.cpp * REVISION: 2002.11.20 first created * * AUTHOR: kingson ******************************************************************/ /****************************************************************** * NOTE * This file may be used, distributed and modified without limitation. *******************************************************************/ #include "qtermparam.h" namespace QTerm { Param::Param() { m_mapParam["name"] = "SMTH"; m_mapParam["addr"] = "smth.org"; m_mapParam["port"] = 23; m_mapParam["hosttype"] = 0; // 0--BBS 1--*NIX m_mapParam["autologin"] = false; m_mapParam["prelogin"] = ""; m_mapParam["user"] = ""; m_mapParam["password"] = ""; m_mapParam["postlogin"] = ""; m_mapParam["bbscode"] = "GBK"; m_mapParam["displaycode"] = 0; m_mapParam["autofont"] = true; m_mapParam["alwayshighlight"] = false; m_mapParam["ansicolor"] = true; m_mapParam["asciifont"] = "Monospace"; m_mapParam["generalfont"] = "Monospace"; m_mapParam["fontsize"] = 14; m_mapParam["schemefile"] = ""; m_mapParam["opacity"] = 100; m_mapParam["blinkcursor"] = true; m_mapParam["termtype"] = "vt102"; m_mapParam["keytype"] = 0; m_mapParam["keyboardprofile"] = ""; m_mapParam["column"] = 80; m_mapParam["row"] = 24; m_mapParam["scroll"] = 240; m_mapParam["cursor"] = 0; // 0--Block 1--Underline 2--I Type m_mapParam["escape"] = "^[^[["; m_mapParam["protocol"] = 0; // 0--Telnet 1--SSH1 2--SSH2 m_mapParam["proxytype"] = 0; // 0--None 1--Wingate 2--SOCKS4 3--SOCKS5 4--HTTP m_mapParam["proxyaddr"] = ""; m_mapParam["proxyport"] = 0; m_mapParam["proxyauth"] = false; m_mapParam["proxyuser"] = ""; m_mapParam["proxypassword"] = ""; m_mapParam["maxidle"] = 180; m_mapParam["antiidlestring"] = "^@"; m_mapParam["bautoreply"] = true; m_mapParam["replykey"] = "^Z"; m_mapParam["autoreply"] = "(QTerm) Sorry, I am not around"; m_mapParam["reconnect"] = false; m_mapParam["interval"] = 2; m_mapParam["retrytimes"] = -1; m_mapParam["loadscript"] = false; m_mapParam["scriptfile"] = ""; m_mapParam["menutype"] = 2; m_mapParam["menucolor"] = QColor(0,65,132); m_mapParam["sshuser"] = ""; m_mapParam["sshpass"] = ""; m_mapParam["sshprivatekeyfile"] = ""; m_mapParam["sshpassphrase"] = ""; m_mapParam["sshhostkey"] = ""; } Param::Param( const Param & param ) { m_mapParam = param.m_mapParam; } Param::~Param() { } Param& Param::operator=(const Param& param) { m_mapParam = param.m_mapParam; return *this; } } // namespace QTerm qterm-0.7.3/src/qtermparam.h000066400000000000000000000005461332762052600157750ustar00rootroot00000000000000#ifndef QTERMPARAM_H #define QTERMPARAM_H // #include // #include #include #include #include namespace QTerm { class Param; class Param { public: Param(); Param( const Param& ); ~Param(); Param& operator=(const Param&); QVariantMap m_mapParam; }; } // namespace QTerm #endif // QTERMPARAM_H qterm-0.7.3/src/qtermpython.cpp000066400000000000000000000341411332762052600165470ustar00rootroot00000000000000//#include "qterm.h" #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_PYTHON #include // #include // #include // #include #include "qtermwindow.h" #include "qtermbuffer.h" #include "qtermtextline.h" #include "qtermtelnet.h" #include "qtermparam.h" #include "qtermbbs.h" //Added by qt3to4: #include #include #include #include #include #include /* ************************************************************************** * * Pythons Embedding * * ***************************************************************************/ extern QString pathCfg; QString getException() { PyObject *pType=NULL, *pValue=NULL, *pTb=NULL, *pName, *pTraceback; PyErr_Fetch(&pType, &pValue, &pTb); pName = PyString_FromString("traceback"); pTraceback = PyImport_Import(pName); Py_DECREF(pName); if(pTraceback==NULL) return "General Error in Python Callback"; pName = PyString_FromString("format_exception"); PyObject *pRes = PyObject_CallMethodObjArgs(pTraceback, pName,pType,pValue,pTb,NULL); Py_DECREF(pName); Py_DECREF(pTraceback); Py_XDECREF(pType); Py_XDECREF(pValue); Py_XDECREF(pTb); if(pRes==NULL) return "General Error in Python Callback"; pName = PyString_FromString("string"); PyObject *pString = PyImport_Import(pName); Py_DECREF(pName); if(pString==NULL) return "General Error in Python Callback"; pName = PyString_FromString("join"); PyObject *pErr = PyObject_CallMethodObjArgs(pString, pName, pRes,NULL); Py_DECREF(pName); Py_DECREF(pString); Py_DECREF(pRes); if(pErr==NULL) return "General Error in Python Callback"; QString str(PyString_AsString(pErr)); Py_DECREF(pErr); return str; } QString getErrOutputFile(Window* lp) { // file name QString str2; str2.setNum(long(lp)); str2 += ".err"; // path return pathCfg+str2; } // copy current artcle for back compatible use only // for new coder please use getArticle static PyObject *qterm_copyArticle(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; Window *pWin=(Window*)lp; QStringList strList; QString strArticle; while(1) { // check it there is duplicated string // it starts from the end in the range of one screen height // so this is a non-greedy match QString strTemp = pWin->stripWhitespace( pWin->m_pBuffer->screen(0)->getText()); int i=0; int start=0; for(QStringList::Iterator it=strList.fromLast(); it!=strList.begin(), i < pWin->m_pBuffer->line()-1; // not exceeeding the last screen --it, i++) { if(*it!=strTemp) continue; QStringList::Iterator it2 = it; bool dup=true; // match more to see if its duplicated for(int j=0; j<=i; j++, it2++) { QString str1 = pWin->stripWhitespace( pWin->m_pBuffer->screen(j)->getText()); if(*it2!=str1) { dup = false; break; } } if(dup) { // set the start point start = i+1; break; } } // add new lines for(i=start;im_pBuffer->line()-1;i++) strList+=pWin->stripWhitespace( pWin->m_pBuffer->screen(i)->getText()); // the end of article if( pWin->m_pBuffer->screen( pWin->m_pBuffer->line()-1)->getText().find("%") == -1 ) break; // continue pWin->m_pTelnet->write(" ", 1); if(!pWin->m_wcWaiting.wait(10000)) // timeout break; } #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) strArticle = strList.join("\r\n"); #else strArticle = strList.join("\n"); #endif PyObject *py_text = PyString_FromString(strArticle.toLocal8Bit); Py_INCREF(py_text); return py_text; } static PyObject *qterm_getArticle(PyObject *, PyObject *args) { long lp; int timeout; int succeed=1; if (!PyArg_ParseTuple(args, "li", &lp, &timeout)) return NULL; Window *pWin=(Window*)lp; QStringList strList; QString strArticle; while(1) { // check it there is duplicated string // it starts from the end in the range of one screen height // so this is a non-greedy match QString strTemp = pWin->stripWhitespace( pWin->m_pBuffer->screen(0)->getText()); int i=0; int start=0; for(QStringList::Iterator it=strList.fromLast(); it!=strList.begin(), i < pWin->m_pBuffer->line()-1; // not exceeeding the last screen --it, i++) { if(*it!=strTemp) continue; QStringList::Iterator it2 = it; bool dup=true; // match more to see if its duplicated for(int j=0; j<=i; j++, it2++) { QString str1 = pWin->stripWhitespace( pWin->m_pBuffer->screen(j)->getText()); if(*it2!=str1) { dup = false; break; } } if(dup) { // set the start point start = i+1; break; } } // add new lines for(i=start;im_pBuffer->line()-1;i++) strList+=pWin->stripWhitespace( pWin->m_pBuffer->screen(i)->getText()); // the end of article if( pWin->m_pBuffer->screen( pWin->m_pBuffer->line()-1)->getText().find("%") == -1 ) break; // continue pWin->m_pTelnet->write(" ", 1); if(!pWin->m_wcWaiting.wait(timeout*1000)) // timeout { succeed=0; break; } } #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) strArticle = strList.join("\r\n"); #else strArticle = strList.join("\n"); #endif PyObject *py_res = Py_BuildValue("si",(const char *)strArticle.toLocal8Bit(), succeed); Py_INCREF(py_res); return py_res; } static PyObject *qterm_formatError(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; QString strErr; QString filename = getErrOutputFile((Window*)lp); QDir d; if(d.exists(filename)) { QFile file(filename); file.open(QIODevice::ReadOnly); QTextStream is( &file ); while ( !is.atEnd() ) { strErr += is.readLine(); // line of text excluding '\n' strErr += '\n'; } file.close(); d.remove( filename ); } if( !strErr.isEmpty() ) { ((Window*)lp)->m_strPythonError = strErr; qApp->postEvent( (Window*)lp, new QCustomEvent(PYE_ERROR)); } else qApp->postEvent( (Window*)lp, new QCustomEvent(PYE_FINISH)); Py_INCREF(Py_None); return Py_None; } // caret x static PyObject *qterm_caretX(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; int x = ((Window*)lp)->m_pBuffer->caret().x(); PyObject * py_x =Py_BuildValue("i",x); Py_INCREF(py_x); return py_x; } // caret y static PyObject *qterm_caretY(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; int y = ((Window*)lp)->m_pBuffer->caret().y(); PyObject * py_y =Py_BuildValue("i",y); Py_INCREF(py_y); return py_y; } // columns static PyObject *qterm_columns(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; int columns = ((Window*)lp)->m_pBuffer->columns(); PyObject * py_columns = Py_BuildValue("i",columns); Py_INCREF(py_columns); return py_columns; } // rows static PyObject *qterm_rows(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; int rows = ((Window*)lp)->m_pBuffer->line(); PyObject *py_rows = Py_BuildValue("i",rows); Py_INCREF(py_rows); return py_rows; } // sned string to server static PyObject *qterm_sendString(PyObject *, PyObject *args) { char *pstr; long lp; int len; if (!PyArg_ParseTuple(args, "ls", &lp, &pstr)) return NULL; len = strlen(pstr); ((Window*)lp)->m_pTelnet->write(pstr,len); Py_INCREF(Py_None); return Py_None; } // same as above except parsing string first "\n" "^p" etc static PyObject *qterm_sendParsedString(PyObject *, PyObject *args) { char *pstr; long lp; int len; if (!PyArg_ParseTuple(args, "ls", &lp, &pstr)) return NULL; len = strlen(pstr); ((Window*)lp)->sendParsedString(pstr); Py_INCREF(Py_None); return Py_None; } // get text at line static PyObject *qterm_getText(PyObject *, PyObject *args) { long lp; int line; if (!PyArg_ParseTuple(args, "li", &lp, &line)) return NULL; QByteArray cstr = ((Window*)lp)->m_pBuffer->screen(line)->getText(); PyObject *py_text = PyString_FromString(cstr); Py_INCREF(py_text); return py_text; } // get text with attributes static PyObject *qterm_getAttrText(PyObject *, PyObject *args) { long lp; int line; if (!PyArg_ParseTuple(args, "li", &lp, &line)) return NULL; QByteArray cstr = ((Window*)lp)->m_pBuffer->screen(line)->getAttrText(); PyObject *py_text = PyString_FromString(cstr); Py_INCREF(py_text); return py_text; } // is host connected static PyObject *qterm_isConnected(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; bool connected = ((Window*)lp)->isConnected(); PyObject * py_connected =Py_BuildValue("i",connected?1:0); Py_INCREF(py_connected); return py_connected; } // disconnect from host static PyObject *qterm_disconnect(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; ((Window*)lp)->disconnect(); Py_INCREF(Py_None); return Py_None; } // reconnect to host static PyObject *qterm_reconnect(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; ((Window*)lp)->reconnect(); Py_INCREF(Py_None); return Py_None; } // bbs encoding 0-GBK 1-BIG5 static PyObject *qterm_getBBSCodec(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_codec = PyString_FromString( ((Window*)lp)->m_param.m_nBBSCode==0?"GBK":"Big5"); Py_INCREF(py_codec); return py_codec; } // host address static PyObject *qterm_getAddress(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_addr = PyString_FromString( ((Window*)lp)->m_param.m_strAddr.toLocal8Bit()); Py_INCREF(py_addr); return py_addr; } // host port number static PyObject *qterm_getPort(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_port = Py_BuildValue("i", ((Window*)lp)->m_param.m_uPort); Py_INCREF(py_port); return py_port; } // connection protocol 0-telnet 1-SSH1 2-SSH2 static PyObject *qterm_getProtocol(PyObject *, PyObject *args) { long lp; if (!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_port = Py_BuildValue("i", ((Window*)lp)->m_param.m_nProtocolType); Py_INCREF(py_port); return py_port; } // key to reply msg static PyObject *qterm_getReplyKey(PyObject *, PyObject *args) { long lp; if(!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_key = PyString_FromString(((Window*)lp)->m_param.m_strReplyKey.toLocal8Bit()); Py_INCREF(py_key); return py_key; } // url under mouse static PyObject *qterm_getURL(PyObject *, PyObject *args) { long lp; if(!PyArg_ParseTuple(args, "l", &lp)) return NULL; PyObject *py_url = PyString_FromString( ((Window*)lp)->m_pBBS->getUrl()); Py_INCREF(py_url); return py_url; } // preview image link static PyObject *qterm_previewImage(PyObject *, PyObject *args) { long lp; char *url; if (!PyArg_ParseTuple(args, "ls", &lp, &url)) return NULL; ((Window*)lp)->getHttpHelper(url,true); Py_INCREF(Py_None); return Py_None; } // convert string from UTF8 to specified encoding static PyObject *qterm_fromUTF8(PyObject *, PyObject *args) { char *str, *enc; if (!PyArg_ParseTuple(args, "ss", &str, &enc)) return NULL; QTextCodec *encodec = QTextCodec::codecForName(enc); QTextCodec *utf8 = QTextCodec::codecForName("utf8"); PyObject *py_str = PyString_FromString( encodec->fromUnicode(utf8->toUnicode(str))); Py_INCREF(py_str); return py_str; } // convert string from specified encoding to UTF8 static PyObject *qterm_toUTF8(PyObject *, PyObject *args) { char *str, *enc; if (!PyArg_ParseTuple(args, "ss", &str, &enc)) return NULL; QTextCodec *encodec = QTextCodec::codecForName(enc); QTextCodec *utf8 = QTextCodec::codecForName("utf8"); PyObject *py_str = PyString_FromString( utf8->fromUnicode(encodec->toUnicode(str))); Py_INCREF(py_str); return py_str; } PyMethodDef qterm_methods[] = { {"formatError", (PyCFunction)qterm_formatError, METH_VARARGS, "get the traceback info"}, {"getArticle", (PyCFunction)qterm_getArticle, METH_VARARGS, "copy current article"}, {"copyArticle", (PyCFunction)qterm_copyArticle, METH_VARARGS, "copy current article (obsolete)"}, {"getText", (PyCFunction)qterm_getText, METH_VARARGS, "get text at line#"}, {"getAttrText", (PyCFunction)qterm_getAttrText, METH_VARARGS, "get attr text at line#"}, {"sendString", (PyCFunction)qterm_sendString, METH_VARARGS, "send string to server"}, {"sendParsedString",(PyCFunction)qterm_sendParsedString, METH_VARARGS, "send string with escape"}, {"caretX", (PyCFunction)qterm_caretX, METH_VARARGS, "caret x"}, {"caretY", (PyCFunction)qterm_caretY, METH_VARARGS, "caret y"}, {"columns", (PyCFunction)qterm_columns, METH_VARARGS, "screen width"}, {"rows", (PyCFunction)qterm_rows, METH_VARARGS, "screen height"}, {"isConnected", (PyCFunction)qterm_isConnected, METH_VARARGS, "connected to server or not"}, {"disconnect", (PyCFunction)qterm_disconnect, METH_VARARGS, "disconnect from server"}, {"reconnect", (PyCFunction)qterm_reconnect, METH_VARARGS, "reconnect"}, {"getBBSCodec", (PyCFunction)qterm_getBBSCodec, METH_VARARGS, "get the bbs encoding, GBK or Big5"}, {"getAddress", (PyCFunction)qterm_getAddress, METH_VARARGS, "get the bbs address"}, {"getPort", (PyCFunction)qterm_getPort, METH_VARARGS, "get the bbs port number"}, {"getProtocol", (PyCFunction)qterm_getPort, METH_VARARGS, "get the bbs protocol, 0/1/2 TELNET/SSH1/SSH2"}, {"getReplyKey", (PyCFunction)qterm_getReplyKey, METH_VARARGS, "get the key to reply messages"}, {"getURL", (PyCFunction)qterm_getURL, METH_VARARGS, "get the url string under mouse"}, {"previewImage", (PyCFunction)qterm_previewImage, METH_VARARGS, "preview the image link"}, {"fromUTF8", (PyCFunction)qterm_fromUTF8, METH_VARARGS, "decode from utf8 to string in specified codec"}, {"toUTF8", (PyCFunction)qterm_toUTF8, METH_VARARGS, "decode from string in specified codec to utf8"}, {NULL, (PyCFunction)NULL, 0, NULL} }; #endif //HAVE_PYTHON qterm-0.7.3/src/qtermpython.h000066400000000000000000000002611332762052600162100ustar00rootroot00000000000000#include "qterm.h" #ifdef HAVE_PYTHON #include extern QString getException(); extern QString getErrOutputFile(Window *); extern PyMethodDef qterm_methods[]; #endif qterm-0.7.3/src/qtermscreen.cpp000066400000000000000000001230551332762052600165100ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermscreen.cpp REVISION: 2001.10.5 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qterm.h" #include "qtermwindow.h" #include "qtermscreen.h" #include "qtermtextline.h" #include "qtermconvert.h" #include "qtermbuffer.h" #include "qtermbbs.h" #include "qtermframe.h" #include "qtermparam.h" #include "qtermtelnet.h" #include "qtermconfig.h" #include "qtermglobal.h" #include "schemedialog.h" #include "osdmessage.h" #include "blur.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace QTerm { /* ------------------------------------------------------------------------ */ /* */ /* Constructor/Destructor */ /* */ /* ------------------------------------------------------------------------ */ Screen::Screen(QWidget *parent, Buffer *buffer, Param *param, BBS *bbs) : QWidget(parent), Scrollbar_Width(15) { m_pWindow = (Window *)parent; m_pBBS = bbs; m_pParam = param; //m_pCanvas = NULL; m_ePaintState = Repaint; m_bCursor = true; m_inputContent = NULL; m_pASCIIFont = NULL; m_pGeneralFont = NULL; m_pMessage = new PageViewMessage(this); setFocusPolicy(Qt::ClickFocus); setAttribute(Qt::WA_InputMethodEnabled, true); setMouseTracking(true); setScheme(); initFontMetrics(); m_pBuffer = buffer; connect(m_pBuffer, SIGNAL(bufferSizeChanged()), this, SLOT(bufferSizeChanged())); m_blinkTimer = new QTimer(this); connect(m_blinkTimer, SIGNAL(timeout()), this, SLOT(blinkEvent())); m_cursorTimer = new QTimer(this); connect(m_cursorTimer, SIGNAL(timeout()), this, SLOT(cursorEvent())); // the scrollbar m_scrollBar = new QScrollBar(this); m_scrollBar->setCursor(Qt::ArrowCursor); m_nStart = 0; m_nEnd = m_pBuffer->line() - 1; m_pBlinkLine = new bool[m_nEnd - m_nStart + 1]; m_scrollBar->setRange(0, 0); m_scrollBar->setSingleStep(1); m_scrollBar->setPageStep(m_pBuffer->line()); m_scrollBar->setValue(0); connect(m_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); m_scPrevPage = new QShortcut(Qt::Key_PageUp + Qt::SHIFT, this, SLOT(prevPage())); m_scNextPage = new QShortcut(Qt::Key_PageDown + Qt::SHIFT, this, SLOT(nextPage())); m_scPrevLine = new QShortcut(Qt::Key_Up + Qt::SHIFT, this, SLOT(prevLine())); m_scNextLine = new QShortcut(Qt::Key_Down + Qt::SHIFT, this, SLOT(nextLine())); setAttribute(Qt::WA_OpaquePaintEvent, true); // init variable m_blinkScreen = false; m_blinkCursor = m_pParam->m_mapParam["blinkcursor"].toBool(); } PageViewMessage * Screen::osd() { return m_pMessage; } Screen::~Screen() { delete [] m_pBlinkLine; delete m_blinkTimer; delete m_cursorTimer; //delete m_pCanvas; delete m_inputContent; } // focus event received void Screen::focusInEvent(QFocusEvent *) { // FIXME: Somehow there is an inf loop without this. if (Global::instance()->isFullScreen()) { return; } if (m_pWindow->isMaximized()) { m_pWindow->showNormal(); m_pWindow->showMaximized(); } m_scPrevPage->setEnabled(true); m_scNextPage->setEnabled(true); m_scPrevLine->setEnabled(true); m_scNextLine->setEnabled(true); } // focus out void Screen::focusOutEvent(QFocusEvent *) { m_scPrevPage->setEnabled(false); m_scNextPage->setEnabled(false); m_scPrevLine->setEnabled(false); m_scNextLine->setEnabled(false); } void Screen::showEvent(QShowEvent *) { m_ePaintState = Show; update(); } void Screen::cursorEvent() { if (m_blinkCursor) { m_ePaintState = Cursor; m_bCursor = !m_bCursor; QRect cursorRect; QPoint pt = mapToPixel(QPoint(m_pBuffer->caretX(), m_pBuffer->caretY())); switch (m_pParam->m_mapParam["cursor"].toInt()) { case 0: cursorRect.setRect(pt.x(), pt.y(), m_nCharWidth, m_nCharHeight); break; case 1: cursorRect.setRect(pt.x(), pt.y() + 9*m_nCharHeight / 10, m_nCharWidth, m_nCharHeight / 10); break; case 2: cursorRect.setRect(pt.x(), pt.y(), m_nCharWidth / 9, m_nCharHeight); break; default: qDebug("Unknown cursor type"); break; } update(cursorRect); } } void Screen::updateCursor() { QPainter painter(this); if (m_pBuffer->caretY() <= m_nEnd && m_pBuffer->caretY() >= m_nStart) { QPoint pt = mapToPixel(QPoint(m_pBuffer->caretX(), m_pBuffer->caretY())); int linelength = m_pBuffer->at(m_pBuffer->caretY())->getLength(); int startx = m_pBuffer->caretX(); switch (m_pParam->m_mapParam["cursor"].toInt()) { case 0: // block if (startx < linelength) { drawLine(painter, m_pBuffer->caretY(), startx, startx, false); } else { if (m_bCursor) painter.fillRect(pt.x(), pt.y(), m_nCharWidth, m_nCharHeight, m_color[7]); else painter.fillRect(pt.x(), pt.y(), m_nCharWidth, m_nCharHeight, m_color[0]); } break; case 1: // underline if (m_bCursor) painter.fillRect(pt.x(), pt.y() + 9*m_nCharHeight / 10, m_nCharWidth, m_nCharHeight / 10, m_color[7]); else painter.fillRect(pt.x(), pt.y() + 9*m_nCharHeight / 10, m_nCharWidth, m_nCharHeight / 10, m_color[0]); break; case 2: // I type if (m_bCursor) painter.fillRect(pt.x(), pt.y(), m_nCharWidth / 9, m_nCharHeight, m_color[7]); else painter.fillRect(pt.x(), pt.y(), m_nCharWidth / 9, m_nCharHeight, m_color[0]); break; default: break; //drawLine(painter, m_pBuffer->caretY(), startx, startx, false); } } } void Screen::blinkEvent() { if (m_hasBlink) { m_blinkScreen = !m_blinkScreen; m_ePaintState = Blink; update(m_blinkRegion); } } void Screen::resizeEvent(QResizeEvent *) { updateScrollBar(); setBgPxm(m_pxmBg, m_nPxmType); // if (m_pCanvas != NULL) { // delete m_pCanvas; // m_pCanvas = NULL; // } // m_pCanvas = new QPixmap(width(), height()); if (m_pParam->m_mapParam["autofont"].toBool()) { updateFont(); } else { int cx = m_rcClient.width() / m_nCharWidth; int cy = m_rcClient.height() / m_nCharHeight; if (cx > 10 && cy > 10) { m_pBuffer->setSize(cx, cy); } } m_ePaintState = Show; update(); QTimer::singleShot(50,this,SLOT(blurBackground())); } /* ------------------------------------------------------------------------ */ /* */ /* Font */ /* */ /* ------------------------------------------------------------------------ */ void Screen::initFontMetrics() { if (m_pASCIIFont != NULL) { delete m_pASCIIFont; } if (m_pGeneralFont != NULL) { delete m_pGeneralFont; } m_pASCIIFont = new QFont(m_pParam->m_mapParam["asciifont"].toString(), qMax(8, m_pParam->m_mapParam["fontsize"].toInt())); m_pGeneralFont = new QFont(m_pParam->m_mapParam["generalfont"].toString(), qMax(8, m_pParam->m_mapParam["fontsize"].toInt())); m_pASCIIFont->setWeight(QFont::Normal); m_pGeneralFont->setWeight(QFont::Normal); m_pASCIIFont->setStyleStrategy(Global::instance()->m_pref.bAA ? QFont::PreferAntialias : QFont::NoAntialias); m_pGeneralFont->setStyleStrategy(Global::instance()->m_pref.bAA ? QFont::PreferAntialias : QFont::NoAntialias); getFontMetrics(); m_pMessage->setFont(*m_pGeneralFont); } void Screen::updateFont() { int nPointSize; int nIniSize = qMax(8, qMin(m_rcClient.height() / m_pBuffer->line(), m_rcClient.width() * 2 / m_pBuffer->columns())); for (nPointSize = nIniSize - 3; nPointSize <= nIniSize + 3; nPointSize++) { m_pASCIIFont->setPointSize(nPointSize); m_pGeneralFont->setPointSize(nPointSize); getFontMetrics(); if ((m_pBuffer->line()*m_nCharHeight) > m_rcClient.height() || (m_pBuffer->columns()*m_nCharWidth) > m_rcClient.width()) { while (nPointSize > 5) { nPointSize--; m_pASCIIFont->setPointSize(nPointSize); m_pGeneralFont->setPointSize(nPointSize); getFontMetrics(); if ((m_pBuffer->line()*m_nCharHeight) < m_rcClient.height() && (m_pBuffer->columns()*m_nCharWidth) < m_rcClient.width()) break; } break; } } int marginw,marginh; marginw=marginh=0; if (Frame::instance()->isMaximized()||Frame::instance()->isFullScreen()) { marginw = (m_rcClient.width() - (m_pBuffer->columns()*m_nCharWidth))/2; } QPoint point = m_rcClient.topLeft(); m_rcClient = QRect(point.x()+marginw, point.y()+marginh, m_pBuffer->columns()*m_nCharWidth, m_pBuffer->line()*m_nCharHeight); m_pASCIIFont->setWeight(QFont::Normal); m_pGeneralFont->setWeight(QFont::Normal); m_pASCIIFont->setStyleStrategy(Global::instance()->m_pref.bAA ? QFont::PreferAntialias : QFont::NoAntialias); m_pGeneralFont->setStyleStrategy(Global::instance()->m_pref.bAA ? QFont::PreferAntialias : QFont::NoAntialias); if (m_inputContent != NULL) { delete m_inputContent; m_inputContent = NULL; } m_pMessage->setFont(*m_pGeneralFont); } void Screen::getFontMetrics() { QFontMetrics ascii_fm(*m_pASCIIFont); QFontMetrics general_fm(*m_pGeneralFont); float cn = general_fm.width(QChar(0x4e00)); float en = ascii_fm.width('W'); if (en / cn < 0.7) // almost half m_nCharWidth = qMax((cn + 1) / 2, en); else m_nCharWidth = (qMax(en, cn) + 1) / 2; m_nCharDelta = m_nCharWidth - cn/2; m_nCharHeight = qMax(ascii_fm.height(),general_fm.height()); m_nCharAscent = ascii_fm.ascent(); m_nCharDescent = ascii_fm.descent(); } void Screen::asciiFontChanged(const QFont & font) { qDebug() << "ASCII font changed: " << font.family(); if (m_pASCIIFont != NULL) { delete m_pASCIIFont; } m_pASCIIFont = new QFont(font); m_pASCIIFont->setPointSize(qMax(8,m_pParam->m_mapParam["fontsize"].toInt())); m_pGeneralFont->setPointSize(qMax(8,m_pParam->m_mapParam["fontsize"].toInt())); QResizeEvent* re = new QResizeEvent(size(), size()); resizeEvent(re); } void Screen::generalFontChanged(const QFont & font) { if (m_pGeneralFont != NULL) { delete m_pGeneralFont; } m_pGeneralFont = new QFont(font); m_pASCIIFont->setPointSize(qMax(8,m_pParam->m_mapParam["fontsize"].toInt())); m_pGeneralFont->setPointSize(qMax(8,m_pParam->m_mapParam["fontsize"].toInt())); m_pMessage->setFont(*m_pGeneralFont); QResizeEvent* re = new QResizeEvent(size(), size()); resizeEvent(re); } void Screen::fontSizeChanged(int value) { m_pParam->m_mapParam["fontsize"] = value; m_pASCIIFont->setPointSize(qMax(8,value)); m_pGeneralFont->setPointSize(qMax(8,value)); QResizeEvent* re = new QResizeEvent(size(), size()); resizeEvent(re); } QFont Screen::asciiFont() { return *m_pASCIIFont; } QFont Screen::generalFont() { return *m_pGeneralFont; } int Screen::fontSize() { return m_pParam->m_mapParam["fontsize"].toInt(); } /* ------------------------------------------------------------------------ */ /* */ /* Colors */ /* */ /* ------------------------------------------------------------------------ */ void Screen::setScheme() { // the default color table m_color[0] = Qt::black; m_color[1] = Qt::darkRed; m_color[2] = Qt::darkGreen; m_color[3] = Qt::darkYellow; m_color[4] = Qt::darkBlue; m_color[5] = Qt::darkMagenta; m_color[6] = Qt::darkCyan; m_color[7] = Qt::lightGray; m_color[8] = Qt::gray; m_color[9] = Qt::red; m_color[10] = Qt::green; m_color[11] = Qt::yellow; m_color[12] = Qt::blue; m_color[13] = Qt::magenta; m_color[14] = Qt::cyan; m_color[15] = Qt::white; m_nPxmType = 0; QString strSchemeFile = m_pParam->m_mapParam["schemefile"].toString(); // if we have scheme defined if (QFile::exists(strSchemeFile)) { // printf("scheme %s loaded sucessfully\n", strSchemeFile); Config *pConf = new Config(strSchemeFile); m_color[0].setNamedColor(pConf->getItemValue("color", "color0").toString()); m_color[1].setNamedColor(pConf->getItemValue("color", "color1").toString()); m_color[2].setNamedColor(pConf->getItemValue("color", "color2").toString()); m_color[3].setNamedColor(pConf->getItemValue("color", "color3").toString()); m_color[4].setNamedColor(pConf->getItemValue("color", "color4").toString()); m_color[5].setNamedColor(pConf->getItemValue("color", "color5").toString()); m_color[6].setNamedColor(pConf->getItemValue("color", "color6").toString()); m_color[7].setNamedColor(pConf->getItemValue("color", "color7").toString()); m_color[8].setNamedColor(pConf->getItemValue("color", "color8").toString()); m_color[9].setNamedColor(pConf->getItemValue("color", "color9").toString()); m_color[10].setNamedColor(pConf->getItemValue("color", "color10").toString()); m_color[11].setNamedColor(pConf->getItemValue("color", "color11").toString()); m_color[12].setNamedColor(pConf->getItemValue("color", "color12").toString()); m_color[13].setNamedColor(pConf->getItemValue("color", "color13").toString()); m_color[14].setNamedColor(pConf->getItemValue("color", "color14").toString()); m_color[15].setNamedColor(pConf->getItemValue("color", "color15").toString()); delete pConf; } m_color[0].setAlphaF(m_pParam->m_mapParam["opacity"].toInt()/100.0); } void Screen::schemeChanged(int index) { if (index == -1) { return; } QStringList schemeList = schemeDialog::loadSchemeList(); m_pParam->m_mapParam["schemefile"] = schemeList[index]; setScheme(); QResizeEvent* re = new QResizeEvent(size(), size()); resizeEvent(re); } void Screen::opacityChanged(int val) { m_color[0].setAlphaF(val/100.0); QResizeEvent* re = new QResizeEvent(size(), size()); resizeEvent(re); } /* ------------------------------------------------------------------------ */ /* */ /* Scrollbar */ /* */ /* ------------------------------------------------------------------------ */ void Screen::prevPage() { scrollLine(-m_pBuffer->line()); } void Screen::nextPage() { scrollLine(m_pBuffer->line()); } void Screen::prevLine() { scrollLine(-1); } void Screen::nextLine() { scrollLine(1); } void Screen::scrollLine(int delta) { m_nStart += delta; if (m_nStart < 0) { m_nStart = 0; return; } if (m_nStart > m_pBuffer->lines() - m_pBuffer->line()) { m_nStart = m_pBuffer->lines() - m_pBuffer->line(); return; } m_scrollBar->setValue(m_nStart); m_nEnd = m_nStart + m_pBuffer->line() - 1; // notify bbs m_pBBS->setScreenStart(m_nStart); for (int i = m_nStart; i <= m_nEnd; i++) m_pBuffer->at(i)->setChanged(-1, -1); updateRegion(); } void Screen::scrollChanged(int value) { if (m_nStart == value) return; if (value < 0) value = 0; if (value > m_pBuffer->lines() - m_pBuffer->line()) value = m_pBuffer->lines() - m_pBuffer->line(); m_nStart = value; m_nEnd = value + m_pBuffer->line() - 1; // notify bbs m_pBBS->setScreenStart(m_nStart); for (int i = m_nStart; i <= m_nEnd; i++) m_pBuffer->at(i)->setChanged(-1, -1); updateRegion(); } void Screen::updateScrollBar() { switch (Global::instance()->scrollPosition()) { case Global::Hide: m_scrollBar->hide(); m_rcClient = QRect(1, 1, rect().width() - 1, rect().height() - 1); break; case Global::Left: m_scrollBar->setGeometry(0, 0, Scrollbar_Width, rect().height()); m_scrollBar->show(); m_rcClient = QRect(Scrollbar_Width + 3, 1, rect().width() - Scrollbar_Width - 3, rect().height() - 1); break; case Global::Right: m_scrollBar->setGeometry(rect().width() - Scrollbar_Width, 0, Scrollbar_Width, rect().height()); m_scrollBar->show(); m_rcClient = QRect(3, 1, rect().width() - Scrollbar_Width - 3, rect().height() - 1); break; } // qDebug("second: %d, %d", m_rcClient.width(),m_rcClient.height()); // if (m_pCanvas != NULL) { // delete m_pCanvas; // m_pCanvas = NULL; // } // m_pCanvas = new QPixmap(m_rcClient.width(), m_rcClient.height()); //repaint(true); update(); } void Screen::bufferSizeChanged() { disconnect(m_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); m_scrollBar->setRange(0, m_pBuffer->lines() - m_pBuffer->line()); m_scrollBar->setSingleStep(1); m_scrollBar->setPageStep(m_pBuffer->line()); m_scrollBar->setValue(m_pBuffer->lines() - m_pBuffer->line()); m_nStart = m_scrollBar->value(); m_nEnd = m_scrollBar->value() + m_pBuffer->line() - 1; // notify bbs m_pBBS->setScreenStart(m_nStart); connect(m_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); delete []m_pBlinkLine; m_pBlinkLine = new bool[m_nEnd - m_nStart + 1]; scrollLine(0); } /* ------------------------------------------------------------------------ */ /* */ /* Display */ /* */ /* ------------------------------------------------------------------------ */ //set pixmap background void Screen::setBgPxm(const QPixmap& pixmap, int nType) { m_hasBg = false; m_pxmBg = pixmap; m_nPxmType = nType; QPalette palette; if (Global::instance()->isBossColor()) { palette.setColor(backgroundRole(), Qt::white); setPalette(palette); // setBackgroundColor( Qt::white ); return; } switch (nType) { case 0: // none palette.setColor(backgroundRole(), m_color[0]); setPalette(palette); break; case 1: { // transparent } break; case 2: // tile if (!pixmap.isNull()) { palette.setBrush(backgroundRole(), QBrush(pixmap)); setPalette(palette); // setBackgroundPixmap( pixmap ); m_hasBg = true; break; } case 3: // center if (!pixmap.isNull()) { QPixmap pxmBg = QPixmap(size()); QPainter painter(&pxmBg); pxmBg.fill(m_color[0]); painter.drawPixmap((size().width() - pixmap.width()) / 2, (size().height() - pixmap.height()) / 2, pixmap.width(), pixmap.height(), pixmap); palette.setBrush(backgroundRole(), QBrush(pxmBg)); setPalette(palette); // setBackgroundPixmap(pxmBg); m_hasBg = true; break; } case 4: // stretch if (!pixmap.isNull()) { float sx = (float)size().width() / pixmap.width(); float sy = (float)size().height() / pixmap.height(); QMatrix matrix; matrix.scale(sx, sy); palette.setBrush(backgroundRole(), QBrush(pixmap.transformed(matrix))); setPalette(palette); // setBackgroundPixmap(pixmap.transformed( matrix )); m_hasBg = true; break; } default: palette.setColor(backgroundRole(), m_color[0]); setPalette(palette); // setBackgroundColor( m_color[0] ); } } void Screen::blinkScreen() { QPainter painter; painter.begin(this); painter.setBackground(QBrush(m_color[0])); int startx; for (int index = m_nStart; index <= m_nEnd; index++) { if (m_pBlinkLine[index - m_nStart]) { TextLine *pTextLine = m_pBuffer->at(index); uint linelength = pTextLine->getLength(); QByteArray attr = pTextLine->getAttr(); for (uint i = 0; i < linelength; ++i) { if (GETBLINK(attr.at(i))) { startx = i; while (i < linelength && GETBLINK(attr.at(i))) ++i; painter.fillRect(mapToRect(startx, index, i-startx, 1), QBrush(m_color[0])); --i; drawLine(painter, index, startx, i, false); } } } } } // refresh the screen when // 1. received new contents form server // 2. scrolled by user void Screen::refreshScreen() { if (m_cursorTimer->isActive()) m_cursorTimer->stop(); if (m_blinkTimer->isActive()) m_blinkTimer->stop(); m_hasBlink = false; m_bCursor = true; //setUpdatesEnabled(false); int startx, endx; QPainter painter; QRegion blinkRegion; painter.begin(this); //qDebug("size: %d, %d", width(),height()); if (m_ePaintState == Show) painter.fillRect(rect(), m_color[0]); for (int index = m_nStart; index <= m_nEnd; index++) { if (index >= m_pBuffer->lines()) { qDebug("Screen::drawLine wrong index %d", index); painter.end(); return; } TextLine *pTextLine = m_pBuffer->at(index); if (pTextLine->hasBlink()) { m_hasBlink = true; m_pBlinkLine[index - m_nStart] = true; uint linelength = pTextLine->getLength(); QByteArray attr = pTextLine->getAttr(); for (uint i = 0; i < linelength; ++i) { if (GETBLINK(attr.at(i))) { startx = i; while (i < linelength && GETBLINK(attr.at(i))) ++i; blinkRegion += mapToRect(startx, index, i-startx, 1); } } } else m_pBlinkLine[index - m_nStart] = false; if (m_ePaintState == Show) { drawLine(painter, index, 0, -1); continue; } if (!pTextLine->isChanged(startx, endx)) continue; /* Finally get around this for pku & ytht, don't know why some weird things happened when only erase and draw the changed part. */ //startx = testChar(startx, index); painter.fillRect(mapToRect(startx, index, -1, 1), m_color[0]); drawLine(painter, index, startx); pTextLine->clearChange(); } painter.end(); m_blinkRegion = blinkRegion; updateMicroFocus(); if (m_pWindow->isConnected()) { m_ePaintState = Cursor; m_bCursor = true; updateCursor(); } if (m_pWindow->isConnected()) m_cursorTimer->start(1000); if (m_hasBlink) m_blinkTimer->start(1000); } void Screen::blurBackground() { if (m_pParam->m_mapParam["opacity"].toInt() < 100) BlurHelper().updateBlurRegion(Frame::instance(), Frame::instance()->rect()); } void Screen::paintEvent(QPaintEvent * pe) { // qDebug()<<"Event:"<type() == QEvent::KeyPress) { QKeyEvent * ke = static_cast(e); if (ke->key() == Qt::Key_Tab) { m_pWindow->keyPressEvent(ke); ke->accept(); return true; } } else if (e->type() == QEvent::ShortcutOverride) { QKeyEvent * ke = static_cast(e); if (ke->key() == Qt::Key_W && ke->modifiers() == Qt::ControlModifier) { ke->accept(); return true; } } return QWidget::event(e); } void Screen::repaintScreen(QPaintEvent * pe) { QPainter painter; painter.begin(this); painter.setBackground(QBrush(m_color[0])); // qDebug("rcClient: %d, %d", m_pCanvas->width(),m_pCanvas->height()); painter.eraseRect(pe->rect()); QRect rect = pe->rect() & m_rcClient; if (rect.isEmpty()) return; //painter.eraseRect(rect); QPoint tlPoint = mapToChar(QPoint(rect.left(), rect.top())); QPoint brPoint = mapToChar(QPoint(rect.right(), rect.bottom())); for (int y = tlPoint.y(); y <= brPoint.y(); y++) { drawLine(painter, y); //if( m_pBBS->isSelected(y)&&m_pParam->m_mapParam["menutype"].toInt()==1 ) //{ // QRect rcMenu = mapToRect(m_pBBS->getSelectRect()); // QPixmap pxm(rcMenu.width(), rcMenu.height()); // bitBlt(this, rcMenu.x(), rcMenu.y(), &pxm, 0, 0, // rcMenu.width(), rcMenu.height(), Qt::NotROP ); //} } painter.end(); } // draw a line with the specialAtter if given. // modified by hooey to draw part of the line. void Screen::drawLine(QPainter& painter, int index, int beginx, int endx, bool complete) { if (index >= m_pBuffer->lines()) { qDebug("Screen::drawLine wrong index %d", index); return; } TextLine *pTextLine = m_pBuffer->at(index); QByteArray color = pTextLine->getColor(); QByteArray attr = pTextLine->getAttr(); int linelength = pTextLine->getLength(); char tempcp = 0; char tempea = 0; short tempattr; bool bSelected; bool bReverse = false; int startx; //qDebug() << "beginx: " << beginx << ", endx: " << endx << ", linelength: " << linelength; QString strShow; if (complete == true && m_pBBS->isSelected(index)) { drawMenuSelect(painter, index); if (m_pParam->m_mapParam["menutype"].toInt() == 1) { bReverse = true; } beginx = 0; endx = linelength - 1; } if (beginx < 0) beginx = 0; if (endx >= linelength || endx < 0) { endx = qMin(m_pBuffer->columns(), linelength)-1; //painter.eraseRect(mapToRect(beginx, index, linelength, 1)); // Maybe we should calculate more accurate size; } if (endx >= qMin(color.size(), attr.size())) { endx = qMin(color.size(), attr.size()) -1; } if (beginx >= linelength) { //qDebug("Screen::drawLine: wrong position: %d(%d)", beginx, linelength); return; } if (beginx > 0 && pTextLine->isPartial(beginx)) { beginx -= 1; } if (m_ePaintState == Cursor && m_bCursor) { bReverse = true; } for (int i = beginx; i < endx+1;i++) { int len = 0; startx = i; if (i < color.size()) tempcp = color.at(i); if (i < attr.size()) tempea = attr.at(i); bSelected = m_pBuffer->isSelected(QPoint(i, index), m_pWindow->m_bRectCopy); len = pTextLine->size(i); if ( (i+1) >= linelength) { len = 1; } if (len <= 0) { qDebug("drawLine: non printable char"); continue; } if (bSelected) // selected area is text=color(0) background=color(7) tempattr = SETCOLOR(SETFG(0) | SETBG(7)) | SETATTR(NO_ATTR); else if (bReverse) tempattr = SETCOLOR(tempcp) | SETATTR(SETREVERSE(tempea)); else tempattr = SETCOLOR(tempcp) | SETATTR(tempea); //qDebug() << "startx: " << startx << " i: " << i << " string: " << strShow; // There should be only one. // TODO: Rewrite this when we want to do more than char to char convert strShow = Global::instance()->convert(pTextLine->getText(startx, len), (Global::Conversion)m_pParam->m_mapParam["displaycode"].toInt()); if (strShow.isEmpty()) { qDebug("drawLine: empty string?"); break; } // Draw Charactors one by one to fix the variable font display problem int charWidth = TermString::wcwidth(strShow.at(0)); if (charWidth <= 0) { qDebug("drawLine: non printable char"); continue; } CharFlags flags = RenderAll; if ( pTextLine->isPartial(startx) ) { flags = RenderRight; charWidth = 1; } else if ( charWidth == 2) { if (tempcp != color.at(i+1) || tempea != attr.at(i+1) || bSelected != m_pBuffer->isSelected(QPoint(i+1, index), m_pWindow->m_bRectCopy)) { charWidth = 1; flags = RenderLeft; } else { ++i; } } drawStr(painter, (QString)strShow.at(0), startx, index, charWidth, tempattr, bSelected, flags); //i += (len-1); } } // draw functions void Screen::drawStr(QPainter& painter, const QString& str, int x, int y, int length, short attribute, bool transparent, CharFlags flags) { char cp = GETCOLOR(attribute); char ea = GETATTR(attribute); // test bold mask or always highlighted if (GETBOLD(ea) || m_pParam->m_mapParam["alwayshighlight"].toBool()) cp = SETHIGHLIGHT(cp); // use 8-15 color // test dim mask if (GETDIM(ea)) { }; // test underline mask QFont asciiFont = *m_pASCIIFont; QFont generalFont = *m_pGeneralFont; if (GETUNDERLINE(ea)) { asciiFont.setUnderline(true); generalFont.setUnderline(true); } if (length == 1) { painter.setFont(asciiFont); } else if (length == 2) { painter.setFont(generalFont); } // test blink mask if (GETBLINK(ea)) { } // test rapidblink mask if (GETRAPIDBLINK(ea)) { }; // test reverse mask if (GETREVERSE(ea)) cp = REVERSECOLOR(cp); // test invisible mask if (GETINVISIBLE(ea)) { }; QPoint pt = mapToPixel(QPoint(x, y)); // black on white without attr if (Global::instance()->isBossColor()) { painter.setPen(GETFG(cp) == 0 ? Qt::white : Qt::black); if (GETBG(cp) != 0 && !transparent) painter.setBackgroundMode(Qt::OpaqueMode); else painter.setBackgroundMode(Qt::TransparentMode); painter.setBackground(GETBG(cp) == 7 ? Qt::black : Qt::white); painter.drawText(pt.x(), pt.y(), m_nCharWidth*length, m_nCharHeight, flags, str); return; } painter.setPen(m_color[m_pParam->m_mapParam["ansicolor"].toBool()||GETFG(cp)==0?GETFG(cp):7]); if (GETBG(cp) != 0 && !transparent) { painter.setBackgroundMode(Qt::OpaqueMode); painter.setBackground(m_color[m_pParam->m_mapParam["ansicolor"].toBool()||GETBG(cp)==7?GETBG(cp):0]); } else painter.setBackgroundMode(Qt::TransparentMode); if (m_blinkScreen && GETBLINK(GETATTR(attribute))) { if (GETBG(cp) != 0) painter.fillRect(mapToRect(x, y, length, 1), QBrush(m_color[GETBG(cp)])); } else { if (GETBG(cp) != 0 || m_ePaintState == Cursor) painter.fillRect(mapToRect(x, y, length, 1), QBrush(m_color[GETBG(cp)])); if (flags == RenderAll) { //painter.fillRect(mapToRect(x, y, length, 1), QBrush(m_color[0])); painter.drawText(pt.x(), pt.y(), m_nCharWidth*length, m_nCharHeight, Qt::AlignCenter, str); } else { QPixmap pm = QPixmap(m_nCharWidth*2, m_nCharHeight); QPainter p(&pm); p.fillRect(0, 0, pm.width(), pm.height(), m_color[GETBG(cp)]); p.setPen(m_color[GETFG(cp)]); p.setFont(painter.font()); p.drawText(0, 0, m_nCharWidth*2, m_nCharHeight, Qt::AlignCenter, str); p.end(); if (flags == RenderLeft) { painter.drawPixmap(pt.x(), pt.y(), pm, 0, 0, m_nCharWidth, m_nCharHeight); } if (flags == RenderRight) { painter.drawPixmap(pt.x(), pt.y(), pm, m_nCharWidth, 0, m_nCharWidth, m_nCharHeight); } } } painter.setBackground(QBrush(m_color[0])); } void Screen::eraseRect(QPainter&, int, int, int, int, short) { } void Screen::bossColor() { setBgPxm(m_pxmBg, m_nPxmType); //repaint(true); update(); } void Screen::drawMenuSelect(QPainter& painter, int index) { QRect rcSelect, rcMenu, rcInter; if (m_pBuffer->isSelected(index)) { rcSelect = mapToRect(m_pBuffer->getSelectRect(index, m_pWindow->m_bRectCopy)); if (Global::instance()->isBossColor()) painter.fillRect(rcSelect, Qt::black); else painter.fillRect(rcSelect, QBrush(m_color[7])); } if (m_pBBS->isSelected(index)) { rcMenu = mapToRect(m_pBBS->getSelectRect().intersected(QRect(0,index,m_pBuffer->columns(), 1))); switch (m_pParam->m_mapParam["menutype"].toInt()) { case 0: // underline painter.fillRect(rcMenu.x(), rcMenu.y() + 10*m_nCharHeight / 11, rcMenu.width(), m_nCharHeight / 11, m_color[7]); break; case 2: painter.fillRect(rcMenu, QBrush(m_pParam->m_mapParam["menucolor"].value())); break; } } } void Screen::updateRegion() { int startx, endx; m_ePaintState = NewData; QRegion paintRegion; for (int index = m_nStart; index <= m_nEnd; index++) { TextLine *pTextLine = m_pBuffer->at(index); if (!pTextLine->isChanged(startx, endx)) continue; if (startx > 0 && pTextLine->isPartial(startx)) { startx -= 1; } paintRegion += mapToRect(startx, index, -1, 1); } update(paintRegion); } /* ------------------------------------------------------------------------ */ /* */ /* Auxilluary */ /* */ /* ------------------------------------------------------------------------ */ QPoint Screen::mapToPixel(const QPoint& point) { QPoint pt = m_rcClient.topLeft(); QPoint pxlPoint; pxlPoint.setX(point.x()*m_nCharWidth + pt.x()); pxlPoint.setY((point.y() - m_nStart)*m_nCharHeight + pt.y()); return pxlPoint; } QPoint Screen::mapToChar(const QPoint& point) { QPoint pt = m_rcClient.topLeft(); QPoint chPoint; chPoint.setX(qMin(qMax(0, (point.x() - pt.x()) / m_nCharWidth), m_pBuffer->columns() - 1)); chPoint.setY(qMin(qMax(0, (point.y() - pt.y()) / m_nCharHeight + m_nStart), m_nEnd)); //FIXME add bound check return chPoint; } QRect Screen::mapToRect(int x, int y, int width, int height) { int px = x < 0 ? 0 : x; int py = y < 0 ? 0 : y; QPoint pt = mapToPixel(QPoint(px, py)); if (width == -1) // to the end return QRect(pt.x(), pt.y(), size().width() , m_nCharHeight*height); else return QRect(pt.x(), pt.y(), width*m_nCharWidth, m_nCharHeight*height); } QRect Screen::mapToRect(const QRect& rect) { return mapToRect(rect.x(), rect.y(), rect.width(), rect.height()); } // from KImageEffect::fade QImage& Screen::fade(QImage& img, float val, const QColor& color) { if (img.width() == 0 || img.height() == 0) return img; // We don't handle bitmaps if (img.depth() == 1) return img; unsigned char tbl[256]; for (int i = 0; i < 256; i++) tbl[i] = (int)(val * i + 0.5); int red = color.red(); int green = color.green(); int blue = color.blue(); QRgb col; int r, g, b, cr, cg, cb; if (img.depth() <= 8) { // pseudo color for (int i = 0; i < img.colorCount(); i++) { col = img.color(i); cr = qRed(col); cg = qGreen(col); cb = qBlue(col); if (cr > red) r = cr - tbl[cr - red]; else r = cr + tbl[red - cr]; if (cg > green) g = cg - tbl[cg - green]; else g = cg + tbl[green - cg]; if (cb > blue) b = cb - tbl[cb - blue]; else b = cb + tbl[blue - cb]; img.setColor(i, qRgba(r, g, b, qAlpha(col))); } } else { // truecolor for (int y = 0; y < img.height(); y++) { QRgb *data = (QRgb *) img.scanLine(y); for (int x = 0; x < img.width(); x++) { col = *data; cr = qRed(col); cg = qGreen(col); cb = qBlue(col); if (cr > red) r = cr - tbl[cr - red]; else r = cr + tbl[red - cr]; if (cg > green) g = cg - tbl[cg - green]; else g = cg + tbl[green - cg]; if (cb > blue) b = cb - tbl[cb - blue]; else b = cb + tbl[blue - cb]; *data++ = qRgba(r, g, b, qAlpha(col)); } } } return img; } void Screen::inputMethodEvent(QInputMethodEvent * e) { QString commitString = e->commitString(); if (!commitString.isEmpty()) { emit inputEvent(commitString); } QString preeditString = e->preeditString(); if (m_inputContent == NULL){ m_inputContent = new Input(this, m_nCharWidth, m_nCharHeight, m_nCharAscent); m_inputContent->setFont(*m_pGeneralFont); } if (preeditString.isEmpty()) { m_inputContent->hide(); } else { m_inputContent->drawInput(e); QPoint cursor; int x = m_pBuffer->caretX(); int y = m_pBuffer->caretY(); cursor = mapToPixel(QPoint(x+1,y)); if (m_inputContent->width() + cursor.x() > m_rcClient.width()){ cursor = mapToPixel(QPoint(x,y)); cursor.setX(m_rcClient.right() - m_inputContent->width()); }else cursor = mapToPixel(QPoint(x,y)); m_inputContent->show(); m_inputContent->move(cursor); } } QVariant Screen::inputMethodQuery(Qt::InputMethodQuery property) const { // qDebug()<<"inputMethodQuery"; switch (property) { case Qt::ImMicroFocus: return QVariant(QRect((m_pBuffer->caret().x() + 1)*m_nCharWidth, (m_pBuffer->caret().y() + 1)*m_nCharHeight, m_nCharWidth, m_nCharHeight)); case Qt::ImFont: return QVariant(*m_pGeneralFont); case Qt::ImCursorPosition: return m_pBuffer->caret().x(); default: return QVariant(); } } void Input::drawInput(QInputMethodEvent * e) { int cursorPos = -1; foreach (QInputMethodEvent::Attribute attribute, e->attributes()) { switch (attribute.type) { case QInputMethodEvent::TextFormat: //FIXME: text format? break; case QInputMethodEvent::Cursor: if (attribute.length == 0) { cursorPos = -1; } else { cursorPos = attribute.start; } break; case QInputMethodEvent::Language: break; case QInputMethodEvent::Ruby: break; default: qDebug("Unknown attribute"); break; } } d_text = e->preeditString(); d_pos = cursorPos; repaint(); } void Input::paintEvent(QPaintEvent * e) { QPainter inputPainter; int len = 0; int cursor = 0; int width, height; if (d_pos == -1 || d_pos >= d_text.length()) d_pos = 0; for (int i = 0; i < d_text.length(); ++i) { if (i == d_pos) cursor = len; len += TermString::wcwidth(d_text[i]); } width = len * d_width; height = d_height; inputPainter.begin(this); setFixedSize(width,height); inputPainter.eraseRect(rect()); len = 0; inputPainter.setPen(Qt::black); for (int j = 0; j < d_text.length(); ++j) { if (j == d_pos) { QRect rcCurrent(len * d_width, 0, d_width*TermString::wcwidth(d_text[d_pos]), d_height); inputPainter.fillRect(rcCurrent, QBrush(Qt::darkGray)); inputPainter.setPen(Qt::white); inputPainter.drawText(len * d_width ,d_ascent, d_text.mid(d_pos, 1)); } else { inputPainter.drawText(len * d_width, d_ascent, d_text.mid(j, 1)); } len += TermString::wcwidth(d_text[j]); } inputPainter.end(); } } // namespace QTerm #include qterm-0.7.3/src/qtermscreen.h000066400000000000000000000114021332762052600161450ustar00rootroot00000000000000#ifndef QTERMSCREEN_H #define QTERMSCREEN_H // #include // #include // #include #include "qtermconvert.h" //Added by qt3to4: #include #include #include #include #include #include #include #include #include #include #include #include class QTextCodec; // class QShortcut; class QColor; class QPainter; class QInputMethodEvent; namespace QTerm { class Window; class Buffer; class BBS; class Param; class PageViewMessage; // class Q3Accel; class Input : public QWidget { Q_OBJECT public: Input(QWidget * parent, int width, int height, int ascent) :QWidget(parent),d_text(),d_pos(0),d_height(height), d_width(width), d_ascent(ascent) { } ~Input() { } void drawInput(QInputMethodEvent * ); protected: void paintEvent( QPaintEvent * ); private: QString d_text; int d_pos; int d_height, d_width, d_ascent; }; class Screen : public QWidget { Q_OBJECT public: enum PaintState {NewData, Blink, Cursor, Repaint, Show}; enum MouseState {Enter, Press, Move, Release, Leave}; enum CharFlags {RenderAll, RenderLeft, RenderRight}; Screen(QWidget *parent, Buffer *buffer, Param *param, BBS *bbs); ~Screen(); void setScheme(); QFont asciiFont(); QFont generalFont(); int fontSize(); void setBgPxm(const QPixmap& pixmap, int nType = 0); void refreshScreen(); void blinkScreen(); void updateCursor(); void repaintScreen(QPaintEvent * pe); void updateFont(); QPoint mapToPixel(const QPoint&); QPoint mapToChar(const QPoint&); QRect mapToRect(int, int, int, int); QRect mapToRect(const QRect&); PageViewMessage * osd(); void updateRegion(); PaintState m_ePaintState; signals: // 0 - enter 1 - press 2 - move 3 - release 4 - leave void mouseAction(int, QMouseEvent *); void inputEvent(const QString &); public slots: void bufferSizeChanged(); void bossColor(); void updateScrollBar(); void asciiFontChanged(const QFont & font); void generalFontChanged(const QFont & font); void fontSizeChanged(int size); void schemeChanged(int index); void opacityChanged(int val); protected: void initFontMetrics(); void resizeEvent(QResizeEvent *); void focusInEvent(QFocusEvent *); void focusOutEvent(QFocusEvent *); void showEvent(QShowEvent *); bool event(QEvent *); void paintEvent(QPaintEvent *); // display void eraseRect(QPainter& , int, int, int, int, short); void drawStr(QPainter&, const QString&, int, int, int, short, bool, CharFlags); void drawLine(QPainter&, int index, int beginx = -1, int endx = -1, bool complete = true); void drawCaret(QPainter&, bool); void drawMenuSelect(QPainter&, int); // auxiluary int getPosX(int xChar) { return xChar*m_nCharWidth; } int getPosY(int yLine) { return yLine*m_nCharHeight; } void getFontMetrics(); QImage& fade(QImage&, float, const QColor&); /* void imStartEvent(QIMEvent * e); void imComposeEvent(QIMEvent * e); void imEndEvent(QIMEvent * e); //void drawInput(QString &, int); */ void inputMethodEvent(QInputMethodEvent *e); QVariant inputMethodQuery(Qt::InputMethodQuery property) const; protected slots: void blinkEvent(); void cursorEvent(); void scrollChanged(int); void prevPage(); void nextPage(); void prevLine(); void nextLine(); void scrollLine(int); void blurBackground(); protected: QRect m_rcClient; // the display area int Scrollbar_Width; QScrollBar * m_scrollBar; QTimer * m_blinkTimer; QTimer * m_cursorTimer; Input * m_inputContent; bool m_blinkScreen; bool m_blinkCursor; bool m_hasBlink; Window * m_pWindow; BBS * m_pBBS; Buffer * m_pBuffer; Param * m_pParam; // QRubberBand * m_pBand; QColor m_color[16]; QFont *m_pASCIIFont; QFont *m_pGeneralFont; //QPixmap * m_pCanvas; int m_nCharAscent, m_nCharDescent, m_nCharWidth, m_nCharHeight; int m_nCharDelta; int m_nLineSpacing; // for future bool * m_pBlinkLine; bool m_bCursor; // background bool m_hasBg; QPixmap m_pxmBg; int m_nPxmType; // the range of the buffer to be displayed int m_nStart; int m_nEnd; //osd PageViewMessage * m_pMessage; // Q3Accel * m_pAccel; QShortcut * m_scPrevPage; QShortcut * m_scNextPage; QShortcut * m_scPrevLine; QShortcut * m_scNextLine; Convert m_converter; QTextCodec *m_pCodec; QRegion m_blinkRegion; friend class Window; // for test only }; } // namespace QTerm #endif //QTERMSCREEN_H qterm-0.7.3/src/qtermsocket.cpp000066400000000000000000000340071332762052600165170ustar00rootroot00000000000000#include "qterm.h" #include "qtermsocket.h" #include "hostinfo.h" // #include //Added by qt3to4: #include #include #include #if !defined(Q_OS_BSD4) && !defined(Q_OS_FREEBSD_) \ && !defined(Q_OS_MACX) && !defined(Q_OS_DARWIN) #include #endif #include #if defined(Q_OS_SOLARIS) #include #endif #include /* hack from wget/http.c */ #define BASE64_LENGTH(len) (4 * (((len) + 2) / 3)) namespace QTerm { static void base64_encode (const char *s, char *store, int length); static char * basic_authentication_encode (const char *user, const char *passwd, const char *header); static int parse_http_status_line (const char *line, const char **reason_phrase_ptr); const char wingate_enter = 'J'&0x1f; //============================================================================== //SocketPrivate //============================================================================== SocketPrivate::SocketPrivate(QObject * parent) :QObject(parent) { m_socket = new QTcpSocket(this); // proxy related proxy_type = NOPROXY; proxy_state = 0; bauth = false; connect(m_socket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(m_socket, SIGNAL(hostFound()), this, SIGNAL(hostFound())); connect(m_socket, SIGNAL(disconnected()), this, SIGNAL(connectionClosed())); connect(m_socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead())); connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(error(QAbstractSocket::SocketError))); } SocketPrivate::~SocketPrivate() { delete m_socket; } void SocketPrivate::setProxy(int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd) { proxy_type=nProxyType; if ( proxy_type==NOPROXY ) return; bauth = bAuth; proxy_host = strProxyHost; proxy_port = uProxyPort; proxy_usr = strProxyUsr; proxy_pwd = strProxyPwd; } void SocketPrivate::socketConnected() { QByteArray strPort; QByteArray command(9,0); char *proxyauth; char *request; int len=0; switch( proxy_type ) { case NOPROXY: // no proxy emit connected(); return; case WINGATE: // Wingate Proxy strPort.setNum( port ); writeBlock( host.toLocal8Bit() ); writeBlock( " " ); writeBlock( strPort ); writeBlock( &wingate_enter );// CTRL+J emit SocketState( TSHOSTCONNECTED ); return; case SOCKS4: // Socks4 Proxy command.resize(9); command[0]='\x04'; command[1]='\x01'; memcpy(command.data()+2,&addr_host.sin_port,2); memcpy(command.data()+4,&addr_host.sin_addr,4); writeBlock(command); proxy_state = 1; emit SocketState( TSPROXYCONNECTED ); return; case SOCKS5: // Socks5 Proxy if( bauth ) { command.resize(4); command[0]='\x05'; command[1]='\x02'; command[2]='\x02'; command[3]='\x00'; writeBlock(command); } else { command.resize(3); command[0]='\x05'; command[1]='\x01'; command[2]='\x00'; writeBlock(command); } proxy_state=1; emit SocketState( TSPROXYCONNECTED ); return; case HTTP: proxyauth=NULL; if(bauth) proxyauth = basic_authentication_encode (proxy_usr.toLocal8Bit(), proxy_pwd.toLocal8Bit(), "Proxy-Authorization"); len = proxyauth!=NULL?strlen(proxyauth):0; request = new char[host.length()+len+81]; sprintf(request, "CONNECT %s:%u HTTP/1.0\r\n" "%s\r\n", host.toLatin1().data(),port, proxyauth!=NULL?proxyauth:""); writeBlock(request); delete [] request; free(proxyauth); proxy_state=1; emit SocketState( TSPROXYCONNECTED ); return; default: emit SocketState( TSHOSTCONNECTED ); return; } } void SocketPrivate::socketReadyRead() { if(proxy_type==NOPROXY || proxy_state==0) { emit readyRead(); return; } int nbytes,nread; QByteArray from_socket; // get the data size nbytes=bytesAvailable(); if (nbytes <= 0) return; //resize input buffer from_socket.resize(0); //read data from socket to from_socket from_socket = readBlock(nbytes); nread = from_socket.size(); //do some checks if ( nread <= 0 ) { qWarning("Reading from socket:nread<=0"); return; } if ( nread > nbytes ) { qWarning("Reading overflow from socket:nread>nbytes"); return; } // Socks4 Proxy Reply if( proxy_type==SOCKS4 && proxy_state==1 ) { if( nread!=8 ) { emit SocketState( TSPROXYERROR ); return; } if( from_socket.at(1)==90 ) emit connected(); else emit SocketState( TSPROXYFAIL ); proxy_state=0; return; } // HTTP Proxy Reply if( proxy_type==HTTP && proxy_state!=0 ) { const char *error; int statcode = parse_http_status_line(from_socket.data(), &error); if( statcode>= 200 && statcode<300 ) emit connected(); else emit SocketState( TSPROXYFAIL ); proxy_state=0; return; } // Socks5 Proxy Reply if( proxy_type==SOCKS5 && proxy_state!=0 ) { socks5_reply(from_socket,nread); return; } } void SocketPrivate::flush() { m_socket->flush(); } QAbstractSocket::SocketState SocketPrivate::state() { return m_socket->state(); } HostInfo * SocketPrivate::hostInfo() { return m_hostInfo; } void SocketPrivate::connectToHost(HostInfo * hostInfo) { m_hostInfo = hostInfo; host=m_hostInfo->hostName(); port=m_hostInfo->port(); addr_host.sin_port=htons(port); if( proxy_type == NOPROXY ) { m_socket->connectToHost(host, port); } else if ( proxy_type == HTTP ) { m_socket->connectToHost(proxy_host, proxy_port); } else { //get ip addr from name struct hostent * hostent; #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) WSADATA wsd; if (WSAStartup(0x202,&wsd) != 0) { emit SocketState(TSEINIWINSOCK); WSACleanup( ); return; } #endif /* QHostAddress ha(host); if(ha.isIPv4Address()) { hostent = gethostbyaddr( (char *)host, host.length(), AF_INET ); } else */ { hostent = gethostbyname( host.toLocal8Bit() ); } if( hostent==NULL ) { emit SocketState(TSEGETHOSTBYNAME); return; } //now only ipv4 support memcpy(&addr_host.sin_addr,hostent->h_addr,4); m_socket->connectToHost( proxy_host, proxy_port ); } } void SocketPrivate::close() { m_socket->close(); } QByteArray SocketPrivate::readBlock(unsigned long maxlen) { return m_socket->read(maxlen); } long SocketPrivate::writeBlock(const QByteArray & data) { return m_socket->write(data); } unsigned long SocketPrivate::bytesAvailable() { return m_socket->bytesAvailable(); } /*------------------------------------------------------------------------ * connect command for socks5 *------------------------------------------------------------------------ */ void SocketPrivate::socks5_connect() { QByteArray command (10,0); command[0]='\x05'; command[1]='\x01'; command[2]='\x00'; command[3]='\x01'; memcpy( command.data()+4, &addr_host.sin_addr,4 ); memcpy( command.data()+8, &addr_host.sin_port,2 ); writeBlock( command ); } /*------------------------------------------------------------------------ * authentation command for socks5 *------------------------------------------------------------------------ */ void SocketPrivate::socks5_auth() { int ulen = proxy_usr.length(); int plen = proxy_pwd.length(); QByteArray command(3+ulen+plen,0); sprintf((char *)command.data()," %s %s",proxy_usr.toLocal8Bit().data(), proxy_pwd.toLocal8Bit().data()); command[0]='\x01'; command[1]=ulen; command[2+ulen] = plen; writeBlock( command ); } /*------------------------------------------------------------------------ * reply from socks5 *------------------------------------------------------------------------ */ void SocketPrivate::socks5_reply( const QByteArray& from_socket, int nread ) { if( proxy_state==1 ) // Socks5 Proxy Replay 1 { if( nread!=2 ) { proxy_state=0; emit SocketState( TSPROXYERROR ); return; } switch( from_socket.at(1) ) { case '\x00': // no authentation needed socks5_connect(); proxy_state=3; emit SocketState( TSCONNECTVIAPROXY ); return; case '\x02': //need user/password socks5_auth(); proxy_state=2; emit SocketState( TSPROXYAUTH ); return; case '\xff': proxy_state=0; emit SocketState( TSPROXYFAIL ); return; default: proxy_state=0; emit SocketState( TSPROXYFAIL ); return; } } else if( proxy_state==2) //Socks5 Proxy Replay 2 { if( nread!=2 ) { proxy_state=0; emit SocketState( TSPROXYERROR ); return; } if( from_socket.at(1)!='\00') { proxy_state=0; emit SocketState( TSPROXYFAIL ); return; } socks5_connect(); proxy_state=3; emit SocketState( TSCONNECTVIAPROXY ); return; } else if( proxy_state==3) //Socks5 Proxy Replay 3 { proxy_state=0; if( nread!=10 ) { emit SocketState( TSPROXYERROR ); return; } if( from_socket.at(1)!='\00' ) { emit SocketState( TSPROXYFAIL ); return; } emit connected(); return; } else { proxy_state=0; return; } } /* hack from wget/http.c */ /* How many bytes it will take to store LEN bytes in base64. */ #define BASE64_LENGTH(len) (4 * (((len) + 2) / 3)) /* Encode the string S of length LENGTH to base64 format and place it to STORE. STORE will be 0-terminated, and must point to a writable buffer of at least 1+BASE64_LENGTH(length) bytes. */ static void base64_encode (const char *s, char *store, int length) { /* Conversion table. */ static char tbl[64] = { 'A','B','C','D','E','F','G','H', 'I','J','K','L','M','N','O','P', 'Q','R','S','T','U','V','W','X', 'Y','Z','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v', 'w','x','y','z','0','1','2','3', '4','5','6','7','8','9','+','/' }; int i; unsigned char *p = (unsigned char *)store; /* Transform the 3x8 bits to 4x6 bits, as required by base64. */ for (i = 0; i < length; i += 3) { *p++ = tbl[s[0] >> 2]; *p++ = tbl[((s[0] & 3) << 4) + (s[1] >> 4)]; *p++ = tbl[((s[1] & 0xf) << 2) + (s[2] >> 6)]; *p++ = tbl[s[2] & 0x3f]; s += 3; } /* Pad the result if necessary... */ if (i == length + 1) *(p - 1) = '='; else if (i == length + 2) *(p - 1) = *(p - 2) = '='; /* ...and zero-terminate it. */ *p = '\0'; } /* Create the authentication header contents for the `Basic' scheme. This is done by encoding the string `USER:PASS' in base64 and prepending `HEADER: Basic ' to it. */ static char * basic_authentication_encode (const char *user, const char *passwd, const char *header) { char *t1, *t2, *res; int len1 = strlen (user) + 1 + strlen (passwd); int len2 = BASE64_LENGTH (len1); t1 = (char *)alloca (len1 + 1); sprintf (t1, "%s:%s", user, passwd); t2 = (char *)alloca (1 + len2); base64_encode (t1, t2, len1); res = (char *)malloc (len2 + 11 + strlen (header)); sprintf (res, "%s: Basic %s\r\n", header, t2); return res; } /* Parse the HTTP status line, which is of format: HTTP-Version SP Status-Code SP Reason-Phrase The function returns the status-code, or -1 if the status line is malformed. The pointer to reason-phrase is returned in RP. */ static int parse_http_status_line (const char *line, const char **reason_phrase_ptr) { /* (the variables must not be named `major' and `minor', because that breaks compilation with SunOS4 cc.) */ int mjr, mnr, statcode; const char *p; *reason_phrase_ptr = NULL; /* The standard format of HTTP-Version is: `HTTP/X.Y', where X is major version, and Y is minor version. */ if (strncmp (line, "HTTP/", 5) != 0) return -1; line += 5; /* Calculate major HTTP version. */ p = line; for (mjr = 0; QChar(*line).isDigit(); line++) mjr = 10 * mjr + (*line - '0'); if (*line != '.' || p == line) return -1; ++line; /* Calculate minor HTTP version. */ p = line; for (mnr = 0; QChar(*line).isDigit(); line++) mnr = 10 * mnr + (*line - '0'); if (*line != ' ' || p == line) return -1; /* Wget will accept only 1.0 and higher HTTP-versions. The value of minor version can be safely ignored. */ if (mjr < 1) return -1; ++line; /* Calculate status code. */ if (!(QChar(*line).isDigit() && QChar(line[1]).isDigit() && QChar(line[2]).isDigit())) return -1; statcode = 100 * (*line - '0') + 10 * (line[1] - '0') + (line[2] - '0'); /* Set up the reason phrase pointer. */ line += 3; /* RFC2068 requires SPC here, but we allow the string to finish here, in case no reason-phrase is present. */ if (*line != ' ') { if (!*line) *reason_phrase_ptr = line; else return -1; } else *reason_phrase_ptr = line + 1; return statcode; } //============================================================================== //TelnetSocket //============================================================================== TelnetSocket::TelnetSocket() : Socket() { d_socket = new SocketPrivate(); connect(d_socket, SIGNAL(connected()), this, SIGNAL(connected())); connect(d_socket, SIGNAL(hostFound()), this, SIGNAL(hostFound())); connect(d_socket, SIGNAL(connectionClosed()), this, SIGNAL(connectionClosed())); connect(d_socket, SIGNAL(readyRead()), this, SIGNAL(readyRead())); connect(d_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(error(QAbstractSocket::SocketError))); connect(d_socket, SIGNAL(SocketState(int)), this, SIGNAL(SocketState(int))); } TelnetSocket::~TelnetSocket() { delete d_socket; } void TelnetSocket::flush() { d_socket->flush(); } void TelnetSocket::setProxy( int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd) { d_socket->setProxy(nProxyType, bAuth, strProxyHost, uProxyPort, strProxyUsr, strProxyPwd); } void TelnetSocket::connectToHost(HostInfo * hostInfo) { d_socket->connectToHost(hostInfo); } void TelnetSocket::close() { d_socket->close(); } QByteArray TelnetSocket::readBlock(unsigned long maxlen) { return d_socket->readBlock(maxlen); } long TelnetSocket::writeBlock(const QByteArray & data) { return d_socket->writeBlock(data); } unsigned long TelnetSocket::bytesAvailable() { return d_socket->bytesAvailable(); } } // namespace QTerm #include qterm-0.7.3/src/qtermsocket.h000066400000000000000000000060251332762052600161630ustar00rootroot00000000000000#ifndef QTERMSOCKET_H #define QTERMSOCKET_H // _OS_X_ not defined if i dont include it #include #include #include // different #if defined(Q_OS_WIN32) || defined(_OS_WIN32_) #include #elif defined(Q_OS_BSD4) || defined(_OS_FREEBSD_) \ || defined(Q_OS_MACX) || defined(Q_OS_DARWIN) #include #include #include #include #else #include #include #include #include #endif namespace QTerm { class HostInfo; class SocketPrivate : public QObject { Q_OBJECT public: SocketPrivate(QObject * parent = 0); ~SocketPrivate(); void flush(); void setProxy(int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd); void connectToHost(HostInfo * hostInfo); void close(); QByteArray readBlock(unsigned long maxlen); long writeBlock(const QByteArray & data); unsigned long bytesAvailable(); QAbstractSocket::SocketState state(); HostInfo * hostInfo(); signals: void connected(); void hostFound(); void connectionClosed(); void delayedCloseFinished(); void readyRead(); void error(QAbstractSocket::SocketError); void SocketState(int); protected slots: void socketConnected(); void socketReadyRead(); protected: // socks5 function void socks5_connect(); void socks5_auth(); void socks5_reply( const QByteArray&, int ); private: // proxy int proxy_type; QString proxy_host; QString proxy_usr; quint16 proxy_port; QString proxy_pwd; QString host; quint16 port; int proxy_state; bool bauth; struct sockaddr_in addr_host; HostInfo * m_hostInfo; QTcpSocket *m_socket; }; // virtual base class for TelnetSocket and SSHSocket class Socket : public QObject { Q_OBJECT public: Socket(QObject * parent = 0) :QObject(parent) { } virtual ~Socket() { } virtual void flush() = 0; virtual void setProxy(int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd) = 0; virtual void connectToHost(HostInfo * hostInfo) = 0; virtual void close() = 0; virtual QByteArray readBlock(unsigned long maxlen) = 0; virtual long writeBlock(const QByteArray & data) = 0; virtual unsigned long bytesAvailable() = 0; signals: void connected(); void hostFound(); void connectionClosed(); void delayedCloseFinished(); void readyRead(); void error(QAbstractSocket::SocketError); void SocketState(int); }; class TelnetSocket : public Socket { private: SocketPrivate * d_socket; public: TelnetSocket(); ~TelnetSocket(); void flush(); void setProxy(int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd); void connectToHost(HostInfo * hostInfo); void close(); QByteArray readBlock(unsigned long maxlen); long writeBlock(const QByteArray & data); unsigned long bytesAvailable(); }; } // namespace QTerm #endif //QTERMSOCKET_H qterm-0.7.3/src/qtermsound.cpp000066400000000000000000000021731332762052600163560ustar00rootroot00000000000000#include "qtermsound.h" #include #include #ifdef PHONON_ENABLED #ifdef OLD_PHONON #include #else #include #endif #endif // PHONON_ENABLED #ifdef QMEDIAPLAYER_ENABLED #include #endif // QMEDIAPLAYER_ENABLED namespace QTerm { Sound::~Sound() { } #ifdef PHONON_ENABLED void PhononSound::play() { if (QFile::exists(_soundfile)) { Phonon::MediaObject * player = Phonon::createPlayer(Phonon::NotificationCategory, Phonon::MediaSource(_soundfile)); player->play(); } } #endif // PHONON_ENABLED #ifdef QMEDIAPLAYER_ENABLED void QMediaPlayerSound::play() { if (QFile::exists(_soundfile)) { QMediaPlayer * player = new QMediaPlayer; player->setMedia(QUrl::fromLocalFile(_soundfile)); player->play(); } } #endif // QMEDIAPLAYER_ENABLED void ExternalSound::setPlayer(const QString & playername) { _player = playername; } void ExternalSound::play() { if (QFile::exists(_soundfile)) { QString command = _player + ' ' + _soundfile; QProcess::startDetached(command); } } } // namespace QTerm qterm-0.7.3/src/qtermsound.h000066400000000000000000000023321332762052600160200ustar00rootroot00000000000000#include "qterm.h" #include #include namespace QTerm { class Sound : public QObject { protected: QString _soundfile; public: Sound(const QString & filename, QObject * parent = 0, const char * name = 0) : QObject(parent), _soundfile(filename) { } ~Sound(); virtual void play() = 0; }; #ifdef PHONON_ENABLED class PhononSound : public Sound { public: PhononSound(const QString & filename, QObject * parent = 0, const char * name = 0) : Sound(filename, parent, name) { } void play(); }; #endif // PHONON_ENABLED #ifdef QMEDIAPLAYER_ENABLED class QMediaPlayerSound : public Sound { public: QMediaPlayerSound(const QString & filename, QObject * parent = 0, const char * name = 0) : Sound(filename, parent, name) { } void play(); }; #endif // QMEDIAPLAYER_ENABLED class ExternalSound : public Sound { private: QString _player; public: ExternalSound(const QString & playername, const QString & filename, QObject * parent = 0, const char * name = 0) : Sound(filename, parent, name), _player(playername) { } void play(); void setPlayer(const QString & playername); }; } // namespace QTerm qterm-0.7.3/src/qtermtelnet.cpp000066400000000000000000000572711332762052600165320ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermtelnet.cpp REVISION: 2001.8.12 first created. AUTHOR: smartfish kafa *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermtelnet.h" #include "qterm.h" #include #include "qtermsocket.h" #include "hostinfo.h" #ifdef SSH_ENABLED #include "ssh/socket.h" #endif #include #include #include namespace QTerm { struct fsm_trans Telnet::ttstab[] = { /* State Input Next State Action */ /* ------ ------ ----------- ------- */ { TSDATA, TCIAC, TSIAC, &Telnet::no_op }, { TSDATA, TCANY, TSDATA, &Telnet::ttputc }, { TSIAC, TCIAC, TSDATA, &Telnet::ttputc }, { TSIAC, TCSB, TSSUBNEG, &Telnet::no_op }, /* Telnet Commands */ { TSIAC, TCNOP, TSDATA, &Telnet::no_op }, { TSIAC, TCDM, TSDATA, &Telnet::tcdm }, /* Option Negotiation */ { TSIAC, TCWILL, TSWOPT, &Telnet::recopt }, { TSIAC, TCWONT, TSWOPT, &Telnet::recopt }, { TSIAC, TCDO, TSDOPT, &Telnet::recopt }, { TSIAC, TCDONT, TSDOPT, &Telnet::recopt }, { TSIAC, TCANY, TSDATA, &Telnet::no_op }, /* Option Subnegotion */ { TSSUBNEG, TCIAC, TSSUBIAC, &Telnet::no_op }, { TSSUBNEG, TCANY, TSSUBNEG, &Telnet::subopt }, { TSSUBIAC, TCSE, TSDATA, &Telnet::subend }, { TSSUBIAC, TCANY, TSSUBNEG, &Telnet::subopt }, { TSWOPT, TOECHO, TSDATA, &Telnet::do_echo }, { TSWOPT, TONOGA, TSDATA, &Telnet::do_noga }, { TSWOPT, TOTXBINARY, TSDATA, &Telnet::do_txbinary }, { TSWOPT, TCANY, TSDATA, &Telnet::do_notsup }, { TSDOPT, TONAWS, TSDATA, &Telnet::will_naws }, { TSDOPT, TOTERMTYPE, TSDATA, &Telnet::will_termtype }, { TSDOPT, TOTXBINARY, TSDATA, &Telnet::will_txbinary }, { TSDOPT, TCANY, TSDATA, &Telnet::will_notsup }, { FSINVALID, TCANY, FSINVALID, &Telnet::tnabort }, }; struct fsm_trans Telnet::substab[] = { /* State Input Next State Action */ /* ------ ------ ----------- ------- */ { SS_START, TOTERMTYPE, SS_TERMTYPE, &Telnet::no_op }, { SS_START, TCANY, SS_END, &Telnet::no_op }, { SS_TERMTYPE, TT_SEND, SS_END, &Telnet::subtermtype }, { SS_TERMTYPE, TCANY, SS_END, &Telnet::no_op }, { SS_END, TCANY, SS_END, &Telnet::no_op }, { FSINVALID, TCANY, FSINVALID, &Telnet::tnabort }, }; /*------------------------------------------------------------------------ * Constructor *------------------------------------------------------------------------ */ Telnet::Telnet(const QString & strTermType, int rows, int columns, bool isSSH) : term(), from_socket(), to_ansi(), from_ansi(), to_socket() { term = strTermType.toUtf8(); wx = columns; wy = rows; done_naws = 0; synching = 0; doecho = 0; sndbinary = 0; rcvbinary = 0; noga = 0; termtype = 0; naws = 0; raw_size = 0; bConnected = false; // create socket d_isSSH = isSSH; #ifdef SSH_ENABLED if (d_isSSH) socket = new SSHSocket(); else #endif socket = new TelnetSocket(); // connect signal and slots connect(socket, SIGNAL(connected()), this, SLOT(connected())); connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead())); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(showError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(hostFound()), this, SLOT(hostFound())); connect(socket, SIGNAL(connectionClosed()), this, SLOT(closed())); connect(socket, SIGNAL(SocketState(int)), this, SIGNAL(TelnetState(int))); // Init telnet, mainly the FSMs init_telnet(); } /*------------------------------------------------------------------------ * destructor *------------------------------------------------------------------------ */ Telnet::~Telnet() { // delete objects delete socket; } /*------------------------------------------------------------------------ * init_telnet *------------------------------------------------------------------------ */ void Telnet::init_telnet() { fsmbuild(); /* setup FSMs */ } /*------------------------------------------------------------------------ * fsmbuild - build the Finite State Machine data structures *------------------------------------------------------------------------ */ void Telnet::fsmbuild() { fsminit(ttfsm, ttstab, NTSTATES); ttstate = TSDATA; fsminit(subfsm, substab, NSSTATES); substate = SS_START; } /*------------------------------------------------------------------------ * fsminit - Finite State Machine initializer *------------------------------------------------------------------------ */ void Telnet::fsminit(u_char fsm[][NCHRS], struct fsm_trans ttab[], int nstates) { struct fsm_trans *pt; int sn, ti, cn; for (cn = 0; cn < NCHRS; ++cn) for (ti = 0; ti < nstates; ++ti) fsm[ti][cn] = TINVALID; for (ti = 0; ttab[ti].ft_state != FSINVALID; ++ti) { pt = &ttab[ti]; sn = pt->ft_state; if (pt->ft_char == TCANY) { for (cn = 0; cn < NCHRS; ++cn) if (fsm[sn][cn] == TINVALID) fsm[sn][cn] = ti; } else fsm[sn][pt->ft_char] = ti; } /* set all uninitialized indices to an invalid transition */ for (cn = 0; cn < NCHRS; ++cn) for (ti = 0; ti < nstates; ++ti) if (fsm[ti][cn] == TINVALID) fsm[ti][cn] = ti; } /*------------------------------------------------------------------------ * connect to host *------------------------------------------------------------------------ */ void Telnet::connectHost(HostInfo * hostInfo) { done_naws = 0; synching = 0; doecho = 0; sndbinary = 0; rcvbinary = 0; noga = 0; termtype = 0; naws = 0; socket->connectToHost(hostInfo); // host name resolving emit TelnetState(TSRESOLVING); } void Telnet::windowSizeChanged(int x, int y) { wx = x; wy = y; done_naws = 0; if (!bConnected) return; if (d_isSSH) { SSHSocket *sshSocket = qobject_cast(socket); if (sshSocket) sshSocket->requestWindowSize(x, y); } else { naws = 0; QByteArray cmd(10, 0); cmd[0] = (char)TCIAC; cmd[1] = (char)TCSB; cmd[2] = (char)TONAWS; cmd[3] = (char)(short(wx) >> 8); cmd[4] = (char)(short(wx) & 0xff); cmd[5] = (char)(short(wy) >> 8); cmd[6] = (char)(short(wy) & 0xff); cmd[7] = (char)TCIAC; cmd[8] = (char)TCSE; socket->writeBlock(cmd); } done_naws = 1; } /*------------------------------------------------------------------------ * set proxy *----------------------------------------------------------------------- */ void Telnet::setProxy(int nProxyType, bool bAuth, const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd) { socket->setProxy(nProxyType, bAuth, strProxyHost, uProxyPort, strProxyUsr, strProxyPwd); } /*------------------------------------------------------------------------ * close connection *----------------------------------------------------------------------- */ void Telnet::close() { socket->close(); } /*------------------------------------------------------------------------ * SLOT connected *------------------------------------------------------------------------ */ void Telnet::connected() { bConnected = true; // in case the window size changed before connection was made if (done_naws == 0) windowSizeChanged(wx, wy); emit TelnetState(TSHOSTCONNECTED); } /*------------------------------------------------------------------------ * SLOT closed *------------------------------------------------------------------------ */ void Telnet::closed() { bConnected = false; emit TelnetState(TSCLOSED); } /*------------------------------------------------------------------------ * SLOT hostFound *------------------------------------------------------------------------ */ void Telnet::hostFound() { emit TelnetState(TSHOSTFOUND); } /*------------------------------------------------------------------------ * SLOT error *------------------------------------------------------------------------ */ void Telnet::showError(QAbstractSocket::SocketError index) { switch (index) { case QAbstractSocket::ConnectionRefusedError: emit TelnetState(TSREFUSED); break; case QAbstractSocket::HostNotFoundError: emit TelnetState(TSHOSTNOTFOUND); break; //FIXME: am I right case QAbstractSocket::SocketAccessError: emit TelnetState(TSREADERROR); break; default: emit TelnetState(TSERROR);; break; } } /*------------------------------------------------------------------------ * SLOOT socketReadyRead - * when socket has data to upload, it send out readyRead() signal, it * invokes this SLOT to read data in, do telnet decode job, and send out * readyRead() SIGNAL to upper layer *------------------------------------------------------------------------ */ void Telnet::socketReadyRead() { int nbytes, nread; // get the data size nbytes = socket->bytesAvailable(); if (nbytes <= 0) return; raw_size = nbytes; //resize input buffer from_socket.resize(0); //read data from socket to from_socket from_socket = socket->readBlock(nbytes); nread = from_socket.size(); //do some checks if (nread <= 0) { qWarning("Reading from socket:nread<=0"); return; } if (nread > nbytes) { qWarning("Reading overflow from socket:nread>nbytes"); return; } //resize output buffer to_ansi.resize(2*nread); to_socket.resize(4*nread); rsize = 0; wsize = 0; // do telnet decode job... struct fsm_trans *pt; int i, ti; u_char c; for (i = 0; i < nread; ++i) { c = (u_char)(from_socket[i]); ti = ttfsm[ttstate][c]; pt = &ttstab[ti]; (this->*(pt->ft_action))((int)c); ttstate = pt->ft_next; } // flush the to_socket buffer, it contain response to server if (wsize > 0) { socket->writeBlock(to_socket.left(wsize)); socket->flush(); } /* send SIGNAL readyRead() with the size of data available*/ if (rsize > 0 || raw_size > 0) emit readyRead(rsize); } int Telnet::raw_len() { return raw_size; } /*------------------------------------------------------------------------ * actions *------------------------------------------------------------------------ */ int Telnet::read_raw(char * data, uint maxlen) { //do some checks if (data == 0) { qWarning("read: NULL pointer"); return -1; } if (maxlen < raw_size) { /* we need all data be read out in one read */ qWarning("read: upper layer accept buffer too small"); return -1; } //do it, memcpy( destination, source, size) memcpy(data, from_socket.data(), raw_size); return raw_size; } /*------------------------------------------------------------------------ * actions *------------------------------------------------------------------------ */ int Telnet::read(char * data, uint maxlen) { //do some checks if (data == 0) { qWarning("read: NULL pointer"); return -1; } if (maxlen < rsize) { /* we need all data be read out in one read */ qWarning("read: upper layer accept buffer too small"); return -1; } //do it, memcpy( destination, source, size) memcpy(data, to_ansi.data(), rsize); return rsize; } /*------------------------------------------------------------------------ * actions *------------------------------------------------------------------------ */ /*------------------------------------------------------------------------ * writeBlock * write data from data-> to socket, the length of data is len *------------------------------------------------------------------------ */ int Telnet::write(const char * data, uint len) { // accept data, (This seems can be removed????) from_ansi.resize(len); memcpy(from_ansi.data(), data, len); // resize output buffer to_socket.resize(2*len); wsize = 0; // process keyboard input // because we use GUI, there is no need to support a "command mode" // So the keyboard-input FSM is simplied. uint i; u_char c; // for gcc's happy :) for (i = 0; i < len; ++i) { c = (u_char)(from_ansi[i]); soputc((int)c); } //flush socket socket->writeBlock(to_socket.left(wsize)); socket->flush(); emit TelnetState(TSWRITED); return 0; } /*------------------------------------------------------------------------ * Trans functions * All trans functions use from_socket, to_ansi, to_socket buffers, and * rsize, wsize . *------------------------------------------------------------------------ */ /*------------------------------------------------------------------------ * tcdm - handle the telnet "DATA MARK" command (marks end of SYNCH) *------------------------------------------------------------------------ */ int Telnet::tcdm(int) { if (synching > 0) synching--; return 0; } /*------------------------------------------------------------------------ * rcvurg - receive urgent data input (indicates a telnet SYNCH) *------------------------------------------------------------------------ */ /* int Telnet::rcvurg(int sig) { synching++; } */ /*------------------------------------------------------------------------ * recopt - record option type *------------------------------------------------------------------------ */ int Telnet::recopt(int c) { option_cmd = c; return 0; } /*------------------------------------------------------------------------ * no_op - do nothing *------------------------------------------------------------------------ */ int Telnet::no_op(int) { return 0; } /*------------------------------------------------------------------------ * do_echo - handle TELNET WILL/WON'T ECHO option *------------------------------------------------------------------------ */ int Telnet::do_echo(int c) { if (doecho) { if (option_cmd == TCWILL) return 0; /* already doing ECHO */ } else if (option_cmd == TCWONT) return 0; /* already NOT doing ECHO */ doecho = !doecho; putc_down(TCIAC); if (doecho) putc_down(TCDO); else putc_down(TCDONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * putc_down - put a character in to_socket buffer. * wsize represent the number of bytes in to_socket buffer, and the buffer * is addressed from 0, NOT 1. *------------------------------------------------------------------------ */ void Telnet::putc_down(u_char c) { // check overflow if ((wsize + 1) > (uint) to_socket.size()) { qWarning("putc_down : to_socket buffer overflow"); return; } // put it in the buffer //to_socket->replace(wsize, 1, (const char *)&c); to_socket[wsize] = c; wsize++; return; } /*------------------------------------------------------------------------ * do_notsup - handle an unsupported telnet "will/won't" option *------------------------------------------------------------------------ */ int Telnet::do_notsup(int c) { putc_down(TCIAC); putc_down(TCDONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * do_noga - don't do telnet Go-Ahead's *------------------------------------------------------------------------ */ int Telnet::do_noga(int c) { if (noga) { if (option_cmd == TCWILL) return 0; } else if (option_cmd == TCWONT) return 0; noga = !noga; putc_down(TCIAC); if (noga) putc_down(TCDO); else putc_down(TCDONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * do_txbinary - handle telnet "will/won't" TRANSMIT-BINARY option *------------------------------------------------------------------------ */ int Telnet::do_txbinary(int c) { if (rcvbinary) { if (option_cmd == TCWILL) return 0; } else if (option_cmd == TCWONT) return 0; rcvbinary = !rcvbinary; putc_down(TCIAC); if (rcvbinary) putc_down(TCDO); else putc_down(TCDONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * will_notsup - handle an unsupported telnet "do/don't" option *------------------------------------------------------------------------ */ int Telnet::will_notsup(int c) { putc_down(TCIAC); putc_down(TCWONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * will_txbinary - handle telnet "do/don't" TRANSMIT-BINARY option *------------------------------------------------------------------------ */ int Telnet::will_txbinary(int c) { if (sndbinary) { if (option_cmd == TCDO) return 0; } else if (option_cmd == TCDONT) return 0; sndbinary = !sndbinary; putc_down(TCIAC); if (sndbinary) putc_down(TCWILL); else putc_down(TCWONT); putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * will_termtype - handle telnet "do/don't" TERMINAL-TYPE option *------------------------------------------------------------------------ */ int Telnet::will_termtype(int c) { if (termtype) { if (option_cmd == TCDO) return 0; } else if (option_cmd == TCDONT) return 0; termtype = !termtype; putc_down(TCIAC); if (termtype) putc_down(TCWILL); else putc_down(TCWONT); putc_down((char)c); // Do NOT use this assume! some foolish BBS not response the request /* The client expects that once the remote application receives terminal type information it will send control sequences for the terminal, which cannot be sent using the NVT encoding, So change the transfer mode to binary in both directions */ /* set up binary data path; send WILL, DO */ /* if (termtype) { option_cmd = TCWILL; do_txbinary(TOTXBINARY); option_cmd = TCDO; will_txbinary(TOTXBINARY); } */ return 0; } int Telnet::will_naws(int c) { if (naws) { if (option_cmd == TCDO) return 0; } else if (option_cmd == TCDONT) return 0; naws = !naws; putc_down(TCIAC); if (naws) putc_down(TCWILL); else putc_down(TCWONT); putc_down((char)c); putc_down(TCIAC); putc_down(TCSB); putc_down(TONAWS); putc_down((char)(short(wx) >> 8)); putc_down((char)(short(wx)&0xff)); putc_down((char)(short(wy) >> 8)); putc_down((char)(short(wy)&0xff)); putc_down(((char)TCIAC)); putc_down((char)TCSE); return 0; } /*------------------------------------------------------------------------ * subopt - do option subnegotiation FSM transitions *------------------------------------------------------------------------ */ int Telnet::subopt(int c) { struct fsm_trans *pt; int ti; ti = subfsm[substate][c]; pt = &substab[ti]; (this->*(pt->ft_action))(c); substate = pt->ft_next; return 0; } /*------------------------------------------------------------------------ * subtermtype - do terminal type option subnegotation *------------------------------------------------------------------------ */ int Telnet::subtermtype(int) { /* have received IAC.SB.TERMTYPE.SEND */ putc_down(TCIAC); putc_down(TCSB); putc_down(TOTERMTYPE); putc_down(TT_IS); //write term type string //fputs(term, sfp); for (int i = 0; i < term.length(); i++) putc_down(term[i]); putc_down(TCIAC); putc_down(TCSE); return 0; } /*------------------------------------------------------------------------ * subend - end of an option subnegotiation; reset FSM *------------------------------------------------------------------------ */ int Telnet::subend(int) { substate = SS_START; return 0; } /*------------------------------------------------------------------------ * soputc - move a character from the keyboard to the socket * convert an character into the NVT encoding and send it * through the socket to the server. *------------------------------------------------------------------------ */ int Telnet::soputc(int c) { if (sndbinary) { if (c == TCIAC) putc_down(TCIAC); /* byte-stuff IAC */ putc_down(c); return 0; } //c &= 0x7f; /* 7-bit ASCII only ???*/ // Convert local special characters to NVT characters /* // BBS don't need control signals if (c == t_intrc || c == t_quitc) { // Interrupt qWarning(" t_intrc "); putc_down(TCIAC); putc_down(TCIP); } else if (c == sg_erase) { // Erase Char qWarning(" sg_erase "); putc_down(TCIAC); putc_down(TCEC); } else if (c == sg_kill) { // Erase Line qWarning(" sg_kill "); putc_down(TCIAC); putc_down(TCEL); } else if (c == t_flushc) { // Abort Output qWarning(" t_flushc "); putc_down(TCIAC); putc_down(TCAO); } else */ putc_down((char)c); return 0; } /*------------------------------------------------------------------------ * xputc - putc to upper layer with optional file scripting *------------------------------------------------------------------------ */ int Telnet::xputc_up(char ch) { /*if (scrfp) (void) putc(ch, scrfp);*/ if ((rsize + 1) > (uint) to_ansi.size()) { qWarning("xputc_up : Buffer to_ansi overflow"); return -1; } //to_ansi->replace(wsize, 1, &ch); to_ansi[rsize] = u_char(ch); rsize++; return 0; } /*------------------------------------------------------------------------ * xfputs - fputs with optional file scripting *------------------------------------------------------------------------ */ int Telnet::xputs_up(char *str) { /*if (scrfp) fputs(str, scrfp);*/ char *i; for (i = str; (*i) != '\000'; i++) xputc_up(*i); return 0; } /*------------------------------------------------------------------------ * ttputc - print a single character on a Network Virtual Terminal *------------------------------------------------------------------------ */ int Telnet::ttputc(int c) { if (rcvbinary) { xputc_up((char)c); /* print uninterpretted */ return 0; } /* no data, if in SYNCH */ /* if (synching) return 0; */ /* Telnet doesnot interpret NVT code, provide datas to upper layer directly. So, will not be replaced with */ xputc_up((char)c); return 0; } /*------------------------------------------------------------------------ * invalid state reached, aborted *------------------------------------------------------------------------ */ int Telnet::tnabort(int) { qWarning("invalid state reached, aborted"); // exit(-1); return -1; } } // namespace QTerm #include qterm-0.7.3/src/qtermtelnet.h000066400000000000000000000153351332762052600161720ustar00rootroot00000000000000#ifndef QTERMTELNET_H #define QTERMTELNET_H #include #include #include #ifndef u_char #define u_char uchar #endif /* TELNET Command Codes: */ /* Hints: These NVT control characters are sent from client to server, So the client side will not receive these commands */ #define TCSB (u_char)250 /* Start Subnegotiation */ #define TCSE (u_char)240 /* End Of Subnegotiation */ #define TCNOP (u_char)241 /* No Operation */ #define TCDM (u_char)242 /* Data Mark (for Sync) */ #define TCBRK (u_char)243 /* NVT Character BRK */ #define TCIP (u_char)244 /* Interrupt Process */ #define TCAO (u_char)245 /* Abort Output */ #define TCAYT (u_char)246 /* "Are You There?" Function */ #define TCEC (u_char)247 /* Erase Character */ #define TCEL (u_char)248 /* Erase Line */ #define TCGA (u_char)249 /* "Go Ahead" Function */ #define TCWILL (u_char)251 /* Desire/Confirm Will Do Option*/ #define TCWONT (u_char)252 /* Refusal To Do Option */ #define TCDO (u_char)253 /* Request To Do Option */ #define TCDONT (u_char)254 /* Request NOT To Do Option */ #define TCIAC (u_char)255 /* Interpret As Command Escape */ /* Telnet Option Codes: */ #define TOTXBINARY (u_char) 0 /* TRANSMIT-BINARY option */ #define TOECHO (u_char) 1 /* ECHO Option */ #define TONOGA (u_char) 3 /* Suppress Go-Ahead Option */ #define TOTERMTYPE (u_char) 24 /* Terminal-Type Option */ #define TONAWS (u_char) 31 /* Window Size */ /* Network Virtual Printer Special Characters: */ /* In normal situations, these characters will to translated into local control characters , then pass to upper layer term. But in our situation, we can pass them to term directly */ #define VPLF '\n' /* Line Feed */ #define VPCR '\r' /* Carriage Return */ #define VPBEL '\a' /* Bell (attention signal) */ #define VPBS '\b' /* Back Space */ #define VPHT '\t' /* Horizontal Tab */ #define VPVT '\v' /* Vertical Tab */ #define VPFF '\f' /* Form Feed */ /* Keyboard Command Characters: */ /* Option Subnegotiation Constants: */ #define TT_IS 0 /* TERMINAL_TYPE option "IS" command */ #define TT_SEND 1 /* TERMINAL_TYPE option "SEND" command */ /* Telnet Socket-Input FSM States: */ #define TSDATA 0 /* normal data processing */ #define TSIAC 1 /* have seen IAC */ #define TSWOPT 2 /* have seen IAC-{WILL/WONT} */ #define TSDOPT 3 /* have seen IAC-{DO/DONT} */ #define TSSUBNEG 4 /* have seen IAC-SB */ #define TSSUBIAC 5 /* have seen IAC-SB-...-IAC */ #define NTSTATES 6 /* # of TS* states */ // Telnet Option Subnegotiation FSM States: #define SS_START 0 // initial state #define SS_TERMTYPE 1 // TERMINAL_TYPE option subnegotiation #define SS_END 2 // state after all legal input #define NSSTATES 3 // # of SS_* states #define FSINVALID 0xff // an invalid state number #define NCHRS 256 // number of valid characters #define TCANY (NCHRS+1) // match any character #define TINVALID 0xff // an invalid transition index #define CTRL(c) ((c)&0x1f) namespace QTerm { // decleration class Telnet; // actionFunc is a pointer, point to a Telnet's func typedef int (Telnet::*ptrActionFunc)(int c); //fsm struct struct fsm_trans { u_char ft_state; // current state short ft_char; // input character u_char ft_next; // next state ptrActionFunc ft_action; // action to take }; /*------------------------------------------------------------------------------ * Telnet class definition *------------------------------------------------------------------------------- */ class Socket; class HostInfo; class Telnet : public QObject { Q_OBJECT public: Telnet(const QString & termtype, int rows, int columns, bool isSSH) ; ~Telnet(); void setProxy(int nProxyType, //0-no proxy; 1-wingate; 2-sock4; 3-socks5 bool bAuth, // if authentation needed const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd); void connectHost(HostInfo * hostInfo); int read(char * data, uint maxlen); int write(const char * data, uint len); void close(); // User close the connection int raw_len(); int read_raw(char *data, uint maxlen); public slots: void windowSizeChanged(int, int); signals: void readyRead(int); // There are datas to be read out void TelnetState(int); // The state telnet, defined as TSXXXX in qterm.h private slots: void connected(); void socketReadyRead(); void showError(QAbstractSocket::SocketError); void hostFound(); void closed(); protected: //init structure fsm void init_telnet(); void fsmbuild(); void fsminit(u_char fsm[][NCHRS], struct fsm_trans ttab[], int nstates); //actions int tcdm(int); int recopt(int); int no_op(int); int do_echo(int); int do_notsup(int); int do_noga(int); int do_txbinary(int); int will_notsup(int); int will_txbinary(int); int will_termtype(int); int will_naws(int); int subopt(int); int subtermtype(int); int subend(int); int soputc(int); int ttputc(int); int tnabort(int); //utility functions int xputc_up(char); int xputs_up(char *); void putc_down(u_char); private: // Boolean Flags char synching, doecho, sndbinary, rcvbinary; char noga; char naws; u_char option_cmd; // has value WILL, WONT, DO, or DONT char termtype; // non-zero if received "DO TERMTYPE" QByteArray term; // terminal name /* // BBS don't need control signals // Special keys - Terminal control characters // need work... static const char t_flushc=CTRL('S'); // Abort Output i.e:(^S) static const char t_intrc=CTRL('C'); // Interrupt i.e:(^C) static const char t_quitc=CTRL('\\'); // Quit i.e:(^\) static const char sg_erase=CTRL('?'); // Erase a character i.e:(^?) static const char sg_kill=CTRL('U'); // Kill a line i.e:(^U) */ // FSM stuffs static struct fsm_trans ttstab[]; int ttstate; u_char ttfsm[NTSTATES][NCHRS]; static struct fsm_trans substab[]; int substate; u_char subfsm[NSSTATES][NCHRS]; // socket stuffs Socket *socket; //Pointers to internal buffers // // |-->from_socket-->process-->to_ansi-->| // socket<---> <---> ansi decode // |<---to_socket<--process<--from_ansi--| // QByteArray from_socket, to_ansi, from_ansi, to_socket; uint rsize; // size of to_ansi buffer uint wsize; // size of to_socket buffer // for test int wx, wy; int done_naws; bool d_isSSH; bool bConnected; uint raw_size; }; } // namespace QTerm #endif // QTERMTELNET_H qterm-0.7.3/src/qtermtextline.cpp000066400000000000000000000215051332762052600170620ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermtextline.cpp REVISION: 2001.8.12 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qterm.h" #include "qtermtextline.h" #include #include //#include namespace QTerm { TextLine::TextLine(QObject * parent) : QObject(parent), m_text(), m_color(), m_attr() { m_bChanged = true; m_start = -1; m_end = -1; reset(); } TextLine::~TextLine() { } // insert cstr at position index of line, // if attrib == -1, use current attr, // if index == -1, append line void TextLine::insertText(const QString & str, short attribute, int index) { // set attribute if (attribute != -1) { m_curColor = GETCOLOR(attribute); m_curAttr = GETATTR(attribute); if (m_curAttr == '\0') m_curAttr = NO_ATTR; } int len = TermString(str).length(); QByteArray tmp; int start; if (index == -1) { // append m_text.append(str); tmp.fill(m_curColor, len); m_color += tmp; tmp.fill(m_curAttr, len); m_attr += tmp; start = m_length; m_length += len; } else { // insert if (index >= m_length) { m_text.insert(index, str); m_length = m_text.length(); tmp.fill(NO_COLOR, index - m_length); m_color.append(tmp); tmp.fill(m_curColor, len); m_color.insert(index, tmp); tmp.fill(NO_ATTR, index - m_length); m_attr.append(tmp); tmp.fill(m_curAttr, len); m_attr.insert(index, tmp); } else { m_text.insert(index, str); m_length = m_text.length(); tmp.fill(m_curColor, len); m_color.insert(index, tmp); tmp.fill(m_curAttr, len); m_attr.insert(index, tmp); } start = index; } setChanged(start, m_length); } // replace the cstring with cstr, which start at index and have len chars, // if attr == -1, use the current attr, // if index == -1, reset line and insert str. // if len == -1, replace str's length chars. void TextLine::replaceText(const QString & str, short attribute, int index, int len) { // set attribute if (str.isEmpty()) { // Return if the string is empty return; } if (attribute != -1) { m_curColor = GETCOLOR(attribute); m_curAttr = GETATTR(attribute); if (m_curAttr == '\0') m_curAttr = NO_ATTR; } int newlen = TermString(str).length(); QByteArray tmp; if (index == -1) { // replace whole line m_text = TermString(str); m_color.fill(m_curColor, newlen); m_attr.fill(m_curAttr, newlen); setChanged(0, qMax(newlen, m_length)); m_length = newlen; return; } if (len == -1) // replace with str len = newlen; if (index + len > m_length) { //qDebug() << "index: " << index << " len: " << len << " string: " << str; m_text.replace(index, len, str); setChanged(index, qMax(m_length, m_text.length())); tmp.fill(NO_COLOR, index + len - m_length); m_color.append(tmp); tmp.fill(m_curColor, len); m_color.replace(index, len, tmp); tmp.fill(NO_ATTR, index + len - m_length); m_attr.append(tmp); tmp.fill(m_curAttr, len); m_attr.replace(index, len, tmp); m_length = m_text.length(); //if ( m_color.length() != m_text.length()) { // qDebug() << "=================================color length: " << m_color.length() << ", tmp: " << tmp.length() << ", old length: " << tmplen; //} } else { //qDebug() << "string : " << m_text.string() << " old length: " << m_text.length(); //qDebug() << "index: " << index << " len: " << len << " string: " << str; m_text.replace(index, len, str); //qDebug() << "new length: " << m_text.length() << "," << newlen; int delta = m_length - m_text.length(); setChanged(index, qMax(m_length, m_text.length())); tmp.fill(m_curColor, len); m_color.replace(index, len + delta, tmp); //if ( m_color.length() != m_text.length()) { // qDebug() << "=======================color length: " << m_color.length() << ", tmp: " << tmp.length(); //} tmp.fill(m_curAttr, len); m_attr.replace(index, len + delta, tmp); m_length = m_text.length(); } } // delete cstr from position index of line, // it will delete len chars, // if index == -1, delete the whole line // if len ==-1, delete the rest from index void TextLine::deleteText(int index, int len) { if (index == -1) { // delete the line setChanged(0, m_length); reset(); return; } if (len == -1) // only make len larger so it will delete len = m_length; // the right from index m_text.remove(index, len); m_color.remove(index, len); m_attr.remove(index, len); setChanged(index, m_length); m_length = m_text.length(); } // return str in text for show // if index == -1, get the whole line // if len == -1, get the rest from index QString TextLine::getText(int index, int len) { if (m_text.isEmpty()||len == 0) { return QString(); } QString str; if (index == -1) str = m_text.string(); else str = m_text.mid(index, len); return str; } QString TextLine::getAttrText(int index, int len, const QString & escape) { QString str; int startx; char tempcp, tempea; if (index == -1) { index = 0; len = m_length; } else if (len == -1) len = m_length - index; if (index >= m_length) return QString(); //qDebug("index=%d len=%d m_length=%d", index, len, m_length); for (int i = index; i < index + len && i < m_length; i++) { startx = i; tempcp = m_color.at(i); tempea = m_attr.at(i); // get str of the same attribute while (tempcp == m_color.at(i) && tempea == m_attr.at(i)) { i++; if (i >= m_length) break; } int fg = GETFG(tempcp) + 30; int bg = GETBG(tempcp) + 40; QString strAttr = escape; if (GETBOLD(tempea)) strAttr += "1;"; if (GETDIM(tempea)) strAttr += "2;"; if (GETUNDERLINE(tempea)) strAttr += "4;"; if (GETBLINK(tempea)) strAttr += "5;"; if (GETRAPIDBLINK(tempea)) strAttr += "6;"; if (GETREVERSE(tempea)) strAttr += "7;"; if (GETINVISIBLE(tempea)) strAttr += "8;"; strAttr += QString("%1;%2m").arg(fg).arg(bg); str += strAttr; // set attr // the text str += getText(startx, i - startx); i--; } str += escape + "m"; return str; } // reset line inline void TextLine::reset() { m_length = 0; m_text = TermString(); m_color = ""; m_attr = ""; m_curColor = NO_COLOR; m_curAttr = NO_ATTR; } bool TextLine::hasBlink() { bool blink = false; //qDebug() << "m_length: " << m_length << " m_attr " << m_attr.length(); char tempea; for (int i = 0; i < m_length && i < m_attr.length(); i++) { tempea = m_attr.at(i); if (GETBLINK(tempea)) { blink = true; break; } } return blink; } bool TextLine::isChanged(int &start, int &end) { start = m_start; end = m_end; return m_bChanged; } void TextLine::setChanged(int start, int end) { if (start == -1 && end == -1) { m_bChanged = true; m_start = start; m_end = end; return; } if (m_bChanged) { if (!(m_start == -1 && m_end == -1)) { m_start = qMin(start, m_start); m_end = qMax(end, m_end); } } else { m_start = start; m_end = end; } m_bChanged = true; } int TextLine::beginIndex(int pos) { return m_text.beginIndex(pos); } int TextLine::size(int index) { return m_text.size(index); } int TextLine::pos(int index) { return m_text.pos(index); } bool TextLine::isPartial(int index) { return m_text.isPartial(index); } void TextLine::setAttr(short attr, int index) { char tmpColor = GETCOLOR(attr); char tmpAttr = GETATTR(attr); if (tmpAttr == '\0') tmpAttr = NO_ATTR; m_color[index] = tmpColor; m_attr[index] = tmpAttr; } } // namespace QTerm #include qterm-0.7.3/src/qtermtextline.h000066400000000000000000000027141332762052600165300ustar00rootroot00000000000000#ifndef QTERMTEXTLINE_H #define QTERMTEXTLINE_H #include #include #include "termstring.h" namespace QTerm { class TextLine : public QObject { Q_OBJECT public: TextLine(QObject * parent = 0); ~TextLine(); public slots: void reset(); void setChanged(int start, int end); void clearChange() { m_bChanged = false; m_start = -1; m_end = -1; } bool isChanged(int &start, int &end); QByteArray getColor() { return m_color; } QByteArray getAttr() { return m_attr; } int getLength() { return m_length; } QString getAttrText(int index = -1, int len = -1, const QString & escape = "\x1b\x1b"); QString getText(int index = -1, int len = -1); void insertText(const QString & str, short attr = -1, int index = -1); void deleteText(int index = -1, int len = -1); void replaceText(const QString & str, short attr = -1, int index = -1, int len = -1); bool hasBlink(); int beginIndex(int pos); int size(int index); int pos(int index); bool isPartial(int index); void setAttr (short attr, int index); protected: // we use QString to store any character after decode int m_length; TermString m_text; QByteArray m_color; QByteArray m_attr; char m_curColor; char m_curAttr; bool m_bChanged; bool m_bBlink; int m_start, m_end; }; } // namespace QTerm #endif //QTERMTEXTLINE_H qterm-0.7.3/src/qtermtimelabel.cpp000066400000000000000000000022541332762052600171640ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermframe.cpp REVISION: 2001.10.5 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermtimelabel.h" // #include // #include //Added by qt3to4: #include #include // #include #include //constructor QTermTimeLabel::QTermTimeLabel(QWidget * parent, const char * name, Qt::WindowFlags f) :QLabel(parent,f) { setAlignment(Qt::AlignHCenter); currentTime=new QTime(); currentTime->start(); startTimer(1000); } //destructor QTermTimeLabel::~QTermTimeLabel() { delete currentTime; } //timer to display the current time void QTermTimeLabel::timerEvent(QTimerEvent*) { setText(currentTime->currentTime().toString()); } #include qterm-0.7.3/src/qtermtimelabel.h000066400000000000000000000006161332762052600166310ustar00rootroot00000000000000#ifndef QTERMTIMELABEL_H #define QTERMTIMELABEL_H // #include //Added by qt3to4: #include #include class QTime; class QTermTimeLabel: public QLabel { Q_OBJECT public: QTermTimeLabel(QWidget * parent, const char * name=0, Qt::WindowFlags f=0); ~QTermTimeLabel(); protected: QTime * currentTime; void timerEvent ( QTimerEvent * ); }; #endif //QTERMTIMELABEL qterm-0.7.3/src/qtermtoolbutton.cpp000066400000000000000000000016531332762052600174410ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermtoolbutton.cpp REVISION: 2003.1.2 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qtermtoolbutton.h" namespace QTerm { ToolButton::ToolButton( QWidget *parent, int id, QString name ) :QToolButton(parent) { setObjectName(name); this->id = id; connect(this, SIGNAL(clicked()), this, SLOT(slotClicked())); } ToolButton::~ToolButton() { } void ToolButton::slotClicked() { emit(buttonClicked(id)); } } // namespace QTerm #include qterm-0.7.3/src/qtermtoolbutton.h000066400000000000000000000005751332762052600171100ustar00rootroot00000000000000#ifndef QTERMTOOLBUTTON_H #define QTERMTOOLBUTTON_H #include namespace QTerm { class ToolButton: public QToolButton { Q_OBJECT public: ToolButton( QWidget *parent, int id, QString name="" ); ~ToolButton(); signals: void buttonClicked(int); protected slots: void slotClicked(); protected: int id; }; } // namespace QTerm #endif // QTERMTOOLBUTTON_H qterm-0.7.3/src/qtermwindow.cpp000066400000000000000000001740551332762052600165460ustar00rootroot00000000000000/******************************************************************************* FILENAME: qtermframe.cpp REVISION: 2001.10.4 first created. AUTHOR: kingson fiasco *******************************************************************************/ /******************************************************************************* NOTE This file may be used, distributed and modified without limitation. *******************************************************************************/ #include "qterm.h" #include "qtermwindow.h" #include "qtermframe.h" #include "qtermscreen.h" #include "qtermdecode.h" #include "qtermtelnet.h" #include "qtermconvert.h" #include "qtermbuffer.h" #include "qtermparam.h" #include "addrdialog.h" #include "qtermconfig.h" #include "qtermbbs.h" #include "msgdialog.h" #include "qtermtextline.h" #include "articledialog.h" #include "popwidget.h" #include "qtermzmodem.h" #include "zmodemdialog.h" #include "qtermhttp.h" #include "qtermiplocation.h" #include "osdmessage.h" #include "statusBar.h" #include "progressBar.h" #include "qtermglobal.h" #include "hostinfo.h" #include "keyboardtranslator.h" #ifdef SCRIPT_ENABLED #include "scripthelper.h" #endif // SCRIPT_ENABLED #ifdef DBUS_ENABLED #include "dbus.h" #endif // DBUS_ENABLED #if !defined(_OS_WIN32_) && !defined(Q_OS_WIN32) #include #else #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef SCRIPT_ENABLED #include #ifdef SCRIPTTOOLS_ENABLED #include #endif #endif #include namespace QTerm { // script thread DAThread::DAThread(Window *win) { pWin = win; } DAThread::~DAThread() { } void DAThread::run() { mutex.lock(); QStringList strList; while (1) { // check it there is duplicated string // it starts from the end in the range of one screen height // so this is a non-greedy match QString strTemp = pWin->m_pBuffer->screen(0)->getText().replace(QRegExp("\\s+$"),""); int i = 0; int start = 0; QStringList::Iterator it = strList.end(); while (it != strList.begin() && i < pWin->m_pBuffer->line() - 1) { // for(QStringList::Iterator it=strList.end(); // it!=strList.begin(), i < pWin->m_pBuffer->line()-1; // not exceeeding the last screen // --it, i++) --it; i++; if (*it != strTemp) continue; QStringList::Iterator it2 = it; bool dup = true; // match more to see if its duplicated for (int j = 0; j <= i && it2 != strList.end(); j++, it2++) { QString str1 = pWin->m_pBuffer->screen(j)->getText().replace(QRegExp("\\s+$"),""); if (*it2 != str1) { dup = false; break; } } if (dup) { // set the start point start = i + 1; break; } } // add new lines for (i = start;i < pWin->m_pBuffer->line() - 1;i++) strList += pWin->m_pBuffer->screen(i)->getText().replace(QRegExp("\\s+$"),""); // the end of article if (pWin->m_pBuffer->screen( pWin->m_pBuffer->line() - 1)->getText().indexOf("%") == -1) break; // continue pWin->m_pTelnet->write(" ", 1); if (!pWin->m_wcWaiting.wait(&mutex, 10000)) { // timeout //qApp->postEvent(pWin, new QCustomEvent(DAE_TIMEOUT)); emit done(DAE_TIMEOUT); break; } } #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) strArticle = strList.join("\r\n"); #else strArticle = strList.join("\n"); #endif //qApp->postEvent(pWin, new QCustomEvent(DAE_FINISH)); emit done(DAE_FINISH); mutex.unlock(); } /* void DAThread::run() { QCString cstrCurrent0,cstrCurrent1; QCString cstrTemp; int pos0=-1,pos1=-1; cstrArticle =pWin->stripWhitespace(pWin->m_pBuffer->screen(0)->getText()); #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) cstrArticle += '\r'; #endif cstrArticle += '\n'; while(1) { cstrCurrent0=pWin->stripWhitespace(pWin->m_pBuffer->screen(0)->getText()); cstrCurrent1=pWin->stripWhitespace(pWin->m_pBuffer->screen(1)->getText()); cstrTemp = cstrCurrent0; #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) cstrTemp += '\r'; #endif cstrTemp +='\n'; cstrTemp +=cstrCurrent1; pos0=cstrArticle.findRev(cstrTemp); if(pos0!=-1) { pos1=cstrArticle.find(cstrCurrent1,pos0); if(pos1!=-1) cstrArticle.truncate(pos1); } for(int i=1;im_pBuffer->line()-1;i++) { cstrArticle+=pWin->stripWhitespace(pWin->m_pBuffer->screen(i)->getText()); #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) cstrArticle += '\r'; #endif cstrArticle+='\n'; } if( pWin->m_pBuffer->screen(pWin->m_pBuffer->line()-1)->getText().find("%") == -1 ) break; pWin->m_pTelnet->write(" ", 1); if(!pWin->m_wcWaiting.wait(10000)) // timeout { postEvent(pWin, new QCustomEvent(DAE_TIMEOUT)); break; } } postEvent(pWin, new QCustomEvent(DAE_FINISH)); } */ char Window::direction[][5] = { // 4 "\x1b[1~", // 0 HOME "\x1b[4~", // 1 END "\x1b[5~", // 2 PAGE UP "\x1b[6~", // 3 PAGE DOWN // 3 "\x1b[A", // 4 UP "\x1b[B", // 5 DOWN "\x1b[D", // 6 LEFT "\x1b[C" // 7 RIGHT }; //constructor Window::Window(Frame * frame, Param param, const QString &uuid, QWidget * parent, const char * name, Qt::WindowFlags wflags) : WindowBase(parent, wflags), m_strMessage(), location() { groupActions(); m_pFrame = frame; m_param = param; m_strUuid = uuid; m_hostInfo = NULL; m_translator = NULL; QString pathLib = Global::instance()->pathLib(); setMouseTracking(true); #ifdef SCRIPT_ENABLED m_scriptEngine = NULL; m_scriptHelper = NULL; #ifdef SCRIPTTOOLS_ENABLED m_scriptDebugger = new QScriptEngineDebugger; #endif // SCRIPTTOOLS_ENABLED #endif // SCRIPT_ENABLED //init the textline list QString strTerm = m_param.m_mapParam["termtype"].toString(); int nColumn = m_param.m_mapParam["column"].toInt(); int nRow = m_param.m_mapParam["row"].toInt(); int nScroll = m_param.m_mapParam["scroll"].toInt(); m_codec = QTextCodec::codecForName(param.m_mapParam["bbscode"].toString().toLatin1()); m_pBuffer = new Buffer(nRow, nColumn, nScroll); if (param.m_mapParam["protocol"] == 0) m_pTelnet = new Telnet(strTerm, nRow, nColumn, false); else { #ifndef SSH_ENABLED QMessageBox::warning(this, "QTerm", tr("SSH support is not compiled, QTerm can only use Telnet!")); m_pTelnet = new Telnet(strTerm, nRow, nColumn, false); #else m_pTelnet = new Telnet(strTerm, nRow, nColumn, true); #endif } connect(m_pBuffer, SIGNAL(windowSizeChanged(int, int)), m_pTelnet, SLOT(windowSizeChanged(int, int))); m_pZmDialog = new zmodemDialog(this); m_pZmodem = new Zmodem(this, m_pTelnet, m_codec, param.m_mapParam["protocol"].toInt()); if (m_codec == 0) { qDebug("Fallback to GBK codec"); m_codec = QTextCodec::codecForName("GBK"); } m_pDecode = new Decode(m_pBuffer, m_codec); m_pBBS = new BBS(m_pBuffer); m_pScreen = new Screen(this, m_pBuffer, &m_param, m_pBBS); m_pIPLocation = new IPLocation(pathLib); m_bCheckIP = m_pIPLocation->haveFile(); m_pSound = NULL; setWidget(m_pScreen); connect(m_pFrame, SIGNAL(scrollChanged()), m_pScreen, SLOT(updateScrollBar())); connect(m_pScreen, SIGNAL(inputEvent(const QString &)), this, SLOT(inputHandle(const QString &))); connect(m_pZmodem, SIGNAL(ZmodemState(int, int, const QString&)), this, SLOT(ZmodemState(int, int, const QString&))); connect(m_pZmDialog, SIGNAL(canceled()), m_pZmodem, SLOT(zmodemCancel())); connect(m_pDecode, SIGNAL(mouseMode(bool)), this, SLOT(setMouseMode(bool))); m_popWin = new popWidget(this, m_pFrame); m_pScreen->osd()->display(tr("Not Connected")); // disable the dock menu // setDockMenuEnabled(false); m_pUrl = new QMenu(m_pScreen); /* m_pUrl->insertItem( tr("Preview image"), this, SLOT(previewLink()) ); m_pUrl->insertItem( tr("Open link"), this, SLOT(openLink()) ); m_pUrl->insertItem( tr("Copy link address"), this, SLOT(copyLink()) ); m_pUrl->insertItem( tr("Save target as..."), this, SLOT(saveLink()) ); */ m_pUrl->addAction(tr("Preview image"), this, SLOT(previewLink())); m_pUrl->addAction(tr("Open link"), this, SLOT(openLink())); m_pUrl->addAction(tr("Copy link address"), this, SLOT(copyLink())); m_pMenu = m_pFrame->genPopupMenu(this); //connect telnet signal to slots connect(m_pTelnet, SIGNAL(readyRead(int)), this, SLOT(readReady(int))); connect(m_pTelnet, SIGNAL(TelnetState(int)), this, SLOT(TelnetState(int))); // timers m_idleTimer = new QTimer; connect(m_idleTimer, SIGNAL(timeout()), this, SLOT(idleProcess())); m_replyTimer = new QTimer; connect(m_replyTimer, SIGNAL(timeout()), this, SLOT(replyProcess())); m_reconnectTimer = new QTimer; connect(m_reconnectTimer, SIGNAL(timeout()), this, SLOT(reconnect())); m_updateTimer = new QTimer; m_updateTimer->setSingleShot(true); connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(updateWindow())); // initial varibles m_bColorCopy = false; m_bRectCopy = false; m_bAntiIdle = true; m_bAutoReply = m_param.m_mapParam["bautoreply"].toBool(); m_bBeep = !( #if !defined(PHONON_ENABLED) && !defined(QMEDIAPLAYER_ENABLED) Global::instance()->m_pref.strPlayer.isEmpty() || #endif // PHONON_ENABLED Global::instance()->m_pref.strWave.isEmpty()); m_bMouse = true; m_bWordWrap = false; m_bAutoCopy = true; m_bMessage = false; m_bReconnect = m_param.m_mapParam["reconnect"].toBool(); m_pDAThread = 0; m_bConnected = false; m_bIdling = false; m_bMouseX11 = false; m_bMouseClicked = false; m_bDoingLogin = false; cursor[0] = QCursor(QPixmap(":/cursor/home.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[1] = QCursor(QPixmap(":/cursor/end.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[2] = QCursor(QPixmap(":/cursor/pageup.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[3] = QCursor(QPixmap(":/cursor/pagedown.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[4] = QCursor(QPixmap(":/cursor/prev.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[5] = QCursor(QPixmap(":/cursor/next.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[6] = QCursor(QPixmap(":/cursor/exit.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[7] = QCursor(QPixmap(":/cursor/hand.xpm").scaledToWidth(Global::instance()->m_pref.nCursorSize,Qt::SmoothTransformation)); cursor[8] = Qt::IBeamCursor; cursor[9] = Qt::ArrowCursor; // the system wide script m_bPythonScriptLoaded = false; initScript(); loadKeyboardTranslator(param.m_mapParam["keyboardprofile"].toString()); connectHost(); } //destructor Window::~Window() { delete m_pTelnet; delete m_pBBS; delete m_pDecode; delete m_pBuffer; delete m_pZmodem; delete m_popWin; delete m_idleTimer; delete m_replyTimer; delete m_updateTimer; delete m_pUrl; delete m_pScreen; delete m_reconnectTimer; delete m_pIPLocation; delete m_pSound; delete m_hostInfo; #ifdef SCRIPTTOOLS_ENABLED m_scriptEngine->abortEvaluation(); delete m_scriptDebugger; #endif } //close event received void Window::closeEvent(QCloseEvent * clse) { if (m_bConnected && Global::instance()->m_pref.bWarn) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, "QTerm", tr("Connected,Do you still want to exit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if (ret == QMessageBox::Yes) { m_pTelnet->close(); clse->accept(); } else clse->ignore(); } else { clse->accept(); } } /* ------------------------------------------------------------------------ */ /* */ /* Timer */ /* */ /* ------------------------------------------------------------------------ */ void Window::idleProcess() { // do as autoreply when it is enabled if (m_replyTimer->isActive() && m_bAutoReply) { replyMessage(); return; } m_bIdling = true; // system script can handle that #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("antiIdle"); if (func.isFunction()) { func.call(); if (m_scriptHelper->accepted()) { return; } } else { qDebug("antiIdle is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif // the default function int length; QByteArray cstr = parseString(m_param.m_mapParam["antiidlestring"].toString().toLocal8Bit(), &length); m_pTelnet->write(cstr, length); } void Window::replyProcess() { // if AutoReply still enabled, then autoreply if (m_bAutoReply) replyMessage(); else // else just stop the timer m_replyTimer->stop(); } /* ------------------------------------------------------------------------ */ /* */ /* Mouse & Key */ /* */ /* ------------------------------------------------------------------------ */ void Window::enterEvent(QEvent *) { } void Window::leaveEvent(QEvent *) { } void Window::mouseDoubleClickEvent(QMouseEvent * me) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onMouseEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << 3 << (int) me->button() << (int) me->buttons() << (int) me->modifiers() << me->x() << me->y()); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onMouseEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif } void Window::mousePressEvent(QMouseEvent * me) { // Left Button for selecting if (me->button()&Qt::LeftButton && !(me->modifiers())) { // clear the selected before if (m_ptSelStart != m_ptSelEnd) { m_pBuffer->clearSelect(); m_pScreen->updateRegion(); } // set the selecting flag m_bSelecting = true; m_ptSelStart = me->pos(); m_ptSelEnd = m_ptSelStart; } #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onMouseEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << 0 << (int) me->button() << (int) me->buttons() << (int) me->modifiers() << me->x() << me->y()); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onMouseEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif // Right Button if ((me->button()&Qt::RightButton)) { if (me->modifiers()&Qt::ControlModifier) { if (!m_pBBS->getUrl().isEmpty()) // on Url previewLink(); return; } if (!(me->modifiers())) { if (!m_pBBS->getUrl().isEmpty()) // on Url m_pUrl->popup(me->globalPos()); else m_pMenu->popup(me->globalPos()); return; } } // Middle Button for paste if (me->button()&Qt::MidButton && !(me->modifiers())) { if (m_bConnected) { if (!m_pBBS->getUrl().isEmpty()) // on Url previewLink(); else pasteHelper(false); } return; } // If it is a click, there should be a press event and a release event. m_bMouseClicked = true; // xterm mouse event //sendMouseState(0, me->button(), me->state(), me->pos()); } void Window::mouseMoveEvent(QMouseEvent * me) { m_ptMouse = me->pos(); // selecting by leftbutton if ((me->buttons()&Qt::LeftButton) && m_bSelecting) { if (me->pos().y() < childrenRect().top()) m_pScreen->scrollLine(-1); if (me->pos().y() > childrenRect().bottom()) m_pScreen->scrollLine(1); m_ptSelEnd = me->pos(); QPoint point = m_ptSelEnd - m_ptSelStart; if (point.manhattanLength() > 3) { m_pBuffer->setSelect(m_pScreen->mapToChar(m_ptSelStart), m_pScreen->mapToChar(m_ptSelEnd), m_bRectCopy); m_pScreen->updateRegion(); } } #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onMouseEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << 2 << (int) me->button() << (int) me->buttons() << (int) me->modifiers() << me->x() << me->y()); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onMouseEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif if (m_bMouse && m_bConnected) { // set cursor pos, repaint if state changed QRect rect_old, rect_new; if (m_pBBS->setCursorPos(m_pScreen->mapToChar(me->pos()), rect_old, rect_new)) { m_pScreen->repaint(m_pScreen->mapToRect(rect_new)); m_pScreen->repaint(m_pScreen->mapToRect(rect_old)); } // judge if URL QRect rcOld; QRect rcOld_IP; QRect rcUrl_IP = m_rcUrl; bool bUrl = false; if (Global::instance()->m_pref.bUrl) { if (m_pBBS->isIP(rcUrl_IP, rcOld_IP)) { if (rcUrl_IP != rcOld_IP && !m_pScreen->osd()->isVisible()) { showIP(); } } else { if (m_pScreen->osd()->isVisible() && m_pScreen->osd()->type() == PageViewMessage::IP) m_pScreen->osd()->hide(); } if (m_pBBS->isUrl(m_rcUrl, rcOld)) { setCursor(Qt::PointingHandCursor); bUrl = true; } } if (!bUrl) { int nCursorType = m_pBBS->getCursorType(m_pScreen->mapToChar(me->pos())); if (nCursorType <= 9 && nCursorType >= 0) setCursor(cursor[nCursorType]); } } } void Window::mouseReleaseEvent(QMouseEvent * me) { if (!m_bMouseClicked) return; m_bMouseClicked = false; // Left Button for selecting m_ptSelEnd = me->pos(); if (m_ptSelEnd != m_ptSelStart && m_bSelecting) { m_pBuffer->setSelect(m_pScreen->mapToChar(m_ptSelStart), m_pScreen->mapToChar(m_ptSelEnd), m_bRectCopy); m_pScreen->updateRegion(); if (m_bAutoCopy) on_actionCopy_triggered(); m_bSelecting = false; return; } m_bSelecting = false; #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onMouseEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << 1 << (int) me->button() << (int) me->buttons() << (int) me->modifiers() << me->x() << me->y()); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onMouseEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif if (!m_bMouse || !m_bConnected) return; // url if (!m_pBBS->getUrl().isEmpty()) { bool ok; QString caption = tr("Open URL"); QString hint = tr("URL:"); QString strUrl = QInputDialog::getText(this, caption, hint, QLineEdit::Normal, QString(m_pBBS->getUrl()), &ok); if (ok) { Global::instance()->openUrl(strUrl); } return; } // mouse menu int nCursorType = m_pBBS->getCursorType(m_pScreen->mapToChar(me->pos())); if (nCursorType<4 && nCursorType >= 0) m_pTelnet->write(direction[nCursorType], 4); else if (nCursorType<7 && nCursorType >= 4) m_pTelnet->write(direction[nCursorType], 3); else if (nCursorType == 7) { char cr = CHAR_CR; QRect rc = m_pBBS->getSelectRect(); switch (m_pBBS->getPageState()) { case 0: if (!rc.isEmpty()) { char cMenu = m_pBBS->getMenuChar(); QByteArray cmd; cmd.append(cMenu); cmd.append(cr); m_pTelnet->write(cmd, cmd.size()); } break; case 1: if (!rc.isEmpty()) { // scroll lines int n = rc.y() - m_pBuffer->caretY(); QByteArray cmd; for(int i=0; i0?5:4]); // don't forget to send a CHAR_CR at last to enter in cmd.append(cr); m_pTelnet->write(cmd, cmd.size()); } break; default: break; } } else if (nCursorType == 8) { QPoint ptPos = m_pScreen->mapToChar(me->pos()); int ny = ptPos.y() - m_pBuffer->caretY(); QByteArray cmd; for(int i=0; i0?5:4]); int nx = ptPos.x() - m_pBuffer->caretX(); for(int i=0; i0?7:6]); m_pTelnet->write(cmd, cmd.size()); } else if (nCursorType == 9) { char cr = CHAR_CR; m_pTelnet->write(&cr, 1); } } void Window::wheelEvent(QWheelEvent *we) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onWheelEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << we->delta() << (int) we->buttons() << (int) we->modifiers() << (int) we->orientation() << we->x() << we->y() ); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onWheelEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif if (Global::instance()->m_pref.bWheel) { int j = we->delta() > 0 ? 4 : 5; if (!(we->modifiers())) { if (Global::instance()->m_pref.bWheel && m_bConnected) m_pTelnet->write(direction[j], sizeof(direction[j])); } } else { m_pScreen->scrollLine(-we->delta()/8/15); } } //keyboard input event void Window::keyPressEvent(QKeyEvent * e) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onKeyPressEvent"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << e->key() << (int) e->modifiers() << e->text()); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onMouseEvent is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif if (!m_bConnected) { if (e->key() == Qt::Key_Return) reconnect(); return; } // message replying if (m_replyTimer->isActive()) m_replyTimer->stop(); Qt::KeyboardModifiers modifiers = e->modifiers(); KeyboardTranslator::States states = KeyboardTranslator::AnsiState; if ( m_translator ) { KeyboardTranslator::Entry entry = m_translator->findEntry( e->key() , modifiers, states ); // send result to terminal QByteArray textToSend; // special handling for the Alt (aka. Meta) modifier. pressing // Alt+[Character] results in Esc+[Character] being sent // (unless there is an entry defined for this particular combination // in the keyboard modifier) bool wantsAltModifier = entry.modifiers() & entry.modifierMask() & Qt::AltModifier; bool wantsAnyModifier = entry.state() & entry.stateMask() & KeyboardTranslator::AnyModifierState; if ( modifiers & Qt::AltModifier && !(wantsAltModifier || wantsAnyModifier) && !e->text().isEmpty() ) { textToSend.prepend("\033"); } if ( entry.command() != KeyboardTranslator::NoCommand ) { if (entry.command() & KeyboardTranslator::EraseCommand) textToSend += "\x1b[3~"; // TODO command handling } else if ( !entry.text().isEmpty() ) { textToSend += unicode2bbs(entry.text(true,modifiers)); } else textToSend += unicode2bbs(e->text()); m_pTelnet->write(textToSend, textToSend.length()); } } //connect slot void Window::connectHost() { int nProtocol = m_param.m_mapParam["protocol"].toInt(); bool bAutoLogin = m_param.m_mapParam["autologin"].toBool(); QString strAddr = m_param.m_mapParam["addr"].toString(); int nPort = m_param.m_mapParam["port"].toInt(); QString strSSHUser = m_param.m_mapParam["sshuser"].toString(); QString strSSHPass = m_param.m_mapParam["sshpass"].toString(); QString strTerm = m_param.m_mapParam["termtype"].toString(); int nColumn = m_param.m_mapParam["column"].toInt(); int nRow = m_param.m_mapParam["row"].toInt(); if (m_hostInfo == NULL) { if (nProtocol == 0) m_hostInfo = new TelnetInfo(strAddr, nPort, this); else { #ifndef SSH_ENABLED m_hostInfo = new TelnetInfo(strAddr, nPort, this); #else SSHInfo * sshInfo = new SSHInfo(strAddr , nPort, this); if (strSSHUser.isEmpty()) { strSSHUser = m_param.m_mapParam["user"].toString(); if (strSSHPass.isEmpty()) { strSSHPass = m_param.m_mapParam["password"].toString(); } } sshInfo->setUserName(strSSHUser); sshInfo->setPassword(strSSHPass); sshInfo->setPrivateKeyFile(m_param.m_mapParam["sshprivatekeyfile"].toString()); sshInfo->setPassphrase(m_param.m_mapParam["sshpassphrase"].toString()); sshInfo->setHostKey(m_param.m_mapParam["sshhostkey"].toString()); m_hostInfo = sshInfo; connect(m_hostInfo, SIGNAL(hostKeyChanged(const QString &)), this, SLOT(updateHostKey(const QString &))); #endif } } m_hostInfo->setTermInfo(strTerm, nColumn, nRow); m_pTelnet->setProxy(m_param.m_mapParam["proxytype"].toInt(), m_param.m_mapParam["proxyauth"].toBool(), m_param.m_mapParam["proxyaddr"].toString(), m_param.m_mapParam["proxyport"].toInt(), m_param.m_mapParam["proxyuser"].toString(), m_param.m_mapParam["proxypassword"].toString()); m_pTelnet->connectHost(m_hostInfo); } /* ------------------------------------------------------------------------ */ /* */ /* Telnet State */ /* */ /* ------------------------------------------------------------------------ */ //read slot void Window::readReady(int size) { // qDebug("readReady"); //read it char * str = new char[size+1]; m_pTelnet->read(str, size); str[size] = '\0'; int raw_size = m_pTelnet->raw_len(); char * raw_str = new char[raw_size]; m_pTelnet->read_raw(raw_str, raw_size); // read raw buffer m_pZmodem->ZmodemRcv((uchar *)raw_str, raw_size, &(m_pZmodem->info)); if (m_pZmodem->transferstate == NoTransfer) { //decode m_pDecode->decode(str, size); if (m_pDecode->bellReceive()) // Better way to determing the message? m_bMessage = true; } //delete the buf delete []str; delete []raw_str; if (m_pZmodem->transferstate == TransferStop) m_pZmodem->transferstate = NoTransfer; m_updateTimer->start(0); } void Window::ZmodemState(int type, int value, const QString& msg) { QString status = m_codec->toUnicode(msg.toLatin1()); #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onZmodemState"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << type << value << status); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onZmodemState is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif QString strMsg; //to be completed switch (type) { case RcvByteCount: m_pZmDialog->setProgress(value); break; case SndByteCount: m_pZmDialog->setProgress(value); break; case RcvTimeout: /* receiver did not respond, aborting */ strMsg = QString("time out!"); m_pZmDialog->addErrorLog(strMsg); break; case SndTimeout: /* value is # of consecutive send timeouts */ strMsg = QString("time out after trying %1 times").arg(value); m_pZmDialog->addErrorLog(strMsg); break; case RmtCancel: /* remote end has cancelled */ strMsg = QString("canceled by remote peer %1").arg(status); m_pZmDialog->addErrorLog(strMsg); break; case ProtocolErr: /* protocol error has occurred, val=hdr */ strMsg = QString("unhandled header %1 at state %2").arg(value).arg(status); m_pZmDialog->addErrorLog(strMsg); break; case RemoteMessage: /* message from remote end */ strMsg = QString("msg from remote peer: %1").arg(status); m_pZmDialog->addErrorLog(strMsg); break; case DataErr: /* data error, val=error count */ strMsg = QString("data errors %1").arg(value); m_pZmDialog->addErrorLog(strMsg); break; case FileErr: /* error writing file, val=errno */ strMsg = QString("falied to write file"); m_pZmDialog->addErrorLog(strMsg); break; case FileBegin: /* file transfer begins, str=name */ // qWarning("starting file %s", status); m_pZmDialog->setFileInfo(status, value); m_pZmDialog->setProgress(0); m_pZmDialog->clearErrorLog(); m_pZmDialog->show(); m_pZmDialog->setModal(true); break; case FileEnd: /* file transfer ends, str=name */ // qWarning("finishing file %s", status); m_pZmDialog->hide(); break; case FileSkip: /* file being skipped, str=name */ strMsg = QString("skipping file %1").arg(status); m_pZmDialog->addErrorLog(strMsg); break; } } // telnet state slot void Window::TelnetState(int state) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onTelnetState"); if (func.isFunction()) { func.call(QScriptValue(), QScriptValueList() << state); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onTelnetState is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif switch (state) { case TSRESOLVING: m_pScreen->osd()->display(tr("resolving host name")); break; case TSHOSTFOUND: m_pScreen->osd()->display(tr("host found")); break; case TSHOSTNOTFOUND: m_pScreen->osd()->display(tr("host not found")); connectionClosed(); break; case TSCONNECTING: m_pScreen->osd()->display(tr("connecting...")); break; case TSHOSTCONNECTED: m_pScreen->osd()->display(tr("connected")); m_bConnected = true; if (m_param.m_mapParam["autologin"].toBool()) m_bDoingLogin = true; break; case TSPROXYCONNECTED: m_pScreen->osd()->display(tr("connected to proxy")); break; case TSPROXYAUTH: m_pScreen->osd()->display(tr("proxy authentation")); break; case TSPROXYFAIL: m_pScreen->osd()->display(tr("proxy failed")); on_actionDisconnect_triggered(); break; case TSREFUSED: m_pScreen->osd()->display(tr("connection refused")); connectionClosed(); break; case TSREADERROR: m_pScreen->osd()->display(tr("error when reading from server"), PageViewMessage::Error); on_actionDisconnect_triggered(); break; case TSCLOSED: m_pScreen->osd()->display(tr("connection closed")); connectionClosed(); if (m_param.m_mapParam["reconnect"].toBool() && m_bReconnect) reconnectProcess(); break; case TSCLOSEFINISH: m_pScreen->osd()->display(tr("connection close finished")); //connectionClosed(); break; case TSCONNECTVIAPROXY: m_pScreen->osd()->display(tr("connect to host via proxy")); break; case TSEGETHOSTBYNAME: m_pScreen->osd()->display(tr("error in gethostbyname"), PageViewMessage::Error); connectionClosed(); break; case TSEINIWINSOCK: m_pScreen->osd()->display(tr("error in startup winsock"), PageViewMessage::Error); connectionClosed(); break; case TSERROR: m_pScreen->osd()->display(tr("error in connection"), PageViewMessage::Error); on_actionDisconnect_triggered(); break; case TSPROXYERROR: m_pScreen->osd()->display(tr("error in proxy"), PageViewMessage::Error); on_actionDisconnect_triggered(); break; case TSWRITED: // restart the idle timer if (m_idleTimer->isActive()) m_idleTimer->stop(); if (m_bAntiIdle) m_idleTimer->start(m_param.m_mapParam["maxidle"].toInt()*1000); m_bIdling = false; break; default: break; } } /* ------------------------------------------------------------------------ */ /* */ /* UI Slots */ /* */ /* ------------------------------------------------------------------------ */ void Window::on_actionCopy_triggered() { QClipboard *clipboard = QApplication::clipboard(); QString strEscape = m_param.m_mapParam["escape"].toString(); clipboard->setText(m_pBuffer->getSelectText(m_bRectCopy, m_bColorCopy, parseString((const char *)strEscape.toLatin1())), QClipboard::Clipboard); clipboard->setText(m_pBuffer->getSelectText(m_bRectCopy, m_bColorCopy, parseString((const char *)strEscape.toLatin1())), QClipboard::Selection); } void Window::on_actionPaste_triggered() { pasteHelper(true); } void Window::pasteHelper(bool clip) { if (!m_bConnected) return; QClipboard *clipboard = QApplication::clipboard(); QString strText; QString strTmp; QByteArray cstrText; if (clip) strTmp = clipboard->text(QClipboard::Clipboard); else strTmp = clipboard->text(QClipboard::Selection); strText = Global::instance()->convert(strTmp, (Global::Conversion)Global::instance()->clipConversion()); if (!Global::instance()->escapeString().isEmpty()) strText.replace(parseString(Global::instance()->escapeString().toLatin1()), parseString((const char *)m_param.m_mapParam["escape"].toString().toLatin1())); if (m_bWordWrap) { // insert '\n' as needed for (int i = 0; i < strText.length(); i++) { int j = i; int k = 0, l = 0; while (strText.at(j) != QChar('\n') && j < strText.length()) { if (Global::instance()->m_pref.nWordWrap - (l - k) >= 0 && Global::instance()->m_pref.nWordWrap - (l - k) < 2) { strText.insert(j, QChar('\n')); k = l; j++; break; } // double byte or not if (strText.at(j).row() == '\0') l++; else l += 2; j++; } i = j; } } cstrText = m_codec->fromUnicode(strText); m_pTelnet->write(cstrText, cstrText.length()); } void Window::on_actionCopy_Article_triggered() { //return; if (!m_bConnected) return; #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onCopyArticle"); if (func.isFunction()) { QScriptValue text = func.call(); if (m_scriptHelper->accepted()) { showArticle(text.toString()); return; } } else { qDebug("onCopyArticle is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif m_pDAThread = new DAThread(this); connect(m_pDAThread, SIGNAL(done(int)), this, SLOT(jobDone(int))); m_pDAThread->start(); } void Window::on_actionCurrent_Session_Setting_triggered() { addrDialog set(this, true); Param backup = m_param; set.param = m_param; set.updateData(false); set.ui.tabWidget->setCurrentIndex(1); connect(set.ui.asciiFontComboBox, SIGNAL(currentFontChanged(const QFont &)), m_pScreen, SLOT(asciiFontChanged(const QFont &))); connect(set.ui.generalFontComboBox, SIGNAL(currentFontChanged(const QFont &)), m_pScreen, SLOT(generalFontChanged(const QFont &))); connect(set.ui.fontSizeSpinBox, SIGNAL(valueChanged(int)), m_pScreen, SLOT(fontSizeChanged(int))); connect(set.ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), m_pScreen, SLOT(schemeChanged(int))); connect(set.ui.opacityHorizontalSlider, SIGNAL(valueChanged(int)),m_pScreen, SLOT(opacityChanged(int))); set.ui.asciiFontComboBox->setCurrentFont(m_pScreen->asciiFont()); set.ui.generalFontComboBox->setCurrentFont(m_pScreen->generalFont()); if (set.exec() == 1) { m_param = set.param; if (!m_strUuid.isEmpty()) { QDomDocument doc = Global::instance()->addrXml(); Global::instance()->saveAddress(doc,m_strUuid, m_param); Global::instance()->saveAddressXml(doc); } loadKeyboardTranslator(m_param.m_mapParam["keyboardprofile"].toString()); } else { m_param = backup; } m_pScreen->setScheme(); m_pScreen->initFontMetrics(); QResizeEvent* re = new QResizeEvent(m_pScreen->size(), m_pScreen->size()); QApplication::postEvent(m_pScreen, re); } void Window::on_actionDisconnect_triggered() { m_pTelnet->close(); } void Window::reconnect() { if (!m_bConnected) connectHost(); } void Window::showIP() { if (!m_bCheckIP) { m_pScreen->osd()->display(tr("IP database not found"), PageViewMessage::Warning, 0, PageViewMessage::IP); return; } QString country, city; QString url = m_pBBS->getIP(); if (m_pIPLocation->getLocation(url, country, city)) { m_pScreen->osd()->display((country + city), PageViewMessage::Info, 0, PageViewMessage::IP); } } void Window::on_actionBoss_Color_toggled(bool boss) { Global::instance()->setBossColor(boss); m_pScreen->bossColor(); } void Window::on_actionRefresh_triggered() { //m_pScreen->repaint(true); m_pScreen->m_ePaintState = Screen::Show; m_pScreen->update(); } void Window::on_actionUnderline_toggled(bool underline) { QString strEscape = m_param.m_mapParam["escape"].toString(); if (underline) strEscape += "4m"; else strEscape += "0m"; QByteArray sequence = parseString(strEscape.toLocal8Bit()); m_pTelnet->write(sequence,sequence.length()); } void Window::on_actionBlink_toggled(bool blink) { QString strEscape = m_param.m_mapParam["escape"].toString(); if (blink) strEscape += "5m"; else strEscape += "0m"; QByteArray sequence = parseString(strEscape.toLocal8Bit()); m_pTelnet->write(sequence,sequence.length()); } void Window::on_actionPallete_triggered(const QVariant& data) { if (data.isNull()) return; int index = data.toInt() >> 4; int role = data.toInt() & 0x0f; int color = index; QString strEscape = m_param.m_mapParam["escape"].toString(); // highlight if (index > 7) { strEscape += "1;"; color = index - 8; } // fg or bg if (role == 0) //fg strEscape += QString::number(30+color); else // bg strEscape += QString::number(40+color); strEscape += "m"; // write to server QByteArray sequence = parseString(strEscape.toLocal8Bit()); m_pTelnet->write(sequence,sequence.length()); } void Window::on_actionSymbols_triggered(const QVariant& data) { setFocus(); // steal back focus from symbol table QByteArray text = m_codec->fromUnicode(data.toString()); m_pTelnet->write(text,text.length()); } void Window::on_actionDebug_Console_triggered() { #ifdef SCRIPTTOOLS_ENABLED m_scriptDebugger->action(QScriptEngineDebugger::InterruptAction)->trigger(); #else QMessageBox::information(this, "QTerm", tr("You need to enable the script engine debugger to use this feature. \ Please recompile QTerm with the debugger enabled (need Qt 4.5 or newer version)")); #endif } void Window::on_actionRun_triggered() { runScript(); } void Window::on_actionStop_triggered() { #ifdef SCRIPT_ENABLED m_scriptEngine->abortEvaluation(); #endif } void Window::on_actionReload_Script_triggered() { initScript(); } void Window::on_actionView_Message_triggered() { msgDialog msg(this); msg.ui.msgBrowser->setPlainText(m_strMessage); msg.exec(); } void Window::on_actionAnti_Idle_toggled(bool isEnabled) { m_bAntiIdle = isEnabled; // disabled if (!m_bAntiIdle && m_idleTimer->isActive()) m_idleTimer->stop(); // enabled if (m_bAntiIdle && !m_idleTimer->isActive()) m_idleTimer->start(m_param.m_mapParam["maxidle"].toInt()*1000); } void Window::on_actionAuto_Reply_toggled(bool isEnabled) { m_bAutoReply = isEnabled; // disabled if (!m_bAutoReply && m_replyTimer->isActive()) m_replyTimer->stop(); // enabled // if( m_bAutoReply && !m_replyTimer->isActive() ) // m_replyTimer->start(m_param.m_mapParam["maxidle"].toInt()*1000/2); } void Window::connectionClosed() { m_bConnected = false; if (m_idleTimer->isActive()) m_idleTimer->stop(); m_pScreen->osd()->display(tr("connection closed")); setCursor(cursor[9]); QString strMsg = ""; strMsg += "\n\n\n\r"; strMsg += "\x1b[17C\x1b[0m===========================================\n\r"; strMsg += "\x1b[17C Connection Closed, Press \x1b[1m\x1b[31;40mEnter\x1b[m\x1b[0m To Connect\n\r"; strMsg += "\x1b[17C===========================================\n"; m_pDecode->decode(strMsg.toLatin1(), strMsg.length()); m_pScreen->updateRegion(); } void Window::doAutoLogin() { QString strPreLogin = m_param.m_mapParam["prelogin"].toString(); QString strUser = m_param.m_mapParam["user"].toString(); QString strPasswd = m_param.m_mapParam["password"].toString(); QString strPostLogin = m_param.m_mapParam["postlogin"].toString(); if (!strPreLogin.isEmpty()) { QByteArray temp = parseString(strPreLogin.toLatin1()); m_pTelnet->write((const char *)(temp), temp.length()); } if (!strUser.isEmpty()) { QByteArray temp = strUser.toLocal8Bit(); m_pTelnet->write((const char *)(temp), temp.length()); char ch = CHAR_CR; m_pTelnet->write(&ch, 1); } if (!strPasswd.isEmpty()) { QByteArray temp = strPasswd.toLocal8Bit(); m_pTelnet->write((const char *)(temp), temp.length()); char ch = CHAR_CR; m_pTelnet->write(&ch, 1); } // smth ignore continous input, so sleep 1 sec :) #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) Sleep(1); #else sleep(1); #endif if (!strPostLogin.isEmpty()) { QByteArray temp = parseString(strPostLogin.toLatin1()); m_pTelnet->write((const char *)(temp), temp.length()); } m_bDoingLogin = false; } void Window::reconnectProcess() { int nRetry = m_param.m_mapParam["retrytimes"].toInt(); int nReconnectInterval = m_param.m_mapParam["interval"].toInt(); static int retry = 0; if (retry < nRetry || nRetry == -1) { if (nReconnectInterval <= 0) reconnect(); else m_reconnectTimer->start(nReconnectInterval*1000); retry++; } } /* ------------------------------------------------------------------------ */ /* */ /* Events */ /* */ /* ------------------------------------------------------------------------ */ void Window::jobDone(int e) { if (e == DAE_FINISH) { showArticle(m_pDAThread->strArticle); } else if (e == DAE_TIMEOUT) { QMessageBox::warning(this, "timeout", "download article timeout, aborted"); } } void Window::showArticle(const QString text) { if (text.isEmpty()) { return; } articleDialog article(this); article.restoreGeometry(Global::instance()->fileCfg()->getItemValue("global", "articledialog").toByteArray()); article.strArticle = text; article.ui.textBrowser->setPlainText(article.strArticle); article.exec(); Global::instance()->fileCfg()->setItemValue("global", "articledialog", article.saveGeometry()); Global::instance()->fileCfg()->save(); } void Window::updateHostKey(const QString & hostKey) { m_param.m_mapParam["sshhostkey"] = hostKey; if (!m_strUuid.isEmpty()) { QDomDocument doc = Global::instance()->addrXml(); Global::instance()->saveAddress(doc,m_strUuid, m_param); Global::instance()->saveAddressXml(doc); } } /* ------------------------------------------------------------------------ */ /* */ /* Aux Func */ /* */ /* ------------------------------------------------------------------------ */ QByteArray Window::parseString(const QByteArray& cstr, int *len) { QByteArray parsed = ""; if (len != 0) *len = 0; for (int i = 0; i < cstr.length(); i++) { if (cstr.at(i) == '^') { i++; if (i < cstr.length()) { parsed += CTRL(cstr.at(i)); if (len != 0) *len = *len + 1; } } else if (cstr.at(i) == '\\') { i++; if (i < cstr.length()) { if (cstr.at(i) == 'n') parsed += CHAR_CR; else if (cstr.at(i) == 'r') parsed += CHAR_LF; else if (cstr.at(i) == 't') parsed += CHAR_TAB; if (len != 0) *len = *len + 1; } } else { parsed += cstr.at(i); if (len != 0) *len = *len + 1; } } return parsed; } void Window::replyMessage() { if (m_replyTimer->isActive()) m_replyTimer->stop(); QByteArray cstrTmp = m_param.m_mapParam["replykey"].toString().toLocal8Bit(); QByteArray cstr = parseString(cstrTmp.isEmpty() ? QByteArray("^Z") : cstrTmp); cstr += m_codec->fromUnicode(m_param.m_mapParam["autoreply"].toString()); cstr += '\n'; m_pTelnet->write(cstr, cstr.length()); m_pScreen->osd()->display(tr("You have messages"), PageViewMessage::Info, 0); } void Window::externInput(const QString & strText) { QByteArray cstrText = unicode2bbs(strText); QByteArray cstrParsed = parseString(cstrText); m_pTelnet->write(cstrParsed, cstrParsed.length()); } QByteArray Window::unicode2bbs(const QString& text) { QString strTmp = Global::instance()->convert(text, Global::instance()->m_pref.XIM); return m_codec->fromUnicode(strTmp); } void Window::sendParsedString(const QString& str) { int length = 0; QByteArray bbsText = unicode2bbs(str); QByteArray cstr = parseString(bbsText, &length); m_pTelnet->write(cstr, length); } void Window::initScript() { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL) m_scriptEngine->abortEvaluation(); #ifdef SCRIPTTOOLS_ENABLED m_scriptDebugger->detach(); #endif delete m_scriptEngine; delete m_scriptHelper; m_scriptEngine = new QScriptEngine(this); m_scriptHelper = new ScriptHelper(this, m_scriptEngine); #ifdef SCRIPTTOOLS_ENABLED m_scriptDebugger->attachTo(m_scriptEngine); #endif QScriptValue scriptHelper = m_scriptEngine->newQObject(m_scriptHelper); m_scriptEngine->globalObject().setProperty("QTerm", scriptHelper); if (!m_param.m_mapParam["loadscript"].toBool()) return; m_pBBS->setScript(m_scriptEngine, m_scriptHelper); m_scriptHelper->loadScript(m_param.m_mapParam["scriptfile"].toString()); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("init"); if (!func.isFunction()) { qDebug() << "init is not a function"; } func.call(); #endif // SCRIPT_ENABLED } void Window::runScript(const QString & filename) { #ifdef SCRIPT_ENABLED QString file = filename; if (file.isEmpty()){ // get the previous dir file= Global::instance()->getOpenFileName("Script Files (*.js *.txt)", this); } if (file.isEmpty()) return; m_scriptHelper->loadScriptFile(file); #endif } void Window::inputHandle(const QString & text) { if (text.length() > 0) { QByteArray cstrTmp = unicode2bbs(text); m_pTelnet->write(cstrTmp, cstrTmp.length()); } } /* ------------------------------------------------------------------------ */ /* */ /* HTTP Func */ /* */ /* ------------------------------------------------------------------------ */ void Window::openLink() { Global::instance()->openUrl(m_pBBS->getUrl()); } void Window::previewLink() { getHttpHelper(m_pBBS->getUrl(), true); } void Window::copyLink() { QString strUrl; strUrl = m_pBBS->getUrl(); QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(strUrl, QClipboard::Selection); clipboard->setText(strUrl, QClipboard::Clipboard); } void Window::saveLink() { getHttpHelper(m_pBBS->getUrl(), false); } void Window::getHttpHelper(const QString& strUrl, bool bPreview) { Http *pHttp = new Http(this, m_codec); connect(pHttp, SIGNAL(done(QObject*)), this, SLOT(httpDone(QObject*))); connect(pHttp, SIGNAL(message(const QString &)), m_pScreen->osd(), SLOT(showText(const QString &))); pHttp->getLink(strUrl, bPreview); } void Window::httpDone(QObject *pHttp) { pHttp->deleteLater(); } void Window::osdMessage(const QString & message, int type, int duration) { m_pScreen->osd()->display(message, (PageViewMessage::Icon)type, duration); } void Window::showMessage(const QString & title, const QString & message, int duration) { #ifdef DBUS_ENABLED if (DBus::instance()->notificationAvailable()) { QList actions; actions.append(DBus::Show_QTerm); DBus::instance()->sendNotification(title, message, QImage(), actions); } else #endif //DBUS_ENABLED { if (!m_pFrame->showMessage(title, message)) { m_popWin->setText(message); m_popWin->popup(); } } } QMenu * Window::popupMenu() { return m_pMenu; } QMenu * Window::urlMenu() { return m_pUrl; } void Window::updateWindow() { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("onNewData"); if (func.isFunction()) { func.call(); if (m_scriptHelper->accepted()) { return; } } else { qDebug("onNewData is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif if (m_bDoingLogin) { int n = m_pBuffer->caret().y(); for (int y = n - 5;y < n + 5;y++) { y = qMax(0, y); TextLine *pTextLine = m_pBuffer->screen(y); if (pTextLine == NULL) continue; QString str = pTextLine->getText(); if (str.indexOf("guest") != -1 && str.indexOf("new") != -1) { doAutoLogin(); break; } } } // page complete when caret at the right corner // this works for most but not for all TextLine * pTextLine = m_pBuffer->screen(m_pBuffer->line() - 1); QString strText = pTextLine->getText().replace(QRegExp("\\s+$"),""); if (m_pBuffer->caret().y() == m_pBuffer->line() - 1 && m_pBuffer->caret().x() >= strText.length() - 1) m_wcWaiting.wakeAll(); //QToolTip::remove(this, m_pScreen->mapToRect(m_rcUrl)); // message received // 03/19/2003. the caret posion removed as a message judgement // because smth.org changed if (m_bMessage) { if (m_bBeep) { #ifdef QMEDIAPLAYER_ENABLED if (Global::instance()->m_pref.strPlayer.isEmpty()) { m_pSound = new QMediaPlayerSound(Global::instance()->m_pref.strWave, this); } else #endif // QMEDIAPLAYER_ENABLED #ifdef PHONON_ENABLED if (Global::instance()->m_pref.strPlayer.isEmpty()) { m_pSound = new PhononSound(Global::instance()->m_pref.strWave, this); } else #endif // PHONON_ENABLED { m_pSound = new ExternalSound(Global::instance()->m_pref.strPlayer, Global::instance()->m_pref.strWave, this); } if (m_pSound) m_pSound->play(); delete m_pSound; m_pSound = NULL; } QString strMsg = m_pBBS->getMessage(); if (!strMsg.isEmpty()) m_strMessage += strMsg + "\n\n"; if (!isActiveWindow()) { showMessage("New Message in QTerm", strMsg, -1); } if (m_bAutoReply) { #ifdef SCRIPT_ENABLED if (m_scriptEngine != NULL && m_param.m_mapParam["loadscript"].toBool()) { m_scriptHelper->setAccepted(false); QScriptValue func = m_scriptEngine->globalObject().property("QTerm").property("autoReply"); if (func.isFunction()) { func.call(); if (m_scriptHelper->accepted()) { return; } else { // TODO: save messages if (m_bIdling) replyMessage(); else m_replyTimer->start(m_param.m_mapParam["maxidle"].toInt()*1000 / 2); } } else { qDebug("autoReply is not a function"); } if (m_scriptEngine->hasUncaughtException()) { QScriptValue exception = m_scriptEngine->uncaughtException(); qDebug() << "Exception: " << exception.toString(); } } #endif } //m_pFrame->buzz(); } m_pBBS->setPageState(); m_pBBS->updateSelectRect(); // set page state m_pBBS->updateUrlList(); //m_updateTimer->start(100); //refresh screen m_pScreen->updateRegion(); m_bMessage = false; } void Window::loadKeyboardTranslator(const QString & filename) { //const QString& path = name + ".keytab"; QFileInfo fi(filename); QString path; if (fi.exists()) { path = filename; } else { qWarning() << "Fallback to default keyboard layout"; #ifdef Q_OS_MACX path = Global::instance()->pathLib() + "/keyboard_profiles/apple.keytab"; #else path = Global::instance()->pathLib() + "/keyboard_profiles/linux.keytab"; #endif } fi.setFile(path); QString name = fi.baseName(); QFile source(path); if (name.isEmpty() || !source.open(QIODevice::ReadOnly | QIODevice::Text)) return; // delete the current key tranlator delete m_translator; m_translator = NULL; // create a new key translator m_translator = new KeyboardTranslator(name); KeyboardTranslatorReader reader(&source); m_translator->setDescription( reader.description() ); while ( reader.hasNextEntry() ) m_translator->addEntry(reader.nextEntry()); source.close(); if ( reader.parseError() ) { delete m_translator; m_translator = NULL; return; } qDebug() << "Keyboard translator:" << name << "loaded"; } void Window :: groupActions() { listActions << "actionDisconnect" << "actionPrint" << "actionPrint_Preview" << "actionRefresh" << "actionPallete" << "actionUnderline" << "actionBlink" << "actionSymbols" << "actionCopy" << "actionPaste" << "actionAuto_Copy" << "actionCopy_w_Color" << "actionRectangle_Selection" << "actionPaste_w_Wordwrap" << "actionAnti_Idle" << "actionAuto_Reply" << "actionCopy_Article" << "actionView_Message" << "actionBoss_Color" << "actionDebug_Console" << "actionRun" << "actionStop" << "actionReload_Script" << "actionCurrent_Session_Setting"; mapToggleStates["actionAuto_Copy"] = &m_bAutoCopy; mapToggleStates["actionCopy_w_Color"] = &m_bColorCopy; mapToggleStates["actionRectangle_Selection"] = &m_bRectCopy; mapToggleStates["actionPast_w_Wordwrap"] = &m_bWordWrap; mapToggleStates["actionAnti_Idle"] = &m_bAntiIdle; mapToggleStates["actionAuto_Reply"] = &m_bAutoReply; } } #include qterm-0.7.3/src/qtermwindow.h000066400000000000000000000147771332762052600162170ustar00rootroot00000000000000#ifndef QTERMWINDOW_H #define QTERMWINDOW_H #ifdef HAVE_CONFIG_H #include #endif #include "qtermwindowbase.h" #include "qtermparam.h" #include "qtermconvert.h" #include "qtermsound.h" //Added by qt3to4: #include #include #include //#include // #include #include #include #include // #include #include #include #include #include class QProgressDialog; class QTextCodec; #ifdef SCRIPT_ENABLED class QScriptEngine; #ifdef SCRIPTTOOLS_ENABLED class QScriptEngineDebugger; #endif #endif namespace QTerm { class TextLine; class Screen; class Telnet; class Decode; class Buffer; class Frame; class BBS; class popWidget; class Zmodem; class Window; class zmodemDialog; class Http; class IPLocation; class PageViewMessage; #ifdef SCRIPT_ENABLED class ScriptHelper; #endif class HostInfo; class KeyboardTranslator; // thread copy article class DAThread : public QThread { Q_OBJECT public: DAThread(Window*); ~DAThread(); virtual void run(); QString strArticle; QMutex mutex; signals: void done(int); private: Window *pWin; }; class Window: public WindowBase { Q_OBJECT public: Window(Frame * frame, Param param, const QString& uuid, QWidget* parent = 0, const char* name = 0, Qt::WindowFlags wflags = Qt::Window); ~Window(); void connectHost(); bool isConnected() { return m_bConnected; } QString uuid() { return m_strUuid; } public slots: // File void on_actionDisconnect_triggered(); // Edit void on_actionCopy_triggered(); void on_actionPaste_triggered(); void on_actionRectangle_Selection_toggled(bool rect) { m_bRectCopy = rect; } void on_actionCopy_w_Color_toggled(bool color) { m_bColorCopy = color; } void on_actionAuto_Copy_toggled(bool automatic) { m_bAutoCopy = automatic; } void on_actionPaste_w_Wrodwrap(bool wordwrap) { m_bWordWrap = wordwrap; } void on_actionUnderline_toggled(bool underline); void on_actionBlink_toggled(bool blink); void on_actionPallete_triggered(const QVariant& data); void on_actionSymbols_triggered(const QVariant& data); // View void on_actionRefresh_triggered(); void on_actionBoss_Color_toggled(bool); // BBS void on_actionAuto_Reply_toggled(bool); void on_actionAnti_Idle_toggled(bool); void on_actionCopy_Article_triggered(); void on_actionView_Message_triggered(); void on_actionBeep_on_message_toggled(bool beep) { m_bBeep = beep; } void on_actionSupport_Mouse_toggled(bool mouse) { m_bMouse = mouse; } // Option void on_actionCurrent_Session_Setting_triggered(); // Script void on_actionRun_triggered(); void on_actionStop_triggered(); void on_actionDebug_Console_triggered(); void on_actionReload_Script_triggered(); public slots: // ui void reconnect(); void sendParsedString(const QString &); void showIP(); void inputHandle(const QString & text); public: void initScript(); void runScript(const QString & filename=""); void externInput(const QString &); void getHttpHelper(const QString&, bool); void osdMessage(const QString &, int type, int duration); void showMessage(const QString & title, const QString & message, int duration = -1); Screen * screen() { return m_pScreen; } Zmodem * zmodem() { return m_pZmodem; } QMenu * popupMenu(); QMenu * urlMenu(); QPoint mousePos() const { return m_ptMouse; } protected slots: // from Telnet void readReady(int); void TelnetState(int); void ZmodemState(int, int, const QString&); // timer void idleProcess(); void replyProcess(); void updateWindow(); //http menu void previewLink(); void openLink(); void copyLink(); void saveLink(); // httpDone void httpDone(QObject*); // decode void setMouseMode(bool on ) { m_bMouseX11 = on; } void jobDone(int); void showArticle(const QString text); void updateHostKey(const QString & hostKey); protected: // Mouse Events void mouseDoubleClickEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); void wheelEvent(QWheelEvent *); void enterEvent(QEvent *); void leaveEvent(QEvent *); void reconnectProcess(); void connectionClosed(); void doAutoLogin(); void replyMessage(); void pasteHelper(bool); QByteArray unicode2bbs(const QString&); QByteArray parseString(const QByteArray&, int *len = 0); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); void loadKeyboardTranslator(const QString & profile); void groupActions(); Screen * m_pScreen; Decode * m_pDecode; QMenu * m_pMenu; QMenu * m_pUrl; static char direction[][5]; QCursor cursor[10]; bool m_bConnected; Convert m_converter; bool m_bMessage; QString m_strMessage; // mouse select QPoint m_ptSelStart, m_ptSelEnd; QPoint m_ptMouse; bool m_bSelecting; // timer bool m_bIdling; QTimer *m_idleTimer, *m_replyTimer, *m_reconnectTimer, * m_ipTimer; QTimer * m_updateTimer; // address setting QString m_strUuid; bool m_bDoingLogin; bool m_bCheckIP; // url rect QRect m_rcUrl; // popWidget *m_popWin; // download article thread DAThread *m_pDAThread; // python #ifdef HAVE_PYTHON PyObject *pModule, *pDict; #endif bool m_bPythonScriptLoaded; // play sound Sound * m_pSound; Zmodem *m_pZmodem; zmodemDialog *m_pZmDialog; // Decode bool m_bMouseX11; //IP location QString location; IPLocation * m_pIPLocation; //osd PageViewMessage * m_pMessage; bool m_bMouseClicked; QTextCodec * m_codec; KeyboardTranslator * m_translator; #ifdef SCRIPT_ENABLED QScriptEngine * m_scriptEngine; ScriptHelper * m_scriptHelper; #ifdef SCRIPTTOOLS_ENABLED QScriptEngineDebugger * m_scriptDebugger; #endif #endif public: Frame * m_pFrame; Buffer * m_pBuffer; Telnet * m_pTelnet; Param m_param; BBS * m_pBBS; HostInfo * m_hostInfo; // menu and toolbar state bool m_bColorCopy; bool m_bRectCopy; bool m_bAutoCopy; bool m_bWordWrap; bool m_bAntiIdle; bool m_bAutoReply; bool m_bBeep; bool m_bMouse; bool m_bReconnect; friend class Screen; QString m_strPythonError; QWaitCondition m_wcWaiting; }; } // namespace QTerm #endif //QTERMWINDOW_H qterm-0.7.3/src/qtermwindowbase.cpp000066400000000000000000000001041332762052600173600ustar00rootroot00000000000000#include "qtermwindowbase.h" #include "moc_qtermwindowbase.cpp" qterm-0.7.3/src/qtermwindowbase.h000066400000000000000000000012661332762052600170370ustar00rootroot00000000000000#ifndef QTERMWINDOWBASE_H #define QTERMWINDOWBASE_H #include #include namespace QTerm { class WindowBase : public QMdiSubWindow { Q_OBJECT public: WindowBase(QWidget *parent=0, Qt::WindowFlags flags = 0):QMdiSubWindow(parent, flags) { setAttribute(Qt::WA_DeleteOnClose); } virtual ~WindowBase() {} bool hasAction(const QString& act){return listActions.contains(act);} bool isActionChecked(const QString& act) { if (mapToggleStates.contains(act)) return *mapToggleStates[act]; else return false; } protected: QStringList listActions; QMap mapToggleStates; }; } // namespace QTerm #endif // QTERMWINDOWBASE_H qterm-0.7.3/src/qtermzmodem.cpp000066400000000000000000002333741332762052600165320ustar00rootroot00000000000000#include "qtermzmodem.h" #include "qtermtelnet.h" #include "qtermframe.h" #include "qterm.h" #include "qtermconfig.h" #include "qtermglobal.h" #include #include #include #include namespace QTerm { #ifdef QTERM_DEBUG // for zmodemlog() #include #endif /* * Crc calculation stuff */ /* crctab calculated by Mark G. Mendel, Network Systems Corporation */ unsigned short crctab[256] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 }; /* * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell. * NOTE: First argument must be in range 0 to 255. * Second argument is referenced twice. * * Programmers may incorporate any or all code into their programs, * giving proper credit within the source. Publication of the * source routines is permitted so long as proper credit is given * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, * Omen Technology. */ #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp) /* * Copyright (C) 1986 Gary S. Brown. You may use this program, or * code or tables extracted from it, as desired without restriction. */ /* First, the polynomial itself and its table of feedback terms. The */ /* polynomial is */ /* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ /* Note that we take it "backwards" and put the highest-order term in */ /* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ /* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ /* the MSB being 1. */ /* Note that the usual hardware shift register implementation, which */ /* is what we're using (we're merely optimizing it by doing eight-bit */ /* chunks at a time) shifts bits into the lowest-order term. In our */ /* implementation, that means shifting towards the right. Why do we */ /* do it this way? Because the calculated CRC must be transmitted in */ /* order from highest-order term to lowest-order term. UARTs transmit */ /* characters in order from LSB to MSB. By storing the CRC this way, */ /* we hand it to the UART in the order low-byte to high-byte; the UART */ /* sends each low-bit to hight-bit; and the result is transmission bit */ /* by bit from highest- to lowest-order term without requiring any bit */ /* shuffling on our part. Reception works similarly. */ /* The feedback terms table consists of 256, 32-bit entries. Notes: */ /* */ /* The table can be generated at runtime if desired; code to do so */ /* is shown later. It might not be obvious, but the feedback */ /* terms simply represent the results of eight shift/xor opera- */ /* tions for all combinations of data and CRC register values. */ /* */ /* The values must be right-shifted by eight bits by the "updcrc" */ /* logic; the shift must be unsigned (bring in zeroes). On some */ /* hardware you could probably optimize the shift in assembler by */ /* using byte-swap instructions. */ unsigned long cr3tab[] = { /* CRC polynomial 0xedb88320 */ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; #define UPDC32(b, c) (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)) #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp) #if 1 StateTable Zmodem::RStartOps[] = { {ZSINIT, &Zmodem::GotSinit, 0, 1, RSinitWait}, /* SINIT, wait for attn str */ {ZFILE, &Zmodem::GotFile, 0, 0, RFileName}, /* FILE, wait for filename */ {ZRQINIT, &Zmodem::SendRinit, 0, 1, RStart}, /* sender confused, resend */ {ZFIN, &Zmodem::GotFin, 1, 0, RFinish}, /* sender shutting down */ {ZNAK, &Zmodem::SendRinit, 1, 0, RStart}, /* RINIT was bad, resend */ {ZFREECNT, &Zmodem::GotFreecnt, 0, 0, RStart}, /* sender wants free space */ {ZCOMMAND, &Zmodem::GotCommand, 0, 0, CommandData}, /* sender wants command */ {ZSTDERR, &Zmodem::GotStderr, 0, 0, StderrData}, /* sender wants to send msg */ {ZRINIT, &Zmodem::ZmodemTInit, 1, 1, TStart}, {99, &Zmodem::ZPF, 0, 0, RStart}, /* anything else is an error */ } ; StateTable Zmodem::RSinitWaitOps[] = { /* waiting for data */ {99, &Zmodem::ZPF, 0, 0, RSinitWait}, } ; StateTable Zmodem::RFileNameOps[] = { /* waiting for file name */ {99, &Zmodem::ZPF, 0, 0, RFileName}, } ; StateTable Zmodem::RCrcOps[] = { /* waiting for CRC */ {ZCRC, &Zmodem::GotFileCrc, 0, 0, RFile}, /* sender sent it */ {ZNAK, &Zmodem::ResendCrcReq, 0, 0, RCrc}, /* ZCRC was bad, resend */ {ZRQINIT, &Zmodem::SendRinit, 1, 1, RStart}, /* sender confused, restart */ {ZFIN, &Zmodem::GotFin, 1, 1, RFinish}, /* sender signing off */ {99, &Zmodem::ZPF, 0, 0, RCrc}, } ; StateTable Zmodem::RFileOps[] = { /* waiting for ZDATA */ {ZDATA, &Zmodem::GotData, 0, 0, RData}, /* got it */ {ZNAK, &Zmodem::ResendRpos, 0, 0, RFile}, /* ZRPOS was bad, resend */ {ZEOF, &Zmodem::GotEof, 0, 0, RStart}, /* end of file */ {ZRQINIT, &Zmodem::SendRinit, 1, 1, RStart}, /* sender confused, restart */ {ZFILE, &Zmodem::ResendRpos, 0, 0, RFile}, /* ZRPOS was bad, resend */ {ZFIN, &Zmodem::GotFin, 1, 1, RFinish}, /* sender signing off */ {99, &Zmodem::ZPF, 0, 0, RFile}, } ; /* waiting for data, but a packet could possibly arrive due * to error recovery or something */ StateTable Zmodem::RDataOps[] = { {ZRQINIT, &Zmodem::SendRinit, 1, 1, RStart}, /* sender confused, restart */ {ZFILE, &Zmodem::GotFile, 0, 1, RFileName}, /* start a new file (??) */ {ZNAK, &Zmodem::ResendRpos, 1, 1, RFile}, /* ZRPOS was bad, resend */ {ZFIN, &Zmodem::GotFin, 1, 1, RFinish}, /* sender signing off */ {ZDATA, &Zmodem::GotData, 0, 1, RData}, /* file data follows */ {ZEOF, &Zmodem::GotEof, 1, 1, RStart}, /* end of file */ {99, &Zmodem::ZPF, 0, 0, RData}, } ; /* here if we've sent ZFERR or ZABORT. Waiting for ZFIN */ StateTable Zmodem::RFinishOps[] = { {ZRQINIT, &Zmodem::SendRinit, 1, 1, RStart}, /* sender confused, restart */ {ZFILE, &Zmodem::GotFile, 1, 1, RFileName}, /* start a new file */ {ZNAK, &Zmodem::GotFin, 1, 1, RFinish}, /* resend ZFIN */ {ZFIN, &Zmodem::GotFin, 1, 1, RFinish}, /* sender signing off */ {99, &Zmodem::ZPF, 0, 0, RFinish}, } ; /* sent ZRQINIT, waiting for response */ StateTable Zmodem::TStartOps[] = { {ZRINIT, &Zmodem::GotRinit, 1, 1, TStart}, {ZCHALLENGE, &Zmodem::AnswerChallenge, 1, 0, TStart}, {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {ZNAK, &Zmodem::Ignore, 0, 0, TStart}, {ZCOMMAND, &Zmodem::GotCommand, 0, 0, CommandData}, {ZSTDERR, &Zmodem::GotStderr, 0, 0, StderrData}, {99, &Zmodem::ZPF, 0, 0, TStart}, } ; /* sent ZSINIT, waiting for response */ StateTable Zmodem::TInitOps[] = { {ZACK, &Zmodem::RetDone, 1, 0, TInit}, {ZNAK, &Zmodem::SendZSInit, 1, 0, TInit}, {ZRINIT, &Zmodem::GotRinit, 1, 1, TInit}, /* redundant, but who cares */ {ZCHALLENGE, &Zmodem::AnswerChallenge, 1, 0, TInit}, {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {ZCOMMAND, &Zmodem::GotCommand, 0, 0, CommandData}, {ZSTDERR, &Zmodem::GotStderr, 0, 0, StderrData}, {99, &Zmodem::ZPF, 0, 0, TInit}, } ; /* sent ZFILE, waiting for response */ StateTable Zmodem::FileWaitOps[] = { {ZRPOS, &Zmodem::SendFileData, 1, 1, Sending}, {ZSKIP, &Zmodem::SkipFile, 1, 0, TStart}, {ZCRC, &Zmodem::SendFileCrc, 1, 0, FileWait}, {ZNAK, &Zmodem::sendFilename, 1, 0, FileWait}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {ZCHALLENGE, &Zmodem::AnswerChallenge, 1, 0, FileWait}, {ZCOMMAND, &Zmodem::GotCommand, 0, 0, CommandData}, {ZSTDERR, &Zmodem::GotStderr, 0, 0, StderrData}, {ZACK, &Zmodem::SendFileData, 1, 0, Sending}, // receiver always sends ZACK back {99, &Zmodem::ZPF, 0, 0, FileWait}, } ; /* sent file CRC, waiting for response */ StateTable Zmodem::CrcWaitOps[] = { {ZRPOS, &Zmodem::SendFileData, 1, 0, Sending}, {ZSKIP, &Zmodem::SkipFile, 1, 0, FileWait}, {ZNAK, &Zmodem::SendFileCrc, 1, 0, CrcWait}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {ZCRC, &Zmodem::SendFileCrc, 0, 0, CrcWait}, {ZCHALLENGE, &Zmodem::AnswerChallenge, 0, 0, CrcWait}, {ZCOMMAND, &Zmodem::GotCommand, 0, 0, CommandData}, {ZSTDERR, &Zmodem::GotStderr, 0, 0, StderrData}, {99, &Zmodem::ZPF, 0, 0, CrcWait}, } ; /* sending data, interruptable */ StateTable Zmodem::SendingOps[] = { {ZACK, &Zmodem::GotSendAck, 0, 0, Sending}, {ZRPOS, &Zmodem::GotSendPos, 1, 1, Sending}, {ZSKIP, &Zmodem::SkipFile, 1, 1, FileWait}, {ZNAK, &Zmodem::GotSendNak, 1, 1, Sending}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {99, &Zmodem::ZPF, 0, 0, SendWait}, } ; /* sent data, need to send EOF */ StateTable Zmodem::SendDoneOps[] = { {ZACK, &Zmodem::GotSendDoneAck, 0, 0, SendWait}, {ZRPOS, &Zmodem::GotSendPos, 1, 1, Sending}, {ZSKIP, &Zmodem::SkipFile, 1, 1, FileWait}, {ZNAK, &Zmodem::GotSendNak, 1, 1, Sending}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {99, &Zmodem::ZPF, 0, 0, SendWait}, } ; /* sending data, waiting for ACK */ StateTable Zmodem::SendWaitOps[] = { {ZACK, &Zmodem::GotSendWaitAck, 0, 0, Sending}, {ZRPOS, &Zmodem::GotSendPos, 0, 0, SendWait}, {ZSKIP, &Zmodem::SkipFile, 1, 1, FileWait}, {ZNAK, &Zmodem::GotSendNak, 0, 0, Sending}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {99, &Zmodem::ZPF, 0, 0, SendWait}, } ; /* sent ZEOF, waiting for new RINIT */ StateTable Zmodem::SendEofOps[] = { {ZRINIT, &Zmodem::SkipFile, 1, 0, TFinish}, /* successful completion */ {ZACK, &Zmodem::Ignore, 0, 0, SendEof}, /* probably ACK from last packet */ {ZRPOS, &Zmodem::GotSendPos, 1, 1, SendWait}, {ZSKIP, &Zmodem::SkipFile, 1, 1, TStart}, {ZNAK, &Zmodem::ResendEof, 1, 0, SendEof}, {ZRINIT, &Zmodem::sendFilename, 1, 1, FileWait}, /* rcvr confused, retry file */ {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {99, &Zmodem::ZPF, 0, 0, SendEof}, } ; StateTable Zmodem::TFinishOps[] = { {ZFIN, &Zmodem::OverAndOut, 1, 1, Done}, {ZNAK, &Zmodem::ZmodemTFinish, 1, 1, TFinish}, {ZRINIT, &Zmodem::ZmodemTFinish, 1, 1, TFinish}, {ZABORT, &Zmodem::GotAbort, 1, 1, TFinish}, {ZFERR, &Zmodem::GotAbort, 1, 1, TFinish}, {99, &Zmodem::ZPF, 0, 0, TFinish}, } ; StateTable Zmodem::CommandDataOps[] = { {99, &Zmodem::ZPF, 0, 0, CommandData}, } ; StateTable Zmodem::CommandWaitOps[] = { {99, &Zmodem::ZPF, 0, 0, CommandWait}, } ; StateTable Zmodem::StderrDataOps[] = { {99, &Zmodem::ZPF, 0, 0, StderrData}, } ; StateTable Zmodem::DoneOps[] = { {99, &Zmodem::ZPF, 0, 0, Done}, } ; StateTable * Zmodem::tables[] = { Zmodem::RStartOps, Zmodem::RSinitWaitOps, Zmodem::RFileNameOps, Zmodem::RCrcOps, Zmodem::RFileOps, Zmodem::RDataOps, Zmodem::RDataOps, /* RDataErr is the same as RData */ Zmodem::RFinishOps, Zmodem::TStartOps, Zmodem::TInitOps, Zmodem::FileWaitOps, Zmodem::CrcWaitOps, Zmodem::SendingOps, Zmodem::SendWaitOps, Zmodem::SendDoneOps, Zmodem::SendEofOps, Zmodem::TFinishOps, Zmodem::CommandDataOps, Zmodem::CommandWaitOps, Zmodem::StderrDataOps, Zmodem::DoneOps, } ; const char * Zmodem::hdrnames[] = { "ZRQINIT", "ZRINIT", "ZSINIT", "ZACK", "ZFILE", "ZSKIP", "ZNAK", "ZABORT", "ZFIN", "ZRPOS", "ZDATA", "ZEOF", "ZFERR", "ZCRC", "ZCHALLENGE", "ZCOMPL", "ZCAN", "ZFREECNT", "ZCOMMAND", "ZSTDERR", } ; #endif Zmodem::Zmodem(QObject * parent, QObject *netinterface, QTextCodec * codec, int type) :QObject(parent) { //now set network interface Telnet m_codec = codec; connectionType = type; // Get network interface if (connectionType == 0) { // telnet m_pTelnet = (Telnet *)netinterface; } else if (connectionType == 1) { //ssh m_pTelnet = (Telnet *)netinterface; } sending = false; transferstate = NoTransfer; zmodemTimer = new QTimer(this); connect(zmodemTimer, SIGNAL(timeout()), this, SLOT(ZmodemTimeout())); #ifdef QTERM_DEBUG zmodemlogfile = fopen("zmodem.log", "w+"); fprintf(zmodemlogfile, "%s", "\n================================\n"); fclose(zmodemlogfile); #endif //init struct INFO info.zrinitflags = CANFDX | CANOVIO | CANBRK | CANFC32 ; info.zsinitflags = 0 ; info.attn = NULL ; info.bufsize = 0 ; /* full streaming */ info.buffer = NULL; zerrno = 0; lastPullByte = 0; ZmodemReset(&info); // other init function not complete } Zmodem::~Zmodem() { } int Zmodem::ZmodemTInit(ZModem *info) { int err ; int i ; info->state = TStart ; info->Protocol = ZMODEM ; info->crc32 = 0 ; info->packetCount = 0 ; info->errCount = 0 ; info->escCtrl = info->escHibit = info->atSign = info->escape = 0 ; info->InputState = Idle ; info->canCount = info->chrCount = 0 ; info->windowCount = 0 ; info->filename = NULL ; info->bufsize = 0 ; info->interrupt = 0 ; info->waitflag = 0 ; // if( info->packetsize <= 0 ) info->packetsize = 8096 ; info->windowsize = 0; /* we won't be receiving much data, pick a reasonable buffer * size (largest packet will do) */ i = info->packetsize * 2 ; if (info->buffer != NULL) { free(info->buffer) ; info->buffer = NULL ; } //since in the constructor function buffer is malloc if (i < 1024) i = 1024 ; info->buffer = (uchar *)malloc(i) ; ZIFlush(info) ; QString path = Global::instance()->fileCfg()->getItemValue("global", "openfiledialog").toString(); if (strFileList.count() == 0) strFileList = QFileDialog::getOpenFileNames(0, "Choose the files", path, "All files(*)"); if (strFileList.count() != 0) { QStringList::Iterator itFile = strFileList.begin(); QFileInfo fi(*itFile); Global::instance()->fileCfg()->setItemValue("global", "openfiledialog", fi.absoluteDir().absolutePath()); Global::instance()->fileCfg()->save(); } /* optional: send "rz\r" to remote end */ if (DoInitRZ) { if ((err = ZXmitStr((uchar *)"rz\r", 3, info))) return err ; } if ((err = ZXmitHdr(ZRQINIT, ZHEX, zeros, info))) /* nudge receiver */ return err ; info->timeout = 60 ; transferstate = WaitingForReply; // transfer complete zmodemlog("ZmodemTInit[%s]: sent ZRQINIT\n", sname(info)) ; return 0 ; } int Zmodem::ZmodemTFile(char *file, char *rfile, uint f0, uint f1, uint f2, uint f3, int filesRem, int bytesRem, ZModem *info) { if (file == NULL || (info->file = fopen(file, "rb")) == NULL) return ZmErrCantOpen ; info->fileEof = 0 ; info->filename = file ; if (rfile != NULL) info->rfilename = rfile; else info->rfilename = strdup("noname"); info->filesRem = filesRem ; info->bytesRem = bytesRem ; info->fileFlags[3] = f0 ; info->fileFlags[2] = f1 ; info->fileFlags[1] = f2 ; info->fileFlags[0] = f3 ; info->offset = info->lastOffset = 0 ; info->len = info->date = info->fileType = info->mode = 0 ; if (info->filename != NULL) { struct stat buf ; if (stat(info->filename, &buf) == 0) { info->len = buf.st_size ; info->date = buf.st_mtime ; info->fileType = 0 ; info->mode = (buf.st_mode & 0777) | 0100000 ; } } if (info->Protocol == XMODEM) return YSendData(info) ; if (info->Protocol == YMODEM) return YSendFilename(info) ; info->state = FileWait ; ZStatus(FileBegin, info->bytesRem, info->rfilename); zmodemlog("ZmodemTFile[%s]: send ZFILE(%s)\n", sname(info), info->rfilename) ; return sendFilename(info) ; } int Zmodem::ZmodemTFinish(ZModem *info) { int i; if (info->Protocol == XMODEM) return ZmDone ; if (info->Protocol == YMODEM) return YSendFin(info) ; info->state = TFinish ; if (info->buffer != NULL) { free(info->buffer) ; info->buffer = NULL ; } zmodemlog("ZmodemTFinish[%s]: send ZFIN\n", sname(info)) ; i = ZXmitHdr(ZFIN, ZHEX, zeros, info) ; return i; } int Zmodem::ZmodemAbort(ZModem *info) { uchar canistr[] = { CAN, CAN, CAN, CAN, CAN, CAN, CAN, CAN, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } ; info->state = Done ; ZIFlush(info) ; ZOFlush(info) ; transferstate = TransferStop; // transfer complete ZmodemReset(info); //Tranfer complete, zmodem return to receive state zmodemlog("ZmodemAbort[%s]: send CAN\n", sname(info)); return ZXmitStr(canistr, sizeof(canistr), info) ; } int Zmodem::ZmodemRInit(ZModem *info) { info->packetCount = 0 ; info->offset = 0 ; info->errCount = 0 ; info->escCtrl = info->escHibit = info->atSign = info->escape = 0 ; info->InputState = Idle ; info->canCount = info->chrCount = 0 ; info->filename = NULL ; info->interrupt = 0 ; info->waitflag = 0 ; info->attn = NULL ; info->file = NULL ; if (info->buffer != NULL) { free(info->buffer) ; info->buffer = NULL ; } info->buffer = (uchar *)malloc(1024) ; info->state = RStart ; info->timeoutCount = 0 ; ZIFlush(info) ; /* Don't send ZRINIT right away, there might be a ZRQINIT in * the input buffer. Instead, set timeout to zero and return. * This will allow ZmodemRcv() to check the input stream first. * If nothing found, a ZRINIT will be sent immediately. */ info->timeout = 0 ; zmodemlog("ZmodemRInit[%s]: flush input, new state = RStart\n", sname(info)) ; return 0 ; } int Zmodem::ZmodemRcv(uchar *str, int len, ZModem *info) { register uchar c ; int err ; zmodemlog("zmodemRcv called"); info->rcvlen = len ; while (--info->rcvlen >= 0) { c = *str++ ; if (c == CAN) { if (++info->canCount >= 5) { ZStatus(RmtCancel, 0, NULL) ; return ZmErrCancel ; } } else info->canCount = 0 ; if (info->InputState == Ysend) { if ((err = YsendChar(c, info))) return err ; } else if (info->InputState == Yrcv) { if ((err = YrcvChar(c, info))) return err ; } else if (c != XON && c != XOFF) { /* now look at what we have */ //fprintf(stderr, "%02x, ", c); switch (info->InputState) { case Idle: if ((err = IdleChar(c, info))) return err ; break ; case Inhdr: if ((err = HdrChar(c, info))) return err ; break ; case Indata: if ((err = DataChar(c, info))) return err ; break ; case Finish: if ((err = FinishChar(c, info))) return err ; break ; default: break ; } } } return 0 ; } int Zmodem::ZmodemTimeout(/*ZModem *info*/) { /* timed out while waiting for input */ ++info.timeoutCount ; zmodemlog("timeout %d [%s]\n", info.timeoutCount, sname(&info)) ; switch (info.state) { /* receive */ case RStart: /* waiting for INIT frame from other end */ if (info.timeoutCount > 4) return YmodemRInit(&info) ; case RSinitWait: case RFileName: if (info.timeout > 0) ZStatus(SndTimeout, info.timeoutCount, NULL) ; if (info.timeoutCount > 4) return ZmErrRcvTo ; info.state = RStart ; return SendRinit(&info) ; case RCrc: case RFile: case RData: ZStatus(SndTimeout, info.timeoutCount, NULL) ; if (info.timeoutCount > 2) { info.timeoutCount = 0 ; info.state = RStart ; return SendRinit(&info) ; } return info.state == RCrc ? ResendCrcReq(&info) : ResendRpos(&info) ; case RFinish: ZStatus(SndTimeout, info.timeoutCount, NULL) ; return ZmDone ; case YRStart: case YRDataWait: case YRData: case YREOF: return YrcvTimeout(&info) ; /* transmit */ case TStart: /* waiting for INIT frame from other end */ case TInit: /* sent INIT, waiting for ZACK */ case FileWait: /* sent file header, waiting for ZRPOS */ case CrcWait: /* sent file crc, waiting for ZRPOS */ case SendWait: /* waiting for ZACK */ case SendEof: /* sent EOF, waiting for ZACK */ case TFinish: /* sent ZFIN, waiting for ZFIN */ case YTStart: case YTFile: case YTDataWait: case YTData: case YTEOF: case YTFin: ZStatus(RcvTimeout, 0, NULL) ; return ZmErrRcvTo ; case Sending: /* sending data subpackets, ready for int */ return SendMoreFileData(&info) ; /* general */ case CommandData: /* waiting for command data */ case StderrData: /* waiting for stderr data */ return ZmErrSndTo ; case CommandWait: /* waiting for command to execute */ return ZmErrCmdTo ; case Done: return ZmDone ; default: return 0 ; } } int Zmodem::ZmodemAttention(ZModem *info) { /* attention received from remote end */ if (info->state == Sending) { ZOFlush(info) ; info->interrupt = 1 ; } return 0 ; } int Zmodem::YmodemTInit(ZModem *info) { info->state = YTStart ; info->Protocol = YMODEM ; info->errCount = 0 ; info->InputState = Ysend ; info->canCount = info->chrCount = 0 ; info->windowCount = 0 ; info->filename = NULL ; if (info->packetsize != 1024) info->packetsize = 128 ; info->buffer = (uchar *)malloc(1024) ; ZIFlush(info) ; ZFlowControl(0, info) ; info->timeout = 60 ; return 0 ; } int Zmodem::XmodemTInit(ZModem *info) { (void) YmodemTInit(info) ; info->Protocol = XMODEM ; return 0 ; } int Zmodem::YmodemRInit(ZModem *info) { info->errCount = 0 ; info->InputState = Yrcv ; info->canCount = info->chrCount = 0 ; info->noiseCount = 0 ; info->filename = NULL ; info->file = NULL ; if (info->buffer == NULL) info->buffer = (uchar *)malloc(1024) ; info->state = YRStart ; info->packetCount = -1 ; info->timeoutCount = 0 ; info->timeout = 10 ; info->offset = 0 ; ZIFlush(info) ; return ZXmitStr((uchar *)"C", 1, info) ; } int Zmodem::XmodemRInit(ZModem *info) { #if 0 int err ; state = Start ; protocol = prot ; ymodem = prot == Ymodem || prot == YmodemG ; if (ymodem) strcpy(xmDefPath, file) ; else strcpy(xmFilename, file) ; eotCount = errorCount = errorCount2 = 0 ; if (err = XmodemRStart()) return err ; state = Init ; packetId = ymodem ? 255 : 0 ; packetCount = 0 ; pktHdrLen = protocol == Xmodem ? 3 : 4 ; #endif return 0 ; } ulong Zmodem::FileCrc(char *name) { ulong crc ; FILE *ifile = fopen(name, "rb") ; int i ; if (ifile == NULL) /* shouldn't happen, since we did access(2) */ return 0 ; crc = 0xffffffff ; while ((i = fgetc(ifile)) != EOF) crc = UPDC32(i, crc) ; fclose(ifile) ; return ~crc ; } const char * Zmodem::sname(ZModem *info) { return sname2(info->state) ; } const char * Zmodem::sname2(ZMState state) { const char *names[] = { "RStart", "RSinitWait", "RFileName", "RCrc", "RFile", "RData", "RDataErr", "RFinish", "TStart", "TInit", "FileWait", "CrcWait", "Sending", "SendWait", "SendDone", "SendEof", "TFinish", "CommandData", "CommandWait", "StderrData", "Done", "YTStart", "YTFile", "YTDataWait", "YTData", "YTEOF", "YTFin", "YRStart", "YRDataWait", "YRData", "YREOF" } ; return names[(int)state] ; } int Zmodem::ZXmitChr(uchar c, ZModem *info) { // to be completed return 0; } int Zmodem::ZXmitStr(uchar *str, int len, ZModem *info) { //to be completed m_pTelnet->write((const char*)str, (uint)len); return 0; } void Zmodem::ZIFlush(ZModem *info) { //to be completed } void Zmodem::ZOFlush(ZModem *info) { //to be completed } int Zmodem::ZAttn(ZModem *info) { //to be completed return 0; } void Zmodem::ZStatus(int type, int value, const char * status) { QString msg = QString::fromLatin1(status); emit ZmodemState(type, value, status); switch (type) { case RcvByteCount: qDebug("received %d bytes", value); break; case SndByteCount: qDebug("sent %lx bytes", value); break; case RcvTimeout: /* receiver did not respond, aborting */ qDebug("time out!"); break; case SndTimeout: /* value is # of consecutive send timeouts */ qDebug("time out after trying %d times", value); break; case RmtCancel: /* remote end has cancelled */ qDebug("canceled by remote peer"); break; case ProtocolErr: /* protocol error has occurred, val=hdr */ qDebug("unhandled header %d at state %s", value, status); break; case RemoteMessage: /* message from remote end */ qDebug("msg from remote peer: %s", status); break; case DataErr: /* data error, val=error count */ qDebug("data errors %d", value); break; case FileErr: /* error writing file, val=errno */ qDebug("falied to write file"); break; case FileBegin: /* file transfer begins, str=name */ qDebug("starting file %s", status); break; case FileEnd: /* file transfer ends, str=name */ qDebug("finishing file %s", status); break; case FileSkip: /* file being skipped, str=name */ qDebug("skipping file %s", status); break; } } FILE * Zmodem::ZOpenFile(char *name, ulong crc, ZModem *info) { //to be complete FILE *rval; int apnd = 0; QString str = Global::instance()->m_pref.strZmPath + m_codec->toUnicode(name); rval = fopen(str.toLocal8Bit(), apnd ? "ab" : "wb") ; if (rval == NULL) perror(name) ; return rval ; } int Zmodem::ZXmitHdr(int type, int format, uchar data[4], ZModem *info) { if (format == ZBIN && info->crc32) format = ZBIN32 ; switch (format) { case ZHEX: return ZXmitHdrHex(type, data, info) ; case ZBIN: return ZXmitHdrBin(type, data, info) ; case ZBIN32: return ZXmitHdrBin32(type, data, info) ; default: return 0 ; } } int Zmodem::ZXmitHdrHex(int type, uchar data[4], ZModem *info) { uchar buffer[128] ; uchar *ptr = buffer ; uint crc ; int i ; zmodemlog("sending %s: %2.2x %2.2x %2.2x %2.2x = %lx\n", hdrnames[type], data[0], data[1], data[2], data[3], ZDec4(data)) ; *ptr++ = ZPAD ; *ptr++ = ZPAD ; *ptr++ = ZDLE ; *ptr++ = ZHEX ; ptr = putHex(ptr, type) ; crc = updcrc(type, 0) ; for (i = 4; --i >= 0; ++data) { ptr = putHex(ptr, *data) ; crc = updcrc(*data, crc) ; } crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; ptr = putHex(ptr, (crc >> 8) & 0xff) ; ptr = putHex(ptr, crc & 0xff) ; *ptr++ = '\r' ; *ptr++ = '\n' ; if (type != ZACK && type != ZFIN) *ptr++ = XON ; return ZXmitStr(buffer, ptr - buffer, info) ; } int Zmodem::ZXmitHdrBin(int type, uchar data[4], ZModem *info) { uchar buffer[128] ; uchar *ptr = buffer ; uint crc ; int len ; zmodemlog("sending %s: %2.2x %2.2x %2.2x %2.2x = %lx\n", hdrnames[type], data[0], data[1], data[2], data[3], ZDec4(data)) ; *ptr++ = ZPAD ; *ptr++ = ZDLE ; *ptr++ = ZBIN ; ptr = putZdle(ptr, type, info) ; crc = updcrc(type, 0) ; for (len = 4; --len >= 0; ++data) { ptr = putZdle(ptr, *data, info) ; crc = updcrc(*data, crc) ; } crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; ptr = putZdle(ptr, (crc >> 8) & 0xff, info) ; ptr = putZdle(ptr, crc & 0xff, info) ; len = ptr - buffer ; return ZXmitStr(buffer, len, info) ; } int Zmodem::ZXmitHdrBin32(int type, uchar data[4], ZModem *info) { uchar buffer[128] ; uchar *ptr = buffer ; ulong crc ; int len ; zmodemlog("sending %s: %2.2x %2.2x %2.2x %2.2x = %lx\n", hdrnames[type], data[0], data[1], data[2], data[3], ZDec4(data)) ; *ptr++ = ZPAD ; *ptr++ = ZDLE ; *ptr++ = ZBIN32 ; ptr = putZdle(ptr, type, info) ; crc = UPDC32(type, 0xffffffffL) ; for (len = 4; --len >= 0; ++data) { ptr = putZdle(ptr, *data, info) ; crc = UPDC32(*data, crc) ; } crc = ~crc ; for (len = 4; --len >= 0; crc >>= 8) ptr = putZdle(ptr, crc & 0xff, info) ; len = ptr - buffer ; return ZXmitStr(buffer, len, info) ; } uchar * Zmodem::putZdle(uchar *ptr, uchar c, ZModem *info) { uchar c2 = c & 0177 ; if (c == ZDLE || c2 == 020 || c2 == 021 || c2 == 023 || c2 == 0177 || (c2 == 015 && connectionType == 0/*&& info->atSign*/) || #ifdef COMMENT c2 == 035 || (c2 == '~' && info->lastCR) || #endif /* COMMENT */ c2 == 035 || (c2 < 040 && info->escCtrl)) { *ptr++ = ZDLE ; if (c == 0177) *ptr = ZRUB0 ; else if (c == 0377) *ptr = ZRUB1 ; else *ptr = c ^ 0100 ; } else *ptr = c ; info->atSign = c2 == '@' ; info->lastCR = c2 == '\r' ; return ++ptr ; } uchar * Zmodem::ZEnc4(ulong n) { static uchar buf[4] ; buf[0] = n & 0xff ; n >>= 8 ; buf[1] = n & 0xff ; n >>= 8 ; buf[2] = n & 0xff ; n >>= 8 ; buf[3] = n & 0xff ; return buf ; } ulong Zmodem::ZDec4(uchar buf[4]) { return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24) ; } int Zmodem::YrcvChar(char c, register ZModem *info) { int err ; if (info->canCount >= 2) { ZStatus(RmtCancel, 0, NULL) ; return ZmErrCancel ; } switch (info->state) { case YREOF: if (c == EOT) { ZCloseFile(info) ; info->file = NULL ; ZStatus(FileEnd, 0, info->filename) ; if (info->filename != NULL) free(info->filename) ; if ((err = acceptPacket(info)) != 0) return err ; info->packetCount = -1 ; info->offset = 0 ; info->state = YRStart ; return ZXmitStr((uchar *)"C", 1, info) ; } /* else, drop through */ case YRStart: case YRDataWait: switch (c) { case SOH: case STX: info->pktLen = c == SOH ? (128 + 4) : (1024 + 4) ; info->state = YRData ; info->chrCount = 0 ; info->timeout = 1 ; info->noiseCount = 0 ; info->crc = 0 ; break ; case EOT: /* ignore first EOT to protect against false eot */ info->state = YREOF ; return rejectPacket(info) ; default: if (++info->noiseCount > 135) return ZXmitStr(NakStr, 1, info) ; break ; } break ; case YRData: info->buffer[info->chrCount++] = c ; if (info->chrCount >= info->pktLen) return ProcessPacket(info) ; break ; default: break ; } return 0 ; } int Zmodem::YrcvTimeout(ZModem *info) { switch (info->state) { case YRStart: if (info->timeoutCount >= 10) { (void) ZXmitStr(CanStr, 2, info) ; return ZmErrInitTo ; } return ZXmitStr((uchar *)"C", 1, info) ; case YRDataWait: case YREOF: case YRData: if (info->timeoutCount >= 10) { (void) ZXmitStr(CanStr, 2, info) ; return ZmErrRcvTo ; } return ZXmitStr(NakStr, 1, info) ; default: return 0 ; } } void Zmodem::ZIdleStr(uchar *buffer, int len, ZModem *info) { //to be completed } int Zmodem::FinishChar(char c, register ZModem *info) { if (c == 'O') { if (++info->chrCount >= 2) return ZmDone ; } else info->chrCount = 0 ; return 0 ; } int Zmodem::DataChar(uchar c, register ZModem *info) { if (c == ZDLE) { info->escape = 1 ; return 0 ; } if (info->escape) { info->escape = 0 ; switch (c) { case ZCRCE: case ZCRCG: case ZCRCQ: case ZCRCW: qDebug("Start check crc: %x", c); info->PacketType = c ; info->crcCount = (info->DataType == ZBIN32) ? 4 : 2 ; if (info->DataType == ZBIN) info->crc = updcrc(c, info->crc) ; else info->crc = UPDC32(c, info->crc) ; return 0 ; case ZRUB0: c = 0177 ; break ; case ZRUB1: c = 0377 ; break ; default: c ^= 0100 ; break ; } } if (connectionType == 0) if (lastPullByte == 0x0d && c == 0x00) { lastPullByte = 0; return 0; } else if (lastPullByte == 0xff && c == 0xff) { lastPullByte = 0; return 0; } lastPullByte = c; switch (info->DataType) { /* TODO: are hex data packets ever used? */ case ZBIN: qDebug("we got zbin: %04x", info->crc); info->crc = updcrc(c, info->crc) ; if (info->crcCount == 0) info->buffer[info->chrCount++] = c ; else if (--info->crcCount == 0) { return ZDataReceived(info, (info->crc&0xffff) == 0) ; } break ; case ZBIN32: info->crc = UPDC32(c, info->crc) ; if (info->crcCount == 0) info->buffer[info->chrCount++] = c ; else if (--info->crcCount == 0) { qDebug("we got zbin32: %08x", info->crc); return ZDataReceived(info, info->crc == 0xdebb20e3) ; } break ; } return 0 ; } int Zmodem::HdrChar(uchar c, register ZModem *info) { int i ; int crc = 0 ; if (c == ZDLE) { info->escape = 1 ; return 0 ; } if (info->escape) { info->escape = 0 ; switch (c) { case ZRUB0: c = 0177 ; break ; case ZRUB1: c = 0377 ; break ; default: c ^= 0100 ; break ; } } if (info->chrCount == 0) { /* waiting for format */ switch (c) { case ZHEX: case ZBIN: case ZBIN32: info->DataType = c ; info->chrCount = 1 ; info->crc = (info->DataType != ZBIN32) ? 0 : 0xffffffffL ; memset(info->hdrData, 0, sizeof(info->hdrData)) ; break ; default: info->InputState = Idle ; info->chrCount = 0 ; return ZXmitHdrHex(ZNAK, zeros, info) ; } return 0 ; } switch (info->DataType) { /* hex header is 14 hex digits, cr, lf. Optional xon is ignored */ case ZHEX: if (info->chrCount <= 14 && !isxdigit(c)) { info->InputState = Idle ; info->chrCount = 0 ; return ZXmitHdrHex(ZNAK, zeros, info) ; } if (info->chrCount <= 14) { i = (info->chrCount - 1) / 2 ; info->hdrData[i] = rcvHex(info->hdrData[i], c) ; } if (info->chrCount == 16) { crc = 0 ; for (i = 0; i < 7; ++i) crc = updcrc(info->hdrData[i], crc) ; info->InputState = Idle ; info->chrCount = 0 ; if ((crc&0xffff) != 0) return ZXmitHdrHex(ZNAK, zeros, info) ; else return ZProtocol(info) ; } else ++info->chrCount ; break ; case ZBIN: /* binary header is type, 4 bytes data, 2 bytes CRC */ info->hdrData[info->chrCount-1] = c ; info->crc = updcrc(c, info->crc) ; if (++info->chrCount > 7) { info->InputState = Idle ; info->chrCount = 0 ; if ((crc&0xffff) != 0) return ZXmitHdrHex(ZNAK, zeros, info) ; else return ZProtocol(info) ; } break ; case ZBIN32: /* binary32 header is type, 4 bytes data, 4 bytes CRC */ info->hdrData[info->chrCount-1] = c ; info->crc = UPDC32(c, info->crc) ; if (++info->chrCount > 9) { info->InputState = Idle ; info->chrCount = 0 ; if (info->crc != 0xdebb20e3) /* see note below */ return ZXmitHdrHex(ZNAK, zeros, info) ; else return ZProtocol(info) ; } break ; } return 0 ; } int Zmodem::IdleChar(uchar c, register ZModem *info) { if (info->chrCount == 0) { if (c == ZPAD) ++info->chrCount ; else if (info->state == Sending && ++info->noiseCount > MaxNoise) info->waitflag = 1 ; else if (info->state == TStart && (c == 'C' || c == 'G' || c == NAK)) { /* switch to ymodem */ info->state = YTStart ; info->InputState = Ysend ; info->Protocol = YMODEM ; return YsendChar(c, info) ; } else ZIdleStr(&c, 1, info) ; } else { switch (c) { case ZPAD: ++info->chrCount ; break ; case ZDLE: info->InputState = Inhdr ; info->chrCount = 0 ; break ; default: while (--info->chrCount >= 0) ZIdleStr((uchar *)"*", 1, info) ; info->chrCount = 0 ; break ; } } return 0 ; } int Zmodem::YsendChar(char c, ZModem *info) { int err ; if (info->canCount >= 2) { ZStatus(RmtCancel, 0, NULL) ; return ZmErrCancel ; } switch (info->state) { case YTStart: /* wait for 'G', 'C' or NAK */ switch (c) { case 'G': /* streaming YModem */ case 'C': /* CRC YModem */ case NAK: /* checksum YModem */ info->PacketType = c ; return ZmDone ; default: return 0 ; } case YTFile: /* sent filename, waiting for ACK or NAK */ switch (c) { case NAK: /* resend */ case 'C': case 'G': ZStatus(DataErr, ++info->errCount, NULL) ; return YSendFilename(info) ; case ACK: info->state = YTDataWait ; default: return 0 ; } case YTDataWait: /* sent filename, waiting for G,C or NAK */ switch (c) { case NAK: case 'C': case 'G': info->chrCount = 0 ; if (info->PacketType == 'G') { /* send it all at once */ while (info->state == YTData) if ((err = YSendData(info))) return err ; return 0 ; } else return YSendData(info) ; default: return 0 ; } case YTData: /* sent data, waiting for ACK or NAK */ switch (c) { case 'C': case 'G': /* protocol failure, resend filename */ if (info->Protocol == YMODEM) { ZStatus(DataErr, ++info->errCount, NULL) ; info->state = YTFile ; rewind(info->file) ; return YSendFilename(info) ; } /* else XModem, treat it like a NAK */ case NAK: ZStatus(DataErr, ++info->errCount, NULL) ; return YXmitData(info->buffer + info->bufp, info->ylen, info) ; case ACK: info->offset += info->ylen ; info->bufp += info->ylen ; info->chrCount -= info->ylen ; ZStatus(SndByteCount, info->offset, NULL) ; return YSendData(info) ; default: return 0 ; } case YTEOF: /* sent EOF, waiting for ACK or NAK */ switch (c) { case NAK: return ZXmitStr(eotstr, 1, info) ; case ACK: info->state = info->Protocol == YMODEM ? YTStart : Done ; return ZmDone ; default: return 0 ; } case YTFin: /* sent Fin, waiting for ACK or NAK */ switch (c) { case NAK: return YSendFin(info) ; case ACK: return ZmDone ; default: return 0 ; } default: return 0 ; } } int Zmodem::ZProtocol(register ZModem *info) { register StateTable *table ; zmodemlog("received %s: %2.2x %2.2x %2.2x %2.2x = %lx\n", hdrnames[info->hdrData[0]], info->hdrData[1], info->hdrData[2], info->hdrData[3], info->hdrData[4], ZDec4(info->hdrData + 1)) ; /* Flags are sent in F3 F2 F1 F0 order. Data is sent in P0 P1 P2 P3 */ info->timeoutCount = 0 ; info->noiseCount = 0 ; // zmodemTimer->start(info->timeout*1000); table = tables[(int)info->state] ; while (table->type != 99 && table->type != info->hdrData[0]) ++table ; zmodemlog(" state %s => %s, iflush=%d, oflush=%d, call %x\n", sname(info), sname2(table->newstate), table->IFlush, table->OFlush, table->func) ; info->state = table->newstate ; if (table->IFlush) { info->rcvlen = 0 ; ZIFlush(info) ; } if (table->OFlush) ZOFlush(info) ; return (this->*(table->func))(info) ; } int Zmodem::ZDataReceived(register ZModem *info, int crcGood) { switch (info->state) { case RSinitWait: return GotSinitData(info, crcGood) ; case RFileName: return GotFileName(info, crcGood) ; case RData: return GotFileData(info, crcGood) ; case CommandData: return GotCommandData(info, crcGood) ; case StderrData: return GotStderrData(info, crcGood) ; default: return ZPF(info) ; } } int Zmodem::ZPF(ZModem *info) { info->waitflag = 1 ; /* pause any in-progress transmission */ ZStatus(ProtocolErr, info->hdrData[0], sname(info)) ; return 0 ; } int Zmodem::Ignore(ZModem *info) { return 0 ; } int Zmodem::AnswerChallenge(register ZModem *info) { return ZXmitHdrHex(ZACK, info->hdrData + 1, info) ; } int Zmodem::GotAbort(register ZModem *info) { ZStatus(RmtCancel, 0, NULL) ; return ZXmitHdrHex(ZFIN, zeros, info) ; } int Zmodem::GotCancel(ZModem *info) { return ZmErrCancel ; } int Zmodem::GotCommand(ZModem *info) { uchar rbuf[4] ; /* TODO: add command capability */ /// EPERM not defined???????? rbuf[0] = EPERM ; rbuf[1] = rbuf[2] = rbuf[3] = 0 ; return ZXmitHdrHex(ZCOMPL, rbuf, info) ; } int Zmodem::GotStderr(register ZModem *info) { info->InputState = Indata ; info->chrCount = 0 ; return 0 ; } int Zmodem::RetDone(ZModem *info) { return ZmDone ; } int Zmodem::GotCommandData(register ZModem *info , int crcGood) { /* TODO */ return 0 ; } int Zmodem::GotStderrData(register ZModem *info, int crcGood) { info->buffer[info->chrCount] = '\0' ; ZStatus(RemoteMessage, info->chrCount, (char *)info->buffer) ; return 0 ; } int Zmodem::GotFileName(ZModem *info, int crcGood) { info->InputState = Idle ; info->chrCount = 0 ; if (!crcGood) { zmodemlog("GotFileName[%s]: bad crc, send ZNAK\n", sname(info)) ; info->state = RStart ; return ZXmitHdrHex(ZNAK, zeros, info) ; } parseFileName(info, (char *)info->buffer) ; if ((info->f1 & ZMMASK) == ZMCRC) { info->state = RCrc ; return ZXmitHdrHex(ZCRC, zeros, info) ; } zmodemlog("GotFileName[%s]: good crc, call requestFile\n", sname(info)) ; info->state = RFile ; return requestFile(info, 0) ; } int Zmodem::ResendCrcReq(ZModem *info) { zmodemlog("ResendCrcReq[%s]: send ZCRC\n", sname(info)) ; return ZXmitHdrHex(ZCRC, zeros, info) ; } int Zmodem::GotSinitData(ZModem *info, int crcGood) { info->InputState = Idle ; info->chrCount = 0 ; info->state = RStart ; zmodemlog("GotSinitData[%s]: crcGood=%d\n", sname(info), crcGood) ; if (!crcGood) return ZXmitHdrHex(ZNAK, zeros, info) ; if (info->attn != NULL) free(info->attn) ; info->attn = NULL ; if (info->buffer[0] != '\0') info->attn = strdup((char *)info->buffer) ; return ZXmitHdrHex(ZACK, ZEnc4(SerialNo), info) ; } int Zmodem::ResendRpos(ZModem *info) { zmodemlog("ResendRpos[%s]: send ZRPOS(%ld)\n", sname(info), info->offset) ; return ZXmitHdrHex(ZRPOS, ZEnc4(info->offset), info) ; } int Zmodem::GotFileData(ZModem *info, int crcGood) { /* OK, now what? Fushing the buffers and executing the * attn sequence has likely chopped off the input stream * mid-packet. Now we switch to idle mode and treat all * incoming stuff like noise until we get a new valid * packet. */ if (!crcGood) { /* oh bugger, an error. */ zmodemlog( "GotFileData[%s]: bad crc, send ZRPOS(%ld), new state = RFile\n", sname(info), info->offset) ; ZStatus(DataErr, ++info->errCount, NULL) ; if (info->errCount > MaxErrs) { ZmodemAbort(info) ; return ZmDataErr ; } else { info->state = RFile ; info->InputState = Idle ; info->chrCount = 0 ; return fileError(info, ZRPOS, info->offset) ; } } if (ZWriteFile(info->buffer, info->chrCount, info->file, info)) { /* RED ALERT! Could not write the file. */ ZStatus(FileErr, zerrno, NULL) ; info->state = RFinish ; info->InputState = Idle ; info->chrCount = 0 ; return fileError(info, ZFERR, zerrno) ; } zmodemlog("GotFileData[%s]: %ld.%d,", sname(info), info->offset, info->chrCount) ; info->offset += info->chrCount ; ZStatus(RcvByteCount, info->offset, NULL) ; /* if this was the last data subpacket, leave data mode */ if (info->PacketType == ZCRCE || info->PacketType == ZCRCW) { zmodemlog(" ZCRCE|ZCRCW, new state RFile") ; info->state = RFile ; info->InputState = Idle ; info->chrCount = 0 ; } else { zmodemlog(" call dataSetup") ; (void) dataSetup(info) ; } if (info->PacketType == ZCRCQ || info->PacketType == ZCRCW) { zmodemlog(", send ZACK\n") ; return ZXmitHdrHex(ZACK, ZEnc4(info->offset), info) ; } else zmodemlog("\n") ; return 0 ; } int Zmodem::SendRinit(ZModem *info) { uchar dbuf[4] ; #ifdef COMMENT if (info->timeoutCount >= 5) /* TODO: switch to Ymodem */ #endif /* COMMENT */ transferstate = TransferStart; //transfer would be active, it must be set to false when transfer complete or abort zmodemlog("SendRinit[%s]: send ZRINIT\n", sname(info)) ; info->timeout = ResponseTime ; dbuf[0] = info->bufsize & 0xff ; dbuf[1] = (info->bufsize >> 8) & 0xff ; dbuf[2] = 0 ; dbuf[3] = info->zrinitflags ; return ZXmitHdrHex(ZRINIT, dbuf, info) ; } int Zmodem::SendMoreFileData(ZModem *info) { int type ; int qfull = 0 ; int err ; int len ; /* max # chars to send this packet */ long pending ; /* # of characters sent but not acknowledged */ /* ZCRCE: CRC next, frame ends, header follows * ZCRCG: CRC next, frame continues nonstop * ZCRCQ: CRC next, send ZACK, frame continues nonstop * ZCRCW: CRC next, send ZACK, frame ends, header follows */ if (info->interrupt) { /* Bugger, receiver sent an interrupt. Enter a wait state * and see what they want. Next header *should* be ZRPOS. */ info->state = SendWait ; info->timeout = 60 ; return 0 ; } /* Find out how many bytes we can transfer in the next packet */ len = info->packetsize ; pending = info->offset - info->lastOffset ; if (info->windowsize != 0 && info->windowsize - pending <= len) { len = info->windowsize - pending ; qfull = 1 ; } if (info->bufsize != 0 && info->bufsize - pending <= len) { len = info->bufsize - pending ; qfull = 1 ; } if (len == 0) { /* window still full, keep waiting */ info->state = SendWait ; info->timeout = 60 ; return 0 ; } /* OK, we can safely transmit 'len' bytes of data. Start reading * file until buffer is full. */ len -= 10 ; /* Pre-deduct 10 bytes for trailing CRC */ /* find out what kind of packet to send */ if (info->waitflag) { type = ZCRCW ; info->waitflag = 0 ; } #ifdef COMMENT else if (info->fileEof) type = ZCRCE ; #endif /* COMMENT */ else if (qfull) type = ZCRCW ; else switch (info->Streaming) { case Full: case Segmented: type = ZCRCG ; break ; case StrWindow: if ((info->windowCount += len) < info->windowsize / 4) type = ZCRCG ; else { type = ZCRCQ ; info->windowCount = 0 ; } break ; default: case SlidingWindow: type = ZCRCQ ; break ; } { int crc32 = info->crc32 ; int c = 0, c2, atSign = 0 ; ulong crc ; uchar *ptr = info->buffer ; crc = crc32 ? 0xffffffff : 0 ; /* read characters from file and put into buffer until buffer is * full or file is exhausted */ while (len > 0 && (c = getc(info->file)) != EOF) { if (!crc32) crc = updcrc(c, crc) ; else crc = UPDC32(c, crc) ; /* zmodem protocol requires that CAN(ZDLE), DLE, XON, XOFF and * a CR following '@' be escaped. In addition, I escape '^]' * to protect telnet, "~." to protect rlogin, and ESC for good * measure. */ c2 = c & 0177 ; if (c == ZDLE || c2 == 020 || c2 == 021 || c2 == 023 || c2 == 0177 || c2 == '\r' || c2 == '\n' || c2 == 033 || c2 == 035 || (c2 < 040 && info->escCtrl)) { *ptr++ = ZDLE ; if (c == 0177) *ptr = ZRUB0 ; else if (c == 0377) *ptr = ZRUB1 ; else *ptr = c ^ 0100 ; len -= 2 ; } else { *ptr = c ; --len ; } ++ptr ; atSign = c2 == '@' ; ++info->offset ; } /* if we've reached file end, a ZEOF header will follow. If * there's room in the outgoing buffer for it, end the packet * with ZCRCE and append the ZEOF header. If there isn't room, * we'll have to do a ZCRCW */ if ((info->fileEof = (c == EOF))) { if (qfull || (info->bufsize != 0 && len < 24)) type = ZCRCW ; else type = ZCRCE ; } *ptr++ = ZDLE ; if (!crc32) crc = updcrc(type, crc) ; else crc = UPDC32(type, crc) ; *ptr++ = type ; if (!crc32) { crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; ptr = putZdle(ptr, (crc >> 8) & 0xff, info) ; ptr = putZdle(ptr, crc & 0xff, info) ; } else { crc = ~crc ; for (len = 4; --len >= 0; crc >>= 8) ptr = putZdle(ptr, crc & 0xff, info) ; } len = ptr - info->buffer ; } ZStatus(SndByteCount, info->offset, NULL) ; if ((err = ZXmitStr(info->buffer, len, info))) return err ; #ifdef COMMENT if ((err = ZXmitData(ZBIN, len, uchar(type), info->buffer, info))) return err ; #endif /* COMMENT */ /* finally, do we want to wait after this packet? */ switch (type) { case ZCRCE: info->state = SendEof ; info->timeout = 60 ; return ZXmitHdrHex(ZEOF, ZEnc4(info->offset), info) ; case ZCRCW: info->state = info->fileEof ? SendDone : SendWait ; info->timeout = 60 ; break ; default: info->state = Sending ; info->timeout = 0 ; break ; } #ifdef COMMENT if (info->fileEof) { /* Yes, file is done, send EOF and wait */ info->state = SendEof ; info->timeout = 60 ; return ZXmitHdrHex(ZEOF, ZEnc4(info->offset), info) ; } else if (type == ZCRCW) { info->state = SendWait ; info->timeout = 60 ; } else { info->state = Sending ; info->timeout = 0 ; } #endif /* COMMENT */ return 0 ; } uint Zmodem::rcvHex(uint i, char c) { if (c <= '9') c -= '0' ; else if (c <= 'F') c -= 'A' -10 ; else c -= 'a' -10 ; return (i << 4) + c ; } int Zmodem::dataSetup(register ZModem *info) { info->InputState = Indata ; info->chrCount = 0 ; info->crcCount = 0 ; info->crc = (info->DataType != ZBIN32) ? 0 : 0xffffffffL ; return 0 ; } int Zmodem::ZWriteFile(uchar *buffer, int len, FILE *file, ZModem *) { return fwrite(buffer, 1, len, file) == len ? 0 : ZmErrSys ;; } int Zmodem::ZCloseFile(ZModem *info) { //to be completed fclose(info->file) ; return 0; } void Zmodem::ZFlowControl(int onoff, ZModem *info) { //to be completed } int Zmodem::GotSinit(ZModem *info) { zmodemlog("GotSinit[%s]: call dataSetup\n", sname(info)) ; info->zsinitflags = info->hdrData[4] ; info->escCtrl = info->zsinitflags & TESCCTL ; info->escHibit = info->zsinitflags & TESC8 ; ZFlowControl(1, info) ; return dataSetup(info) ; } int Zmodem::GotFile(ZModem *info) { zmodemlog("GotFile[%s]: call dataSetup\n", sname(info)) ; info->errCount = 0 ; info->f0 = info->hdrData[4] ; info->f1 = info->hdrData[3] ; info->f2 = info->hdrData[2] ; info->f3 = info->hdrData[1] ; return dataSetup(info) ; } int Zmodem::GotFin(ZModem *info) { int i; zmodemlog("GotFin[%s]: send ZFIN\n", sname(info)) ; info->InputState = Finish ; info->chrCount = 0 ; if (info->filename != NULL) free(info->filename) ; i = ZXmitHdrHex(ZFIN, zeros, info) ; ZmodemReset(info); transferstate = TransferStop; // transfer complete return i; } int Zmodem::GotData(ZModem *info) { int err ; zmodemlog("GotData[%s]:\n", sname(info)) ; if (ZDec4(info->hdrData + 1) != info->offset) { if (info->attn != NULL && (err = ZAttn(info)) != 0) return err ; zmodemlog(" bad, send ZRPOS(%ld)\n", info->offset); return ZXmitHdrHex(ZRPOS, ZEnc4(info->offset), info) ; } /* Let's do it! */ zmodemlog(" call dataSetup\n"); return dataSetup(info) ; } int Zmodem::GotEof(ZModem *info) { zmodemlog("GotEof[%s]: offset=%ld\n", sname(info), info->offset) ; if (ZDec4(info->hdrData + 1) != info->offset) { zmodemlog("zdec4(info->hdrdata+1)=%ld\n", ZDec4(info->hdrData + 1)); zmodemlog(" bad length, state = RFile\n") ; info->state = RFile ; return 0 ; /* it was probably spurious */ } /* TODO: if we can't close the file, send a ZFERR */ ZCloseFile(info) ; info->file = NULL ; ZStatus(FileEnd, 0, info->filename) ; if (info->filename != NULL) { free(info->filename) ; info->filename = NULL ; } return SendRinit(info) ; } int Zmodem::GotFreecnt(ZModem *info) { /* TODO: how do we find free space on system? */ return ZXmitHdrHex(ZACK, ZEnc4(0xffffffff), info) ; } int Zmodem::GotFileCrc(ZModem *info) { zmodemlog("GotFileCrc[%s]: call requestFile\n", sname(info)) ; return requestFile(info, ZDec4(info->hdrData + 1)) ; } int Zmodem::requestFile(ZModem *info, ulong crc) { info->file = ZOpenFile((char *)info->buffer, crc, info) ; if (info->file == NULL) { zmodemlog("requestFile[%s]: send ZSKIP\n", sname(info)) ; info->state = RStart ; ZStatus(FileSkip, 0, info->filename) ; return ZXmitHdrHex(ZSKIP, zeros, info) ; } else { zmodemlog("requestFile[%s]: send ZRPOS(%ld)\n", sname(info), info->offset) ; info->offset = info->f0 == ZCRESUM ? ftell(info->file) : 0 ; info->state = RFile ; ZStatus(FileBegin, info->len, info->filename) ; return ZXmitHdrHex(ZRPOS, ZEnc4(info->offset), info) ; } } void Zmodem::parseFileName(ZModem *info, char *fileinfo) { char *ptr ; int serial = 0 ; info->len = info->mode = info->filesRem = info->bytesRem = info->fileType = 0 ; ptr = fileinfo + strlen(fileinfo) + 1 ; if (info->filename != NULL) free(info->filename) ; info->filename = strdup(fileinfo) ; sscanf(ptr, "%d %lo %o %o %d %d %d", &info->len, &info->date, &info->mode, &serial, &info->filesRem, &info->bytesRem, &info->fileType) ; } int Zmodem::fileError(ZModem *info, int type, int data) { int err ; info->InputState = Idle ; info->chrCount = 0 ; if (info->attn != NULL && (err = ZAttn(info)) != 0) return err ; return ZXmitHdrHex(type, ZEnc4(data), info) ; } int Zmodem::ProcessPacket(ZModem *info) { int idx = (uchar) info->buffer[0] ; int idxc = (uchar) info->buffer[1] ; int crc0, crc1 ; int err ; info->state = YRDataWait ; if (idxc != 255 - idx) { ZStatus(DataErr, ++info->errCount, NULL) ; return rejectPacket(info) ; } if (idx == (info->packetCount % 256)) /* quietly ignore dup */ return acceptPacket(info) ; if (idx != (info->packetCount + 1) % 256) { /* out of sequence */ (void) ZXmitStr(CanStr, 2, info) ; return ZmErrSequence ; } crc0 = (uchar)info->buffer[info->pktLen-2] << 8 | (uchar)info->buffer[info->pktLen-1] ; crc1 = calcCrc(info->buffer + 2, info->pktLen - 4) ; if (crc0 != crc1) { ZStatus(DataErr, ++info->errCount, NULL) ; return rejectPacket(info) ; } ++info->packetCount ; if (info->packetCount == 0) { /* packet 0 is filename */ if (info->buffer[2] == '\0') { /* null filename is FIN */ (void) acceptPacket(info) ; return ZmDone ; } parseFileName(info, (char *)info->buffer + 2) ; info->file = ZOpenFile(info->filename, 0, info) ; if (info->file == NULL) { (void) ZXmitStr(CanStr, 2, info) ; return ZmErrCantOpen ; } if ((err = acceptPacket(info)) != 0) return err ; return ZXmitStr((uchar *)"C", 1, info) ; } if (ZWriteFile(info->buffer + 2, info->pktLen - 4, info->file, info)) { ZStatus(FileErr, zerrno, NULL) ; (void) ZXmitStr(CanStr, 2, info) ; return ZmErrSys ; } info->offset += info->pktLen - 4 ; ZStatus(RcvByteCount, info->offset, NULL) ; (void) acceptPacket(info) ; return 0 ; } int Zmodem::rejectPacket(ZModem *info) { info->timeout = 10 ; return ZXmitStr(NakStr, 1, info) ; } int Zmodem::acceptPacket(ZModem *info) { info->state = YRDataWait ; info->timeout = 10 ; return ZXmitStr(AckStr, 1, info) ; } int Zmodem::calcCrc(uchar *str, int len) { int crc = 0 ; while (--len >= 0) crc = updcrc(*str++, crc) ; crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; return crc & 0xffff ; } char * Zmodem::strdup(const char *str) { char *rval ; int len = strlen(str) + 1 ; rval = (char *)malloc(len) ; strcpy(rval, str) ; return rval ; } int Zmodem::ZXmitData(int format, int len, uchar term, uchar *data, ZModem *info) { uchar *ptr = info->buffer ; uint crc ; if (format == ZBIN && info->crc32) format = ZBIN32 ; zmodemlog("ZXmiteData: fmt=%c, len=%d, term=%c\n", format, len, term) ; crc = (format == ZBIN) ? 0 : 0xffffffff ; while (--len >= 0) { if (format == ZBIN) crc = updcrc(*data, crc) ; else crc = UPDC32(*data, crc) ; ptr = putZdle(ptr, *data++, info) ; } *ptr++ = ZDLE ; if (format == ZBIN) crc = updcrc(term, crc) ; else crc = UPDC32(term, crc) ; *ptr++ = term ; if (format == ZBIN) { crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; ptr = putZdle(ptr, (crc >> 8) & 0xff, info) ; ptr = putZdle(ptr, crc & 0xff, info) ; } else { crc = ~crc ; for (len = 4; --len >= 0; crc >>= 8) ptr = putZdle(ptr, crc & 0xff, info) ; } return ZXmitStr(info->buffer, ptr - info->buffer, info) ; } int Zmodem::YXmitData(uchar *buffer, int len, ZModem *info) { uchar hdr[3] ; uchar trail[2] ; ulong crc = 0 ; int i, err ; hdr[0] = len == 1024 ? STX : SOH ; hdr[1] = info->packetCount ; hdr[2] = ~hdr[1] ; if ((err = ZXmitStr(hdr, 3, info)) || (err = ZXmitStr(buffer, len, info))) return err ; if (info->PacketType == NAK) { /* checksum */ for (i = 0; i < len; ++i) crc += buffer[i] ; trail[0] = crc % 256 ; return ZXmitStr(trail, 1, info) ; } else { for (i = 0; i < len; ++i) crc = updcrc(buffer[i], crc) ; crc = updcrc(0, crc) ; crc = updcrc(0, crc) ; trail[0] = crc / 256 ; trail[1] = crc % 256 ; return ZXmitStr(trail, 2, info) ; } } int Zmodem::YSendFilename(ZModem *info) { int i, len ; uchar obuf[1024] ; uchar *ptr = obuf ; info->state = info->PacketType != 'G' ? YTFile : YTDataWait ; info->packetCount = 0 ; info->offset = 0 ; i = strlen(info->rfilename) ; memcpy(ptr, info->rfilename, i + 1) ; ptr += i + 1 ; sprintf((char *)ptr, "%d %lo %o 0", info->len, info->date, info->mode); ptr += strlen((char *)ptr) ; *ptr++ = '\0' ; /* pad out to 128 bytes or 1024 bytes */ i = ptr - obuf ; len = i > 128 ? 1024 : 128 ; for (; i < len; ++i) *ptr++ = '\0' ; return YXmitData(obuf, len, info) ; } int Zmodem::YSendData(ZModem *info) { int i ; /* are there characters still in the read buffer? */ if (info->chrCount <= 0) { info->bufp = 0 ; info->chrCount = fread(info->buffer, 1, info->packetsize, info->file); info->fileEof = feof(info->file) ; } if (info->chrCount <= 0) { fclose(info->file) ; info->state = YTEOF ; return ZXmitStr(eotstr, 1, info) ; } /* pad out to 128 bytes if needed */ if (info->chrCount < 128) { i = 128 - info->chrCount ; memset(info->buffer + info->bufp + info->chrCount, 0x1a, i) ; info->chrCount = 128 ; } info->ylen = info->chrCount >= 1024 ? 1024 : 128 ; ++info->packetCount ; info->state = YTData ; return YXmitData(info->buffer + info->bufp, info->ylen, info) ; } int Zmodem::YSendFin(ZModem *info) { uchar obuf[128] ; info->state = YTFin ; info->packetCount = 0 ; memset(obuf, 0, 128) ; return YXmitData(obuf, 128, info) ; } int Zmodem::sendFilename(ZModem *info) { int err ; int i ; uchar obuf[2048] ; uchar *ptr = obuf ; info->state = FileWait ; if ((err = ZXmitHdr(ZFILE, ZBIN, info->fileFlags, info))) return err ; i = strlen(info->rfilename) ; memcpy(ptr, info->rfilename, i + 1) ; ptr += i + 1 ; sprintf((char *)ptr, "%d %lo %o 0 %d %d 0", info->len, info->date, info->mode, info->filesRem, info->bytesRem) ; ptr += strlen((char *)ptr) ; *ptr++ = '\0' ; return ZXmitData(ZBIN, ptr - obuf, ZCRCW, obuf, info) ; } int Zmodem::GotRinit(ZModem *info) { if (strFileList.count() == 0) return ZmodemTFinish(info); info->bufsize = info->hdrData[1] + info->hdrData[2] * 256 ; info->zrinitflags = info->hdrData[4] + info->hdrData[3] * 256 ; info->crc32 = info->zrinitflags & CANFC32 ; info->escCtrl = info->zrinitflags & ESCCTL ; info->escHibit = info->zrinitflags & ESC8 ; /* Full streaming: If receiver can overlap I/O, and if * the sender can sample the reverse channel without hanging, * and the receiver has not specified a buffer size, then we * can simply blast away with ZCRCG packets. If the receiver * detects an error, it sends an attn sequence and a new ZRPOS * header to restart the file where the error occurred. * * [note that zmodem8.doc does not define how much noise is * required to trigger a ZCRCW packet. We arbitrarily choose * 64 bytes] * * If 'windowsize' is nonzero, and the receiver can do full * duplex, ZCRCQ packets are sent instead of ZCRCG, to keep track * of the number of characters in the queue. If the queue fills * up, we pause and wait for a ZACK. * * * Full Streaming with Reverse Interrupt: If sender cannot * sample the input stream, then we define an Attn sequence * that will be used to interrupt transmission. * * * Full Streaming with Sliding Window: If sender cannot * sample input stream or respond to Attn signal, we send * several ZCRCQ packets until we're sure the receiver must * have sent back at least one ZACK. Then we stop sending and * read that ZACK. Then we send one more packet and so on. * * * Segmented Streaming: If receiver cannot overlap I/O or can't do * full duplex and has specified a maximum receive buffer size, * whenever the buffer size is reached, we send a ZCRCW packet. * * TODO: what if receiver can't overlap, but hasn't set a buffer * size? * * ZCRCE: CRC next, frame ends, header follows * ZCRCG: CRC next, frame continues nonstop * ZCRCQ: CRC next, send ZACK, frame continues nonstop * ZCRCW: CRC next, send ZACK, frame ends, header follows */ transferstate = TransferStart; ZFlowControl(1, info) ; if ((info->zrinitflags & (CANFDX | CANOVIO)) == (CANFDX | CANOVIO) && (SendSample || SendAttn) && info->bufsize == 0) { if (info->windowsize == 0) { info->Streaming = Full ; } else { info->Streaming = StrWindow ; } } else if ((info->zrinitflags & (CANFDX | CANOVIO)) == (CANFDX | CANOVIO) && info->bufsize == 0) { info->Streaming = SlidingWindow ; } else { info->Streaming = Segmented ; } // get filenames to transfer zmodemlog("GotRinit[%s]\n", sname(info)) ; if (AlwaysSinit || info->zsinitflags != 0 || info->attn != NULL) SendZSInit(info) ; itFile = strFileList.begin(); QFileInfo fi(*itFile); qDebug("files to be transfered %d", strFileList.count()); char *filename = strdup(fi.absoluteFilePath().toLatin1()); char *rfilename = strdup(fi.fileName().toLatin1()); ZmodemTFile(filename, rfilename, 0, 0, 0, 0, strFileList.count(), fi.size(), info); strFileList.erase(itFile); return ZmDone; } int Zmodem::SendZSInit(ZModem *info) { int err ; //char *at = (info->attn != NULL) ? info->attn : "" ; char * at; if (info->attn != NULL) at = info->attn; else at = ""; uchar fbuf[4] ; /* TODO: zmodem8.doc states: "If the ZSINIT header specifies * ESCCTL or ESC8, a HEX header is used, and the receiver * activates the specified ESC modes before reading the following * data subpacket." What does that mean? */ zmodemlog("SendZSInit[%s]\n", sname(info)) ; info->state = TInit ; fbuf[0] = fbuf[1] = fbuf[2] = 0 ; fbuf[3] = info->zsinitflags ; if ((err = ZXmitHdr(ZSINIT, ZBIN, fbuf, info)) || (err = ZXmitData(ZBIN, strlen(at) + 1, ZCRCW, (uchar *)at, info))) { return err ; } return 0 ; } int Zmodem::SendFileCrc(ZModem *info) { ulong crc ; crc = FileCrc(info->filename) ; zmodemlog("SendFileCrc[%s]: %lx\n", sname(info), crc) ; return ZXmitHdrHex(ZCRC, ZEnc4(crc), info) ; } int Zmodem::GotSendAck(ZModem *info) { ulong offset ; offset = ZDec4(info->hdrData + 1) ; if (offset > info->lastOffset) info->lastOffset = offset ; zmodemlog("GotSendAck[%s]: %lx\n", sname(info), info->offset) ; return 0 ; /* DONT send more data, that will happen * later anyway */ } int Zmodem::GotSendDoneAck(ZModem *info) { ulong offset ; offset = ZDec4(info->hdrData + 1) ; if (offset > info->lastOffset) info->lastOffset = offset ; zmodemlog("GotSendDoneAck[%s]: %ld\n", sname(info), info->offset) ; info->state = SendEof ; info->timeout = 60 ; return ZXmitHdrHex(ZEOF, ZEnc4(info->offset), info) ; } int Zmodem::GotSendNak(ZModem *info) { info->offset = info->zrposOffset ; fseek(info->file, info->offset, 0) ; /* TODO: what if fseek fails? Send EOF? */ zmodemlog("GotSendNak[%s]: %ld\n", sname(info), info->offset) ; return SendMoreFileData(info) ; } int Zmodem::GotSendWaitAck(ZModem *info) { ulong offset ; int err ; offset = ZDec4(info->hdrData + 1) ; qDebug("last=%lx, now=%lx", info->lastOffset, offset); if (offset > info->lastOffset) info->lastOffset = offset ; //receiver return -1 without setting this flag, kingson 00:07 14-07-04 info->waitflag = 1 ; zmodemlog("GotSendWaitAck[%s]\n", sname(info), offset) ; if ((err = ZXmitHdr(ZDATA, ZBIN, info->hdrData + 1, info))) return err ; return SendMoreFileData(info) ; } int Zmodem::SkipFile(ZModem *info) { zmodemlog("SkipFile[%s]\n", sname(info)) ; ZStatus(FileEnd, 0, info->rfilename); fclose(info->file) ; // stupid SMTH doesnt send further command, kick // lets send files in the list info-> state = TStart; return GotRinit(info); } int Zmodem::GotSendPos(ZModem *info) { ZStatus(DataErr, ++info->errCount, NULL) ; info->waitflag = 1 ; /* next pkt should wait, to resync */ qDebug("GotSendPos, offset=%lx", info->offset); zmodemlog("GotSendPos[%s] %lx\n", sname(info), info->offset) ; return startFileData(info) ; } int Zmodem::SendFileData(ZModem *info) { info->waitflag = 0 ; return startFileData(info) ; } int Zmodem::ResendEof(ZModem *info) { return ZXmitHdrHex(ZEOF, ZEnc4(info->offset), info) ; } int Zmodem::OverAndOut(ZModem *info) { zmodemlog("OverAndOut[%s]\n", sname(info)) ; ZXmitStr((uchar *)"OO", 2, info) ; transferstate = TransferStop; // transfer complete ZmodemReset(info); //Tranfer complete, zmodem return to receive state return ZmDone ; } int Zmodem::startFileData(ZModem *info) { int err ; info->offset = info->lastOffset = info->zrposOffset = ZDec4(info->hdrData + 1) ; fseek(info->file, info->offset, 0) ; /* TODO: what if fseek fails? Send EOF? */ zmodemlog("startFileData[%s]: %lx\n", sname(info), info->offset) ; if ((err = ZXmitHdr(ZDATA, ZBIN, ZEnc4(info->offset), info))) return err ; return SendMoreFileData(info) ; } uchar * Zmodem::putHex(uchar *ptr, uchar c) { *ptr++ = hexChars[(c>>4)&0xf] ; *ptr++ = hexChars[c&0xf] ; return ptr ; } int Zmodem::ZmodemReset(ZModem * info) { zmodemlog("\nZmodemReset\n"); ZmodemRInit(info); return 0; } void Zmodem::zmodemlog(const char *fmt, ...) { // only for debug #ifdef QTERM_DEBUG va_list ap; struct timeval tv ; struct tm *tm ; static int do_ts = 1 ; zmodemlogfile = fopen("zmodem.log", "a"); if (zmodemlogfile == NULL) return ; if (do_ts) { gettimeofday(&tv, NULL) ; tm = localtime(&tv.tv_sec) ; fprintf(zmodemlogfile, "%2.2d:%2.2d:%2.2d.%2.2ld: ", tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec / 10000) ; } do_ts = strchr(fmt, '\n') != NULL ; va_start(ap, fmt) ; vfprintf(zmodemlogfile, fmt, ap) ; va_end(ap) ; fclose(zmodemlogfile); #endif } void Zmodem::zmodemCancel() { ZmodemAbort(&info); } void Zmodem::setFileList(const QStringList & fileList) { strFileList = fileList; } } // namespace QTerm #include qterm-0.7.3/src/qtermzmodem.h000066400000000000000000000477351332762052600162030ustar00rootroot00000000000000#ifndef QTERMZMODEM_H #define QTERMZMODEM_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include class QTextCodec; namespace QTerm { /* PARAMETERS * * The following #defines control the behavior of the Zmodem * package. Note that these may be replaced with variables * if you like. For example, "#define DoInitRZ" may be replaced * with "extern int DoInitRz" to use a global variable, or with * "#define DoInitRZ (info->doInitRz)" to use a variable you * add to the ZModem structure. * * It is assumed that the compiler is good enough to optimize * "if( 0 )" and "if( 1 )" cases. If not, you may wish to modify * the source code to use #ifdef instead. */ #define DoInitRZ 1 /* send initial "rz\r" when transmitting */ #define AllowCommand 0 /* allow remote end to execute commands */ #define SendSample 1 /* sender can sample reverse channel */ #define SendAttn 1 /* sender can be interrupted with Attn signal */ #define ResponseTime 10 /* reasonable response time for sender to * respond to requests from receiver */ #define SerialNo 1 /* receiver serial # */ #define MaxNoise 64 /* max "noise" characters before transmission * pauses */ #define MaxErrs 30 /* Max receive errors before cancel */ #define AlwaysSinit 1 /* always send ZSINIT header, even if not * needed, this makes protocol more robust */ #define SendOnly 0 /* compiles smaller version for send only */ #define RcvOnly 0 /* compiles smaller version for receive only */ enum enum_InputState {Idle, Padding, Inhdr, Indata, Finish, Ysend, Yrcv} ; enum enum_Protocol {XMODEM, YMODEM, ZMODEM}; enum enum_Streaming {Full, StrWindow, SlidingWindow, Segmented}; enum enum_transferstate {NoTransfer, WaitingForReply, TransferStart, TransferStop}; /* Internal State */ typedef enum zmstate { /* receive */ RStart, /* sent RINIT, waiting for ZFILE or SINIT */ RSinitWait, /* got SINIT, waiting for data */ RFileName, /* got ZFILE, waiting for filename & info */ RCrc, /* got filename, want crc too */ RFile, /* got filename, ready to read */ RData, /* reading data */ RDataErr, /* encountered error, ignoring input */ RFinish, /* sent ZFIN, waiting for 'OO' */ /* transmit */ TStart, /* waiting for INIT frame from other end */ TInit, /* received INIT, sent INIT, waiting for ZACK */ FileWait, /* sent file header, waiting for ZRPOS */ CrcWait, /* sent file crc, waiting for ZRPOS */ Sending, /* sending data subpackets, ready for int */ SendWait, /* waiting for ZACK */ SendDone, /* file finished, need to send EOF */ SendEof, /* sent EOF, waiting for ZACK */ TFinish, /* sent ZFIN, waiting for ZFIN */ /* general */ CommandData, /* waiting for command data */ CommandWait, /* waiting for command to execute */ StderrData, /* waiting for stderr data */ Done, /* x/ymodem transmit */ YTStart, /* waiting for 'G', 'C' or NAK */ YTFile, /* sent filename, waiting for ACK */ YTDataWait, /* ready to send data, waiting for 'C' */ YTData, /* sent data, waiting for ACK */ YTEOF, /* sent eof, waiting for ACK */ YTFin, /* sent null filename, waiting for ACK */ /* x/ymodem receive */ YRStart, /* sent 'C', waiting for filename */ YRDataWait, /* received filename, waiting for data */ YRData, /* receiving filename or data */ YREOF /* received first EOT, waiting for 2nd */ } ZMState ; typedef struct { int ifd ; /* input fd, for use by caller's routines */ int ofd ; /* output fd, for use by caller's routines */ FILE *file ; /* file being transfered */ int zrinitflags ; /* receiver capabilities, see below */ int zsinitflags ; /* sender capabilities, see below */ char *attn ; /* attention string, see below */ int timeout ; /* timeout value, in seconds */ int bufsize ; /* receive buffer size, bytes */ int packetsize ; /* preferred transmit packet size */ int windowsize ; /* max window size */ /* file attributes: read-only */ int filesRem, bytesRem ; uchar f0, f1, f2, f3 ; /* file flags */ int len, mode, fileType ; /* file flags */ ulong date ; /* file date */ /* From here down, internal to Zmodem package */ ZMState state ; /* protocol internal state */ char *filename ; /* filename */ char *rfilename ; /* remote filename */ int crc32 ; /* use 32-bit crc */ int pktLen ; /* length of this packet */ int DataType ; /* input data type */ int PacketType ; /* type of this packet */ int rcvlen ; int chrCount ; /* chars received in current header/buffer */ int crcCount ; /* crc characters remaining at end of buffer */ int canCount ; /* how many CAN chars received? */ int noiseCount ; /* how many noise chars received? */ int errorFlush ; /* ignore incoming data because of error */ uchar *buffer ; /* data buffer */ ulong offset ; /* file offset */ ulong lastOffset ; /* last acknowledged offset */ ulong zrposOffset ; /* last offset specified w/zrpos */ int ylen, bufp ; /* len,location of last Ymodem packet */ int fileEof ; /* file eof reached */ int packetCount ; /* # packets received */ int errCount ; /* how many data errors? */ int timeoutCount ; /* how many times timed out? */ int windowCount ; /* how much data sent in current window */ int atSign ; /* last char was '@' */ int lastCR ; /* last char was CR */ int escCtrl ; /* other end requests ctrl chars be escaped */ int escHibit ; /* other end requests hi bit be escaped */ int escape ; /* next character is escaped */ int interrupt ; /* received attention signal */ int waitflag ; /* next send should wait */ /* parser state */ // enum enum_InputState {Idle, Padding, Inhdr, Indata, Finish, Ysend, Yrcv} InputState ; enum_InputState InputState; // enum enum_Protocol {XMODEM, YMODEM, ZMODEM} Protocol ; enum_Protocol Protocol; uchar hdrData[9] ; /* header type and data */ uchar fileFlags[4] ; /* file xfer flags */ ulong crc ; /* crc of incoming header/data */ // enum enum_Streaming {Full, StrWindow, SlidingWindow, Segmented} Streaming ; enum_Streaming Streaming; } ZModem ; /* ZRINIT flags. Describe receiver capabilities */ #define CANFDX 1 /* Rx is Full duplex */ #define CANOVIO 2 /* Rx can overlap I/O */ #define CANBRK 4 /* Rx can send a break */ #define CANCRY 010 /* Rx can decrypt */ #define CANLZW 020 /* Rx can uncompress */ #define CANFC32 040 /* Rx can use 32-bit crc */ #define ESCCTL 0100 /* Rx needs control chars escaped */ #define ESC8 0200 /* Rx needs 8th bit escaped. */ /* ZSINIT flags. Describe sender capabilities */ #define TESCCTL 0100 /* Tx needs control chars escaped */ #define TESC8 0200 /* Tx needs 8th bit escaped. */ /* ZFILE transfer flags */ /* F0 */ #define ZCBIN 1 /* binary transfer */ #define ZCNL 2 /* convert NL to local eol convention */ #define ZCRESUM 3 /* resume interrupted file xfer, or append to a growing file. */ /* F1 */ #define ZMNEWL 1 /* transfer if source newer or longer */ #define ZMCRC 2 /* transfer if different CRC or length */ #define ZMAPND 3 /* append to existing file, if any */ #define ZMCLOB 4 /* replace existing file */ #define ZMNEW 5 /* transfer if source is newer */ #define ZMDIFF 6 /* transfer if dates or lengths different */ #define ZMPROT 7 /* protect: transfer only if dest doesn't exist */ #define ZMCHNG 8 /* change filename if destination exists */ #define ZMMASK 037 /* mask for above. */ #define ZMSKNOLOC 0200 /* skip if not present at Rx end */ /* F2 */ #define ZTLZW 1 /* lzw compression */ #define ZTRLE 3 /* run-length encoding */ /* F3 */ #define ZCANVHDR 1 /* variable headers ok */ #define ZRWOVR 4 /* byte position for receive window override/256 */ #define ZXSPARS 64 /* encoding for sparse file ops. */ /* ATTN string special characters. All other characters sent verbose */ #define ATTNBRK '\335' /* send break signal */ #define ATTNPSE '\336' /* pause for one second */ /* ZStatus() types */ #define RcvByteCount 0 /* value is # bytes received */ #define SndByteCount 1 /* value is # bytes sent */ #define RcvTimeout 2 /* receiver did not respond, aborting */ #define SndTimeout 3 /* value is # of consecutive send timeouts */ #define RmtCancel 4 /* remote end has cancelled */ #define ProtocolErr 5 /* protocol error has occurred, val=hdr */ #define RemoteMessage 6 /* message from remote end */ #define DataErr 7 /* data error, val=error count */ #define FileErr 8 /* error writing file, val=errno */ #define FileBegin 9 /* file transfer begins, str=name */ #define FileEnd 10 /* file transfer ends, str=name */ #define FileSkip 11 /* file being skipped, str=name */ /* error code definitions [O] means link still open */ #define ZmDone -1 /* done */ #define ZmErrInt -2 /* internal error */ #define ZmErrSys -3 /* system error, see errno */ #define ZmErrNotOpen -4 /* communication channel not open */ #define ZmErrCantOpen -5 /* can't open file, see errno [O] */ #define ZmFileTooLong -6 /* remote filename too long [O] */ #define ZmFileCantWrite -7 /* could not write file, see errno */ #define ZmDataErr -8 /* too many data errors */ #define ZmErrInitTo -10 /* transmitter failed to respond to init req. */ #define ZmErrSequence -11 /* packet received out of sequence */ #define ZmErrCancel -12 /* cancelled by remote end */ #define ZmErrRcvTo -13 /* remote receiver timed out during transfer */ #define ZmErrSndTo -14 /* remote sender timed out during transfer */ #define ZmErrCmdTo -15 /* remote command timed out */ /* ZModem character definitions */ #define ZDLE 030 /* zmodem escape is CAN */ #define ZPAD '*' /* pad */ #define ZBIN 'A' /* introduces 16-bit crc binary header */ #define ZHEX 'B' /* introduces 16-bit crc hex header */ #define ZBIN32 'C' /* introduces 32-bit crc binary header */ #define ZBINR32 'D' /* introduces RLE packed binary frame w/32-bit crc */ #define ZVBIN 'a' /* alternate ZBIN */ #define ZVHEX 'b' /* alternate ZHEX */ #define ZVBIN32 'c' /* alternate ZBIN32 */ #define ZVBINR32 'd' /* alternate ZBINR32 */ #define ZRESC 0177 /* RLE flag/escape character */ /* ZModem header type codes */ #define ZRQINIT 0 /* request receive init */ #define ZRINIT 1 /* receive init */ #define ZSINIT 2 /* send init sequence, define Attn */ #define ZACK 3 /* ACK */ #define ZFILE 4 /* file name, from sender */ #define ZSKIP 5 /* skip file command, from receiver */ #define ZNAK 6 /* last packet was garbled */ #define ZABORT 7 /* abort */ #define ZFIN 8 /* finish session */ #define ZRPOS 9 /* resume file from this position, from receiver */ #define ZDATA 10 /* data packets to follow, from sender */ #define ZEOF 11 /* end of file, from sender */ #define ZFERR 12 /* fatal i/o error, from receiver */ #define ZCRC 13 /* request for file crc, from receiver */ #define ZCHALLENGE 14 /* "send this number back to me", from receiver */ #define ZCOMPL 15 /* request is complete */ #define ZCAN 16 /* other end cancelled with CAN-CAN-CAN-CAN-CAN */ #define ZFREECNT 17 /* request for free bytes on filesystem */ #define ZCOMMAND 18 /* command, from sending program */ #define ZSTDERR 19 /* output this message to stderr */ /* ZDLE escape sequences */ #define ZCRCE 'h' /* CRC next, frame ends, header follows */ #define ZCRCG 'i' /* CRC next, frame continues nonstop */ #define ZCRCQ 'j' /* CRC next, send ZACK, frame continues nonstop */ #define ZCRCW 'k' /* CRC next, send ZACK, frame ends */ #define ZRUB0 'l' /* translate to 0177 */ #define ZRUB1 'm' /* translate to 0377 */ /* ascii definitions */ #define SOH 1 /* ^A */ #define STX 2 /* ^B */ #define EOT 4 /* ^D */ #define ACK 6 /* ^F */ #define DLE 16 /* ^P */ #define XON 17 /* ^Q */ #define XOFF 19 /* ^S */ #define NAK 21 /* ^U */ #define SYN 22 /* ^V */ #define CAN 24 /* ^X */ /* state table entry. There is one row of the table per * possible state. Each row is a row of all reasonable * inputs for this state. The entries are sorted so that * the most common inputs occur first, to reduce search time * Unexpected input is reported and ignored, as it might be * caused by echo or something. * * Extra ZRINIT headers are the receiver trying to resync. */ class Zmodem; class Telnet; typedef int (Zmodem::*ActionFunc)(ZModem *); typedef struct { int type ; /* frame type */ // int (*func)(ZModem *) ; /* transition function */ ActionFunc func; int IFlush ; /* flag: flush input first */ int OFlush ; /* flag: flush output first */ ZMState newstate ; /* new state. May be overridden by func */ } StateTable ; static uchar zeros[4] = {0, 0, 0, 0} ; static char hexChars[] = "0123456789abcdef" ; static uchar AckStr[1] = {ACK} ; static uchar NakStr[1] = {NAK} ; static uchar CanStr[2] = {CAN, CAN} ; static uchar eotstr[1] = {EOT} ; class Zmodem: public QObject { Q_OBJECT public: Zmodem(QObject * parent, QObject *netinterface, QTextCodec * codec, int type); ~Zmodem(); //Member Function /* zmodem-supplied functions: */ int ZmodemTInit(ZModem *info) ; int ZmodemTFile(char *file, char *rmtname, uint f0, uint f1, uint f2, uint f3, int filesRem, int bytesRem, ZModem *info) ; int ZmodemTFinish(ZModem *info) ; int ZmodemAbort(ZModem *info) ; int ZmodemRInit(ZModem *info) ; int ZmodemRcv(uchar *str, int len, ZModem *info) ; int ZmodemAttention(ZModem *info) ; int ZmodemReset(ZModem *info); int YmodemTInit(ZModem *info) ; int XmodemTInit(ZModem *info) ; int YmodemRInit(ZModem *info) ; int XmodemRInit(ZModem *info) ; ulong FileCrc(char *name) ; const char *sname(ZModem *) ; const char *sname2(ZMState) ; /* caller-supplied functions: */ int ZXmitChr(uchar c, ZModem *info) ; int ZXmitStr(uchar *str, int len, ZModem *info) ; void ZIFlush(ZModem *info) ; void ZOFlush(ZModem *info) ; int ZAttn(ZModem *info) ; void ZStatus(int type, int value, const char *status) ; FILE *ZOpenFile(char *name, ulong crc, ZModem *info) ; int ZWriteFile(uchar *buffer, int len, FILE *, ZModem *); int ZCloseFile(ZModem *info) ; void ZFlowControl(int onoff, ZModem *info) ; /* end caller-supplied functions */ int ZXmitHdr(int type, int format, uchar data[4], ZModem *info) ; int ZXmitHdrHex(int type, uchar data[4], ZModem *info) ; int ZXmitHdrBin(int type, uchar data[4], ZModem *info) ; int ZXmitHdrBin32(int type, uchar data[4], ZModem *info) ; uchar *putZdle(uchar *ptr, uchar c, ZModem *info) ; uchar *putHex(uchar *ptr, uchar c); uchar *ZEnc4(ulong n) ; ulong ZDec4(uchar buf[4]) ; int YrcvChar(char c, register ZModem *info) ; int YrcvTimeout(register ZModem *info) ; void ZIdleStr(uchar *buffer, int len, ZModem *info) ; /* LEXICAL BOX: handle characters received from remote end. * These may be header, data or noise. * * This section is a finite state machine for parsing headers * and reading input data. The info->chrCount field is effectively * the state variable. */ int FinishChar(char c, register ZModem *info) ; int DataChar(uchar c, register ZModem *info) ; int HdrChar(uchar c, register ZModem *info) ; int IdleChar(uchar c, register ZModem *info) ; int YsendChar(char c, ZModem *info) ; int ZPF(ZModem *info) ; int Ignore(ZModem *info) ; int AnswerChallenge(register ZModem *info) ; int GotAbort(register ZModem *info) ; int GotCancel(ZModem *info) ; int GotCommand(ZModem *info) ; int GotStderr(register ZModem *info) ; int RetDone(ZModem *info) ; int GotCommandData(register ZModem *info, int crcGood) ; int GotStderrData(register ZModem *info, int crcGood) ; int GotFileName(ZModem *info, int crcGood) ; int ResendCrcReq(ZModem *info) ; int GotSinitData(ZModem *info, int crcGood) ; int ResendRpos(ZModem *info) ; int GotFileData(ZModem *info, int crcGood) ; int SendRinit(ZModem *info) ; int GotSinit(ZModem *info) ; int GotFile(ZModem *info) ; int GotFin(ZModem *info) ; int GotData(ZModem *info) ; int GotEof(ZModem *info) ; int GotFreecnt(ZModem *info) ; int GotFileCrc(ZModem *info) ; int GotRinit(ZModem *) ; int SendZSInit(ZModem *) ; int SendFileCrc(ZModem *) ; int GotSendAck(ZModem *) ; int GotSendDoneAck(ZModem *) ; int GotSendNak(ZModem *) ; int GotSendWaitAck(ZModem *) ; int SkipFile(ZModem *) ; int GotSendPos(ZModem *) ; int requestFile(ZModem *info, ulong crc); void parseFileName(ZModem *info, char *fileinfo); int fileError(ZModem *info, int type, int data); int ProcessPacket(ZModem *info); int rejectPacket(ZModem *info); int acceptPacket(ZModem *info); int calcCrc(uchar *str, int len); char *strdup(const char *str); int SendMoreFileData(ZModem *info) ; uint rcvHex(uint i, char c); int ZDataReceived(register ZModem *info, int crcGood); int dataSetup(register ZModem *info); int ZProtocol(register ZModem *info); int ZXmitData(int, int, uchar, uchar *data, ZModem *) ; int YXmitData(uchar *, int, ZModem *) ; int YSendFilename(ZModem *) ; int YSendData(ZModem *) ; int YSendFin(ZModem *) ; int sendFilename(ZModem *) ; int SendFileData(ZModem *) ; int ResendEof(ZModem *) ; int OverAndOut(ZModem *) ; int startFileData(ZModem *info); void zmodemlog(const char *fmt, ...); // interface function // all not completed void transferTimeOut(void *); void upload(char *); void uploadNext(char *); void transferFinish(); void xferCancel(); /* data received from remote, pass it to Zmodem funcs */ void transferSendData(char *, int); void TransferCancel(); // // end Member Function //Member #if 1 static StateTable RStartOps[] ; static StateTable RSinitWaitOps[] ; static StateTable RFileNameOps[] ; static StateTable RCrcOps[] ; static StateTable RFileOps[] ; static StateTable RDataOps[] ; static StateTable RFinishOps[] ; static StateTable TStartOps[] ; static StateTable TInitOps[] ; static StateTable FileWaitOps[] ; static StateTable CrcWaitOps[] ; static StateTable SendingOps[] ; static StateTable SendDoneOps[] ; static StateTable SendWaitOps[] ; static StateTable SendEofOps[] ; static StateTable TFinishOps[] ; static StateTable CommandDataOps[]; static StateTable CommandWaitOps[]; static StateTable StderrDataOps[]; static StateTable DoneOps[]; static StateTable *tables[]; static const char *hdrnames[]; #endif #if 0 StateTable RStartOps[] ; StateTable RSinitWaitOps[] ; StateTable RFileNameOps[] ; StateTable RCrcOps[] ; StateTable RFileOps[] ; StateTable RDataOps[] ; StateTable RFinishOps[] ; StateTable TStartOps[] ; StateTable TInitOps[] ; StateTable FileWaitOps[] ; StateTable CrcWaitOps[] ; StateTable SendingOps[] ; StateTable SendDoneOps[] ; StateTable SendWaitOps[] ; StateTable SendEofOps[] ; StateTable TFinishOps[] ; StateTable CommandDataOps[]; StateTable CommandWaitOps[]; StateTable StderrDataOps[]; StateTable DoneOps[]; StateTable *tables[]; char *hdrnames[]; #endif // the network connection interface, e.g. telnet or ssh // QObject *netif; Telnet *m_pTelnet; // Dialog // QDialog *zmodemDialog, uploadListDialog; bool sending; enum_transferstate transferstate; ZModem info; // connection type, e.g. telnet or ssh , 0=telnet, 1=ssh int connectionType; // Timer QTimer *zmodemTimer; //log file FILE *zmodemlogfile; int zerrno; uchar lastPullByte; QStringList strFileList; QStringList::Iterator itFile; // end Member signals: void ZmodemState(int, int, const QString&); public slots: void zmodemCancel(); int ZmodemTimeout() ; void setFileList(const QStringList & fileList); private: QTextCodec * m_codec; }; } // namespace QTerm #endif qterm-0.7.3/src/quickdialog.cpp000066400000000000000000000201011332762052600164400ustar00rootroot00000000000000/**************************************************************************** ** Form implementation generated from reading ui file 'quickldialog.ui' ** ** Created: Sat Dec 14 14:25:01 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "quickdialog.h" #include "qtermconfig.h" #include "qtermparam.h" #include "addrdialog.h" #include "qtermglobal.h" #include #include #include #include #include namespace QTerm { /* * Constructs a quickDialog which is a child of 'parent', with the * name 'name' and widget flags set to 'f'. * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ quickDialog::quickDialog(QWidget* parent, Qt::WindowFlags fl) : QDialog(parent, fl) { ui.setupUi(this); //ui.addPushButton->setIcon(QPixmap(Global::instance()->pathLib()+"pic/addr.png")); //ui.addPushButton->setToolTip(tr("Add To AddressBook" )); ui.connectPushButton->setDefault(true); connectSlots(); pConf = Global::instance()->fileCfg(); loadHistory(); restoreGeometry(Global::instance()->loadGeometry("Quick")); } /* * Destroys the object and frees any allocated resources */ quickDialog::~quickDialog() { Global::instance()->saveGeometry("Quick",saveGeometry()); } void quickDialog::closeEvent(QCloseEvent *) { pConf->save(); reject(); } void quickDialog::loadHistory() { QString strTmp = pConf->getItemValue("quick list", "num").toString(); QString strSection; for (int i = 0; i < strTmp.toInt(); i++) { strSection = QString("quick %1").arg(i); ui.historyComboBox->addItem(pConf->getItemValue(strSection, "addr").toString()); } if (strTmp != "0") { ui.historyComboBox->setCurrentIndex(0); listChanged(0); } } void quickDialog::connectSlots() { connect(ui.historyComboBox, SIGNAL(activated(int)), this, SLOT(listChanged(int))); connect(ui.addPushButton, SIGNAL(clicked()), this, SLOT(addAddr())); connect(ui.deletePushButton, SIGNAL(clicked()), this, SLOT(deleteAddr())); connect(ui.advPushButton, SIGNAL(clicked()), this, SLOT(advOption())); connect(ui.connectPushButton, SIGNAL(clicked()), this, SLOT(connectIt())); connect(ui.closePushButton, SIGNAL(clicked()), this, SLOT(close())); } void quickDialog::listChanged(int index) { QString strTmp = pConf->getItemValue("quick list", "num").toString(); if (strTmp == "0") return; QString strSection = QString("quick %1").arg(index); // cstrSection.sprintf("quick %d", index); ui.addrLineEdit->setText(pConf->getItemValue(strSection, "addr").toString()); ui.portSpinBox->setValue(pConf->getItemValue(strSection, "port").toInt()); ui.protocolComboBox->setCurrentIndex(1); int protocolType = pConf->getItemValue(strSection, "protocol").toInt(); ui.protocolComboBox->setCurrentIndex(protocolType); } void quickDialog::addAddr() { // Update param param.m_mapParam["name"] = ui.addrLineEdit->text(); param.m_mapParam["addr"] = ui.addrLineEdit->text(); param.m_mapParam["port"] = ui.portSpinBox->value(); param.m_mapParam["protocol"] = ui.protocolComboBox->currentIndex(); // Create new site and reference in top level QDomDocument doc = Global::instance()->addrXml(); QString uuid = QUuid::createUuid().toString(); Global::instance()->saveAddress(doc,uuid,param); // Create site reference QDomElement newSiteRef = doc.createElement("addsite"); newSiteRef.setAttribute("uuid", uuid); doc.documentElement().insertBefore(newSiteRef,QDomNode()); // Save Global::instance()->saveAddressXml(doc); } void quickDialog::deleteAddr() { int n = ui.historyComboBox->currentIndex(); QString strTmp = pConf->getItemValue("quick list", "num").toString(); int num = strTmp.toInt(); if (num != 0 && n != -1) { QString strSection = QString("quick %1").arg(n); // cstrSection.sprintf("quick %d", n); if (!pConf->deleteSection(strSection)) { qDebug("Failed to delete %d", n); return; } ui.historyComboBox->removeItem(n); // change the name after this for (int i = n + 1; i < num; i++) { strTmp = QString("quick %1").arg(i); strSection = QString("quick %1").arg(i - 1); pConf->renameSection(strTmp, strSection); } strTmp = pConf->getItemValue("quick list", "num").toString(); strTmp.setNum(qMax(0, strTmp.toInt() - 1)); pConf->setItemValue("quick list", "num", strTmp); // update if (num == 1) { ui.addrLineEdit->setText(""); ui.portSpinBox->setValue(0); } else { ui.historyComboBox->setCurrentIndex(qMin(n, num - 2)); listChanged(qMin(n, num - 2)); } } } void quickDialog::advOption() { addrDialog set(this, true); param.m_mapParam["name"] = ui.addrLineEdit->text(); param.m_mapParam["addr"] = ui.addrLineEdit->text(); param.m_mapParam["port"] = ui.portSpinBox->value(); param.m_mapParam["protocol"] = ui.protocolComboBox->currentIndex(); set.param = param; set.updateData(false); if (set.exec() == 1) { param = set.param; ui.addrLineEdit->setText(param.m_mapParam["addr"].toString()); ui.portSpinBox->setValue(param.m_mapParam["port"].toInt()); ui.protocolComboBox->setCurrentIndex(param.m_mapParam["protocol"].toInt()); } } void quickDialog::connectIt() { if (ui.addrLineEdit->text().isEmpty()) { QMessageBox mb("QTerm", tr("Address can not be blank."), QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Default, 0, 0); mb.exec(); return; } QString strTmp = pConf->getItemValue("quick list", "num").toString(); int num = strTmp.toInt(); bool bExist = false; int index; // check if it is already there QString strSection; for (int i = 0; i < num; i++) { strSection = QString("quick %1").arg(i); strTmp = pConf->getItemValue(strSection, "addr").toString(); if (strTmp == ui.addrLineEdit->text()) { bExist = true; index = i; break; } strTmp = pConf->getItemValue(strSection, "port").toString(); if (ui.portSpinBox->value() != strTmp.toInt()) { bExist = true; index = i; break; } strTmp = pConf->getItemValue(strSection, "protocol").toString(); if (ui.protocolComboBox->currentIndex() != strTmp.toInt()) { bExist = true; index = i; break; } } // append it if (!bExist) { strSection = QString("quick %1").arg(num); pConf->setItemValue(strSection, "addr", ui.addrLineEdit->text()); pConf->setItemValue(strSection, "port", ui.portSpinBox->value()); pConf->setItemValue(strSection, "protocol", ui.protocolComboBox->currentIndex()); strTmp.setNum(num + 1); pConf->setItemValue("quick list", "num", strTmp); index = num; } // set another name first to avoid duplicate strSection = QString("quick %1").arg(index); strTmp = QString("quick %1").arg(num + 2); pConf->renameSection(strSection, strTmp); // shift the current select to the first for (int j = index - 1; j >= 0; j--) { strSection = QString("quick %1").arg(j); strTmp = QString("quick %1").arg(j + 1); pConf->renameSection(strSection, strTmp); } // set it back to 0 strSection = QString("quick %1").arg(num + 2); strTmp = QString("quick %1").arg(0); pConf->renameSection(strSection, strTmp); param.m_mapParam["name"] = ui.addrLineEdit->text(); param.m_mapParam["addr"] = ui.addrLineEdit->text(); param.m_mapParam["port"] = ui.portSpinBox->value(); param.m_mapParam["protocol"] = ui.protocolComboBox->currentIndex(); pConf->save(); done(1); } void quickDialog::close() { pConf->save(); done(0); } } // namespace QTerm #include qterm-0.7.3/src/quickdialog.h000066400000000000000000000020611332762052600161120ustar00rootroot00000000000000/**************************************************************************** ** Form interface generated from reading ui file 'quicklogin.ui' ** ** Created: Sat Dec 14 14:25:50 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef QUICKDIALOG_H #define QUICKDIALOG_H #include "qtermparam.h" #include "ui_quickdialog.h" //Added by qt3to4: //#include class QCloseEvent; namespace QTerm { class Config; class quickDialog : public QDialog { Q_OBJECT public: quickDialog(QWidget* parent = 0, Qt::WindowFlags fl = 0); ~quickDialog(); Param param; protected slots: void listChanged(int); void addAddr(); void deleteAddr(); void advOption(); void connectIt(); void close(); protected: void closeEvent(QCloseEvent *); void connectSlots(); void loadHistory(); Config * pConf; private: Ui::quickDialog ui; }; } // namespace QTerm #endif // QUICKDIALOG_H qterm-0.7.3/src/scheme/000077500000000000000000000000001332762052600147125ustar00rootroot00000000000000qterm-0.7.3/src/scheme/CMakeLists.txt000066400000000000000000000003261332762052600174530ustar00rootroot00000000000000file(GLOB schemeFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.scheme") file(COPY ${schemeFiles} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) if (NOT APPLE) install(FILES ${schemeFiles} DESTINATION share/qterm/scheme) endif() qterm-0.7.3/src/scheme/Linux.scheme000066400000000000000000000004551332762052600172030ustar00rootroot00000000000000[General] version=1.11 [scheme] title=Linux [color] color0=#000000 color1=#b21818 color2=#18b218 color3=#b26818 color4=#1818b2 color5=#b218b2 color6=#18b2b2 color7=#b2b2b2 color8=#686868 color9=#ff5454 color10=#54ff54 color11=#ffff54 color12=#5454ff color13=#ff54ff color14=#54ffff color15=#f9f9f9 qterm-0.7.3/src/scheme/Softness.scheme000066400000000000000000000004601332762052600177040ustar00rootroot00000000000000[General] version=1.11 [scheme] title=Softness [color] color0=#141414 color1=#783c3c color2=#3c783c color3=#78783c color4=#3c3c78 color5=#783c3c color6=#3c7878 color7=#c0c0c0 color8=#808080 color9=#c86464 color10=#64c864 color11=#c8c864 color12=#6464c8 color13=#c864c8 color14=#64c8c8 color15=#e5e5e5 qterm-0.7.3/src/scheme/VIM.scheme000066400000000000000000000004531332762052600165350ustar00rootroot00000000000000[General] version=1.11 [scheme] title=VIM [color] color0=#000000 color1=#c00000 color2=#008000 color3=#808000 color4=#0000c0 color5=#c000c0 color6=#008080 color7=#c0c0c0 color8=#808080 color9=#ff6060 color10=#00ff00 color11=#ffff00 color12=#8080ff color13=#ff40ff color14=#00ffff color15=#ffffff qterm-0.7.3/src/scheme/XTerm.scheme000066400000000000000000000004551332762052600171430ustar00rootroot00000000000000[General] version=1.11 [scheme] title=XTerm [color] color0=#000000 color1=#cd0000 color2=#00cd00 color3=#cdcd00 color4=#0000cd color5=#cd00cd color6=#00cdcd color7=#e5e5e5 color8=#4d4d4d color9=#ff0000 color10=#00ff00 color11=#ffff00 color12=#0000ff color13=#ff00ff color14=#00ffff color15=#ffffff qterm-0.7.3/src/scheme/default.scheme000066400000000000000000000004571332762052600175320ustar00rootroot00000000000000[General] version=1.11 [scheme] title=default [color] color0=#000000 color1=#800000 color2=#008000 color3=#808000 color4=#000080 color5=#800080 color6=#008080 color7=#c0c0c0 color8=#a0a0a4 color9=#ff0000 color10=#00ff00 color11=#ffff00 color12=#0000ff color13=#ff00ff color14=#00ffff color15=#ffffff qterm-0.7.3/src/schemedialog.cpp000066400000000000000000000213241332762052600166000ustar00rootroot00000000000000 #include "schemedialog.h" #include "qtermconfig.h" #include "qtermglobal.h" // #include #include #include #include #include namespace QTerm { schemeDialog::schemeDialog(QWidget* parent, Qt::WindowFlags fl) : QDialog(parent, fl) { ui.setupUi(this); nLastItem = -1; bModified = false; connectSlots(); fileList = loadSchemeList(); updateList(); restoreGeometry(Global::instance()->loadGeometry("Scheme")); } schemeDialog::~schemeDialog() { Global::instance()->saveGeometry("Scheme",saveGeometry()); } void schemeDialog::setScheme(const QString& strSchemeFile) { if (!QFile::exists(strSchemeFile)) return; int n = fileList.indexOf(strSchemeFile); ui.nameListWidget->setCurrentRow(n); } QString schemeDialog::getScheme() { return strCurrentScheme; } void schemeDialog::connectSlots() { connect(ui.saveButton, SIGNAL(clicked()), this, SLOT(saveScheme())); connect(ui.removeButton, SIGNAL(clicked()), this, SLOT(removeScheme())); connect(ui.okButton, SIGNAL(clicked()), this, SLOT(onOK())); connect(ui.cancelButton, SIGNAL(clicked()), this, SLOT(onCancel())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetScheme())); connect(ui.clr0Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr1Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr2Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr3Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr4Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr5Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr6Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr7Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr8Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr9Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr10Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr11Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr12Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr13Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr14Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.clr15Button, SIGNAL(clicked()), this, SLOT(buttonClicked())); connect(ui.nameListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(nameChanged(int))); connect(ui.titleLineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(textChanged(const QString&))); } QStringList schemeDialog::loadSchemeList() { QDir dir; QFileInfoList lstFile; QStringList schemeList; dir.setNameFilters(QStringList("*.scheme")); #if !defined(_OS_WIN32_) && !defined(Q_OS_WIN32) dir.setPath(Global::instance()->pathCfg() + "/scheme"); lstFile = dir.entryInfoList(); //if( lstFile.count()!=0 ) { foreach(QFileInfo fi, lstFile) { schemeList.append(fi.absoluteFilePath()); } } #endif dir.setPath(Global::instance()->pathLib() + "scheme"); lstFile = dir.entryInfoList(); //if(lstFile != NULL) { foreach(QFileInfo fi, lstFile) { schemeList.append(fi.absoluteFilePath()); } } return schemeList; } void schemeDialog::updateList() { foreach (QString file, fileList) { Config *pConf = new Config(file); ui.nameListWidget->addItem(pConf->getItemValue("scheme", "title").toString()); delete pConf; } } void schemeDialog::loadScheme(const QString& strSchemeFile) { Config *pConf = new Config(strSchemeFile); strCurrentScheme = strSchemeFile; title = pConf->getItemValue("scheme", "title").toString(); for (int i = 0; i < 16; i++) { QString colorName = QString("color%1").arg(i); schemeColor[i].setNamedColor(pConf->getItemValue("color", colorName).toString()); } delete pConf; updateView(); } void schemeDialog::saveNumScheme(int n) { // FIXME: ?, and there is more below QStringList::Iterator it = fileList.begin(); while (n--) it++; title = ui.titleLineEdit->text(); #if defined(_OS_WIN32_) || defined(Q_OS_WIN32) QDir dir(Global::instance()->pathLib()); QString strSchemeFile = dir.absolutePath() + "/scheme/" + title + ".scheme"; #else // save it to $HOME/.qterm/scheme/ with filename=title QFileInfo fi(*it); QString strSchemeFile = QDir::homePath() + "/.qterm/scheme/" + title + ".scheme"; #endif // create a new scheme if title changed if (strSchemeFile != strCurrentScheme) { ui.nameListWidget->addItem(title); fileList.append(strSchemeFile); } strCurrentScheme = strSchemeFile; Config *pConf = new Config(strCurrentScheme); pConf->setItemValue("scheme", "title", title); for (int i = 0; i < 16; i++) { QString colorName = QString("color%1").arg(i); pConf->setItemValue("color", colorName, schemeColor[i].name()); } pConf->save(strSchemeFile); delete pConf; bModified = false; } void schemeDialog::setBackgroundColor(QPushButton * widget, const QColor & color) { // QPalette palette; // palette.setColor(widget->backgroundRole(), color); // widget->setPalette(palette); QPixmap pixmap(widget->size()); pixmap.fill(color); QIcon icon(pixmap); widget->setIconSize(widget->size()); widget->setIcon(icon); } void schemeDialog::updateView() { // title ui.titleLineEdit->setText(title); for (int i = 0; i < 16; i++) { QString buttonName = QString("clr%1Button").arg(i); setBackgroundColor(findChild(buttonName), schemeColor[i]); } // load from file, nothing changed bModified = false; } void schemeDialog::buttonClicked() { QPushButton * button = (QPushButton*)sender(); QRegExp rx("\\d+"); if (rx.indexIn(button->objectName()) == -1) { qDebug("object name error"); return; } int index = rx.cap().toInt(); QColor color = QColorDialog::getColor(schemeColor[index]); if (color.isValid() == true) { setBackgroundColor(button,color); schemeColor[index] = color; bModified = true; } } void schemeDialog::nameChanged(int item) { if (bModified) { QMessageBox mb("QTerm", "Setting changed, do you want to save?", QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape , 0, this); if (mb.exec() == QMessageBox::Yes) { if (nLastItem != -1) { saveNumScheme(nLastItem); } } } QStringList::Iterator it = fileList.begin(); int n = item; //nameListBox->index(item); nLastItem = n; while (n--) it++; loadScheme(*it); } void schemeDialog::saveScheme() { // get current scheme file name int n = ui.nameListWidget->currentRow(); saveNumScheme(n); } void schemeDialog::resetScheme() { loadScheme(strCurrentScheme); } void schemeDialog::removeScheme() { QFileInfo fi(strCurrentScheme); if (fi.isWritable()) { QFile::remove(strCurrentScheme); QStringList::Iterator it = fileList.begin(); int n = ui.nameListWidget->currentRow(); ui.nameListWidget->takeItem(n); while (n--) it++; fileList.erase(it); } else { QMessageBox::warning(this, "Error", "This is a system scheme. Permission Denied"); } } void schemeDialog::onOK() { if (bModified) { QMessageBox mb("QTerm", "Setting changed, do you want to save?", QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape , 0, this); if (mb.exec() == QMessageBox::Yes) { int n = ui.nameListWidget->currentRow(); saveNumScheme(n); } } done(1); } void schemeDialog::onCancel() { if (bModified) { QMessageBox mb("QTerm", "Setting changed, do you want to save?", QMessageBox::Warning, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape , 0, this); if (mb.exec() == QMessageBox::Yes) { int n = ui.nameListWidget->currentRow(); saveNumScheme(n); } } done(0); } void schemeDialog::textChanged(const QString&) { bModified = true; } } // namespace QTerm #include qterm-0.7.3/src/schemedialog.h000066400000000000000000000020271332762052600162440ustar00rootroot00000000000000#ifndef SCHEMADIALOG_H #define SCHEMADIALOG_H #include "ui_schemedialog.h" namespace QTerm { class schemeDialog : public QDialog { Q_OBJECT public: schemeDialog(QWidget* parent = 0, Qt::WindowFlags fl = 0); ~schemeDialog(); void setScheme(const QString&); QString getScheme(); static QStringList loadSchemeList(); protected: QColor schemeColor[16]; QString title; QStringList fileList; QString strCurrentScheme; bool bModified; int nLastItem; private: Ui::schemeDialog ui; protected: void connectSlots(); void updateList(); void loadScheme(const QString& strSchemeFile); void saveNumScheme(int n = -1); void updateView(); void setBackgroundColor(QPushButton * widget, const QColor & color); protected slots: void buttonClicked(); void nameChanged(int); void saveScheme(); void resetScheme(); void removeScheme(); void onOK(); void onCancel(); void textChanged(const QString&); }; } // namespace QTerm #endif // SCHEMADIALOG_H qterm-0.7.3/src/scripthelper.cpp000066400000000000000000000166301332762052600166640ustar00rootroot00000000000000#include "qterm.h" #include "scripthelper.h" #include "qtermwindow.h" #include "qtermbuffer.h" #include "qtermscreen.h" #include "qtermframe.h" #include "qtermbbs.h" #include "qtermtextline.h" #include "qtermzmodem.h" #include "qtermglobal.h" #include #include #include #include #include namespace QTerm { ScriptHelper::ScriptHelper(Window * parent, QScriptEngine * engine) :QObject(parent),m_accepted(false),m_qtbindingsAvailable(true),m_scriptList(),m_popupActionList(),m_urlActionList() { m_window = parent; m_scriptEngine = engine; m_scriptEngine->installTranslatorFunctions(); #if QT_VERSION >= 0x050000 m_qtbindingsAvailable = false; #else QStringList allowedBindings; allowedBindings << "qt.core" << "qt.gui" << "qt.sql" << "qt.xml" << "qt.uitools" << "qt.network" << "qt.webkit"; foreach( QString binding, allowedBindings ) { QScriptValue error = engine->importExtension( binding ); if( error.isUndefined() ) { // undefined indiciates success continue; } qDebug() << "Extension" << binding << "not found:" << error.toString(); qDebug() << "Available extensions:" << engine->availableExtensions(); qDebug() << "Some script functions will be disabled, considering install QtScriptBindings!"; m_qtbindingsAvailable = false; } if (m_qtbindingsAvailable) qDebug() << "QtScriptBindings loaded, enjoy scripting!"; #endif } ScriptHelper::~ScriptHelper() { } bool ScriptHelper::accepted() const { return m_accepted; } bool ScriptHelper::qtbindingsAvailable() const { return m_qtbindingsAvailable; } void ScriptHelper::setAccepted(bool accepted) { m_accepted = accepted; } int ScriptHelper::caretX() { return m_window->m_pBuffer->caret().x(); } int ScriptHelper::caretY() { return m_window->m_pBuffer->caret().y(); } int ScriptHelper::charX(int x, int y) { QPoint pt = m_window->screen()->mapToChar(QPoint(x,y)); return pt.x(); } int ScriptHelper::charY(int x, int y) { QPoint pt = m_window->screen()->mapToChar(QPoint(x,y)); return pt.y() - m_window->m_pBBS->getScreenStart(); } int ScriptHelper::posX() { return m_window->mousePos().x(); } int ScriptHelper::posY() { return m_window->mousePos().y(); } int ScriptHelper::columns() { return m_window->m_pBuffer->columns(); } int ScriptHelper::rows() { return m_window->m_pBuffer->line(); } QString ScriptHelper::getUrl() { return m_window->m_pBBS->getUrl(); } QString ScriptHelper::getIP() { return m_window->m_pBBS->getIP(); } bool ScriptHelper::isConnected() { return m_window->isConnected(); } void ScriptHelper::reconnect() { m_window->reconnect(); } void ScriptHelper::disconnect() { m_window->disconnect(); } void ScriptHelper::buzz() { m_window->m_pFrame->buzz(); } void ScriptHelper::sendString(const QString & string) { m_window->inputHandle(string); } void ScriptHelper::sendParsedString(const QString & string) { m_window->sendParsedString(string); } void ScriptHelper::osdMessage(const QString & message, int type, int duration) { m_window->osdMessage(message, type, duration); } void ScriptHelper::showMessage(const QString & title, const QString & message, int duration) { m_window->showMessage(title, message, duration); } void ScriptHelper::cancelZmodem() { m_window->zmodem()->zmodemCancel(); } void ScriptHelper::setZmodemFileList(const QStringList & fileList) { m_window->zmodem()->setFileList(fileList); } QScriptValue ScriptHelper::getLine(int line) { TextLine * obj = m_window->m_pBuffer->screen(line); return m_scriptEngine->newQObject(obj); } QScriptValue ScriptHelper::window() { return m_scriptEngine->newQObject(m_window); } bool ScriptHelper::addPopupMenu(QString id, QString menuTitle, QString icon) { if (m_popupActionList.contains(id)) { qDebug("action with the same name is already registered"); return false; } QAction * action = new QAction(menuTitle, this); action->setObjectName(id); QMenu * popupMenu = m_window->popupMenu(); popupMenu->addAction(action); QScriptValue newItem = m_scriptEngine->newQObject( action ); m_scriptEngine->globalObject().property( "QTerm" ).setProperty( id, newItem ); m_popupActionList << id; return true; } bool ScriptHelper::addUrlMenu(QString id, QString menuTitle, QString icon) { if (m_urlActionList.contains(id)) { qDebug("action with the same name is already registered"); return false; } QAction * action = new QAction(menuTitle, this); action->setObjectName(id); QMenu * urlMenu = m_window->urlMenu(); urlMenu->addAction(action); QScriptValue newItem = m_scriptEngine->newQObject( action ); m_scriptEngine->globalObject().property( "QTerm" ).setProperty( id, newItem ); m_urlActionList << id; return true; } void ScriptHelper::addPopupSeparator() { m_window->popupMenu()->addSeparator(); } void ScriptHelper::addUrlSeparator() { m_window->urlMenu()->addSeparator(); } void ScriptHelper::addImportedScript(const QString & filename) { m_scriptList << filename; } bool ScriptHelper::isScriptLoaded(const QString & filename) { return m_scriptList.contains(filename); } QString ScriptHelper::globalPath() { return Global::instance()->pathLib(); } QString ScriptHelper::localPath() { return Global::instance()->pathCfg(); } QString ScriptHelper::findFile(const QString & filename) { QFileInfo fileInfo(filename); if (!fileInfo.isAbsolute()) { fileInfo = QFileInfo(localPath() + "scripts/" + filename); if (!fileInfo.exists()) { fileInfo = QFileInfo(globalPath() + "scripts/" + filename); } } if (!fileInfo.exists()) { qDebug() << "Script file " << filename << "not found"; return ""; } return fileInfo.absoluteFilePath(); } void ScriptHelper::loadScript(const QString & filename) { QString scriptFile = findFile(filename); if (filename.isEmpty()) { return; } if (isScriptLoaded(scriptFile)) { qDebug() << "Script file " << scriptFile << "is already loaded"; return; } loadScriptFile(scriptFile); qDebug() << "load script file: " << filename; addImportedScript(scriptFile); } bool ScriptHelper::loadExtension(const QString & extension) { QScriptValue ret = m_scriptEngine->importExtension(extension); if (ret.isError()) { osdMessage("Fail to load extension: "+extension); qDebug() << "Fail to load extension: " << extension; return false; } return true; } void ScriptHelper::openUrl(const QString & url) { Global::instance()->openUrl(url); } QString ScriptHelper::getSelectedText(bool rect, bool color, const QString & escape) { return m_window->m_pBuffer->getSelectText(rect,color,escape); } QString ScriptHelper::version() { return QTERM_VERSION; } void ScriptHelper::loadScriptFile(const QString & filename) { QFile file(filename); file.open(QIODevice::ReadOnly); QString scripts = QString::fromUtf8(file.readAll()); file.close(); if (!m_scriptEngine->canEvaluate(scripts)) qDebug() << "Cannot evaluate this script"; m_scriptEngine->evaluate(scripts, filename); if (m_scriptEngine->hasUncaughtException()) { qDebug() << "Exception: " << m_scriptEngine->uncaughtExceptionBacktrace(); } } } // namespace QTerm #include qterm-0.7.3/src/scripthelper.h000066400000000000000000000043531332762052600163300ustar00rootroot00000000000000#ifndef SCRIPT_H #define SCRIPT_H #include #include #include namespace QTerm { class Window; class TextLine; class ScriptHelper : public QObject { Q_OBJECT public: ScriptHelper(Window *parent, QScriptEngine *engine); ~ScriptHelper(); Q_PROPERTY(bool accepted READ accepted WRITE setAccepted) Q_PROPERTY(bool qtbindingsAvailable READ qtbindingsAvailable) void loadScriptFile(const QString&); public slots: bool accepted() const; bool qtbindingsAvailable() const; void setAccepted(bool); int caretX(); int caretY(); int columns(); int rows(); int charX(int x,int y); int charY(int x,int y); int posX(); int posY(); QString getUrl(); QString getIP(); bool isConnected(); void reconnect(); void disconnect(); void buzz(); void sendString(const QString & string); void sendParsedString(const QString & string); void osdMessage(const QString & message, int type = 1, int duration = 0); void showMessage(const QString & title, const QString & message, int duration = -1); void cancelZmodem(); void setZmodemFileList(const QStringList & fileList); QScriptValue getLine(int line); QScriptValue window(); bool addPopupMenu(QString id, QString menuTitle, QString icon = "QTerm"); bool addUrlMenu(QString id, QString menuTitle, QString icon = "QTerm"); void addPopupSeparator(); void addUrlSeparator(); void loadScript(const QString & filename); QString globalPath(); QString localPath(); QString getSelectedText(bool rect = false, bool color = false, const QString & escape = ""); void openUrl(const QString & url); bool loadExtension(const QString & extension); QString version(); QString findFile(const QString & filename); signals: void scriptEvent(const QString & type); void eventFinished(); private: bool isScriptLoaded(const QString & filename); void addImportedScript(const QString & filename); Window * m_window; QScriptEngine * m_scriptEngine; bool m_accepted; bool m_qtbindingsAvailable; QStringList m_scriptList; QStringList m_popupActionList; QStringList m_urlActionList; }; } // namespace QTerm #endif //SCRIPT_H qterm-0.7.3/src/scripts/000077500000000000000000000000001332762052600151355ustar00rootroot00000000000000qterm-0.7.3/src/scripts/CMakeLists.txt000066400000000000000000000003521332762052600176750ustar00rootroot00000000000000file(GLOB scriptFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.js") file(COPY ${scriptFiles} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) if (NOT APPLE) install(FILES ${scriptFiles} DESTINATION share/qterm/scripts) add_subdirectory(ui) endif() qterm-0.7.3/src/scripts/article.js000066400000000000000000000053231332762052600171210ustar00rootroot00000000000000QTerm.loadScript("utils.js"); var Article = Article ? Article : new Object; Article.downloading = false; Article.textList= []; Article.articleText = ""; Article.q = new QEventLoop; Article.getArticle = function() { this.textList = []; this.downloading = true; QTerm.scriptEvent.connect(this, this.downloadArticle); this.downloadArticle("Article: start"); QTerm.eventFinished.connect(this,this.q.quit); if (this.downloading) this.q.exec(); QTerm.eventFinished.disconnect(this,this.q.quit); return Article.articleText; } // check it there is duplicated string // it starts from the end in the range of one screen height // so this is a non-greedy match Article.checkDuplicate = function() { if (this.textList.length == 0) { return 0; } var i=0; var emptyLines = 0 var start=0; var strTemp = QTerm.getText(0).rtrim(); var size = strTemp.length while ( emptyLines < QTerm.rows() -1 && strTemp.length == 0) { emptyLines++; strTemp = QTerm.getText(emptyLines).rtrim(); } if (strTemp.length == 0) { return 0; } for(var index = this.textList.length -1; index > 0, i < QTerm.rows()-1; // not exceeeding the last screen --index, i++) { if(this.textList[index] != strTemp) continue; var index2 = index; var dup=true; // match more to see if its duplicated for(var j=emptyLines; j<=i; j++, index2++) { var str1 = QTerm.getText(j).rtrim(); if(this.textList[index2]!=str1) { dup = false; break; } } if(dup) { // set the start point start = i+1; break; } } return start; } Article.pageComplete = function() { var bottom = QTerm.getText(QTerm.rows() - 1).rtrim(); if (QTerm.caretY() == QTerm.rows() - 1 && QTerm.caretX() >= bottom.length - 1) { return true; } } Article.downloadArticle = function(message) { if ((message == "QTerm: new data")||(message == "Article: start")) { if (!this.pageComplete()) return; var start = this.checkDuplicate(); // add new lines for(i=start;i ( this.commandPos + 1 ) ) { this.commandPos++; } if( this.commandArray.length > 0 ) { this.inputLine.plainText = this.commandArray[ this.commandPos ]; } } ScriptConsoleMainWindow.prototype.forwardHistory = function() { if( this.commandArray.length > 0 ) { if( this.commandPos > 0 ) { this.commandPos--; } this.inputLine.plainText = this.commandArray[ this.commandPos ]; } } scriptConsoleMainWindow = new ScriptConsoleMainWindow(); if (QTerm.addPopupMenu( "scriptConsole", qsTr("Script Console...") ) ) { QTerm.scriptConsole.triggered.connect(scriptConsoleMainWindow.show); } qterm-0.7.3/src/scripts/google.js000066400000000000000000000007771332762052600167620ustar00rootroot00000000000000QTerm.loadScript("utils.js"); QTerm.onGoogle= function() { var text = QTerm.getSelectedText(); if (text.length > 0) { url = "http://www.google.com/search?q="+QTerm.getSelectedText()+"&ie=UTF-8&oe=UTF-8"; QTerm.openUrl(url); } else QTerm.osdMessage(qsTr("No text is selected to search for"), QTerm.OSDType.Warning, 5000); } if (QTerm.addPopupMenu( "googleSearch", qsTr("Search Selected Text in Google") ) ) { QTerm.googleSearch.triggered.connect(QTerm.onGoogle); } qterm-0.7.3/src/scripts/highlight.js000066400000000000000000000012671332762052600174500ustar00rootroot00000000000000QTerm.loadScript("utils.js"); QTerm.highlightKeywords = function(pattern) { for (var i = 0; i < QTerm.rows(); i++) { var line = QTerm.getLine(i); var text = line.getText(); pattern.lastIndex = 0; while ((result = pattern.exec(text)) != null) { var index = line.beginIndex(result.index); // Definition of color and attr can be found in qterm.h, The actuall color might change once we have schema support back var color = QTerm.setAttr(QTerm.Attr.Default|QTerm.Attr.Bold)|QTerm.setColor(QTerm.setFG(QTerm.Color.Red)|QTerm.setBG(QTerm.Color.Black)); line.replaceText(result[0],color,index, -1); } } } qterm-0.7.3/src/scripts/ptt.js000066400000000000000000000143071332762052600163070ustar00rootroot00000000000000QTerm.loadScript("utils.js"); QTerm.loadScript("highlight.js"); //Enable this if you have qt bindings installed. //QTerm.loadScript("console.js"); //QTerm.loadScript("websnap.js"); QTerm.PTT = { Unknown : -1, Menu : 0, List : 1, Article : 2, Edit: 4 } QTerm.pageState = QTerm.PTT.Unknown; QTerm.init = function() { QTerm.osdMessage("system script loaded", QTerm.OSDType.Info, 10000); } QTerm.setCursorType = function(x,y) { QTerm.accepted = false; if (QTerm.isListLineClickable(x,y)) { QTerm.accepted = true; return 7; } return -1; } // This is for PTT only QTerm.setPageState = function() { QTerm.accepted = true; var title = QTerm.getText(0); var bottom = QTerm.getText(QTerm.rows()-1); var third = QTerm.getText(2); QTerm.pageState = QTerm.PTT.Unknown; var menuList = ["【主功能表】","【電子郵件】","【聊天說話】","【個人設定】","【工具程式】"]; var listList = ["【看板列表】","【精華文章】","【分類看板】","【休閒聊天】"]; if (title.startsWith(menuList)) QTerm.pageState = QTerm.PTT.Menu; else if (title.startsWith(listList)) QTerm.pageState = QTerm.PTT.List; else if (third.indexOf("編號")!=-1) QTerm.pageState = QTerm.PTT.List; else if (bottom.indexOf("瀏覽")!=-1) QTerm.pageState = QTerm.PTT.Article; else if (bottom.indexOf("^X/^Q")!=-1) QTerm.pageState = QTerm.PTT.Edit; return QTerm.pageState; } QTerm.setSelectRect = function(x, y) { var rect = [0,0,0,0]; if (QTerm.pageState == QTerm.PTT.List && QTerm.isListLineClickable(x,y)) { QTerm.accepted = true; rect[0] = 0; rect[1] = y; rect[2] = QTerm.columns(); rect[3] = 1; } else if (QTerm.pageState == QTerm.PTT.Menu) { QTerm.accepted = true; var item = QTerm.getMenuItem(x, y); var line = QTerm.getLine(y); if (item.length > 0) { var index = line.getText().indexOf(item); rect[0] = line.beginIndex(index); rect[1] = y rect[2] = line.beginIndex(index+item.length) - rect[0]; rect[3] = 1; } } return rect; } QTerm.isListLineClickable = function(x, y) { if (QTerm.pageState == QTerm.PTT.List) { if (x < 12 || x > QTerm.columns() - 16) return false; var text = QTerm.getText(y); var item = text.split(/\s+/)[1].replace(".",""); if (item == "●") item = text.split(/\s+/)[2].replace(".",""); var num = parseInt(item); if (item == "★" || item == num.toString()) { QTerm.accepted = true; return true; } } QTerm.accepted = false; return false } QTerm.getMenuItem = function(x, y) { QTerm.accepted = true; if (QTerm.pageState != QTerm.PTT.Menu) { return ""; } var line = QTerm.getLine(y); var text = line.getText(); var pos = line.pos(x); var pattern = /\([a-zA-Z0-9]\)[^\s]+(\s[^\s]+)?\s+(【.*】|[^\s]+)/g; var result; var clickableString = ""; while ((result = pattern.exec(text)) != null) { clickableString = result[0]; if (pos > result.index && pos < result.index + clickableString.length) { return clickableString; } if (pattern.lastIndex == 0) return ""; } return "" } QTerm.onMouseEvent = function(type, button, buttons, modifiers, pt_x, pt_y) { var x = QTerm.charX(pt_x, pt_y); var y = QTerm.charY(pt_x, pt_y); var accepted = false; if (type == 1 && button == 1 && modifiers == 0) { accepted = QTerm.sendKey(x, y); } QTerm.accepted = accepted; } QTerm.sendKey = function(x, y) { if (QTerm.pageState == QTerm.PTT.Menu) { var str = QTerm.getMenuItem(x,y); if (str == "") { return false; } var result = str.match(/\(([a-zA-Z0-9])\)[^\s]/); //var result = str.match(/[\(\[]?([a-zA-Z0-9])[\).\]]\s[^\s]+/); QTerm.sendString(result[1]); QTerm.sendParsedString("^M"); return true; } return false; } QTerm.onKeyPressEvent = function(key, modifiers, text) { // var msg = "The key pressed is: " + text; // QTerm.osdMessage(msg,1,1000); QTerm.accepted = false; } QTerm.onWheelEvent = function(delta, buttons, modifiers, pt_x, pt_y, orientation) { QTerm.accepted = false; } QTerm.onNewData = function() { QTerm.accepted = false; QTerm.scriptEvent("QTerm: new data"); QTerm.highlightKeywords(/qterm|kde/ig); return false; } QTerm.antiIdle = function() { QTerm.accepted = false; } //The script shoul get the message by itself since the code in QTerm might not be reliable for every //site. QTerm.autoReply = function() { QTerm.accepted = false; } QTerm.checkUrl = function(x, y) { QTerm.accepted = false; return ""; } QTerm.checkIP = function(x, y) { QTerm.accepted = false; return ""; } QTerm.onTelnetState = function(state) { QTerm.accepted = false; return; } QTerm.onZmodemState = function(type, value, state) { QTerm.accepted = false; return; } if (QTerm.qtbindingsAvailable) { QTerm.loadScript("console.js"); QTerm.loadScript("senddelay.js"); QTerm.loadScript("article.js"); QTerm.onCopyArticle = function() { var text = "" if (QTerm.pageState != QTerm.PTT.Article) QTerm.osdMessage("No article to download.", QTerm.OSDType.Warning, 5000); else text = QTerm.Article.getArticle(); QTerm.accepted = true; return text; } } else { QTerm.onCopyArticle = function() { QTerm.accepted = false; return ""; } } // Here is an example about how to add item to the popup menu. QTerm.addPopupSeparator(); QTerm.onAbout = function() { msg = "You are using ptt.js in QTerm " + QTerm.version() + " (C) 2009 QTerm Developers"; QTerm.osdMessage(msg, QTerm.OSDType.Info, 10000); } if (QTerm.addPopupMenu( "aboutScript", "About This Script" ) ) { QTerm.aboutScript.triggered.connect(QTerm.onAbout); } QTerm.endOfArticle = function() { if( QTerm.getText(QTerm.rows()-1).indexOf("100%") != -1 ) { return true; } else { return false; } } qterm-0.7.3/src/scripts/senddelay.js000066400000000000000000000040371332762052600174470ustar00rootroot00000000000000QTerm.loadScript("utils.js"); var SendDelay = SendDelay ? SendDelay : new Object; SendDelay.stringQueue = new Array; SendDelay.t = new QTimer; SendDelay.q = new QEventLoop; SendDelay.text = ""; SendDelay.times = 0; SendDelay.delay = 0; SendDelay.send = function(text, times, delay) { SendDelay.text = text; SendDelay.times = times; SendDelay.delay = delay; for (var i = 0; i < times; i++) { this.addSendString(text); } this.t.start(delay); this.t.timeout.connect(this,this.sendOneChar); QTerm.eventFinished.connect(this,this.q.quit); this.q.exec(); QTerm.showMessage("QTerm","Send String Finished"); this.t.timeout.disconnect(this,this.sendOneChar); QTerm.eventFinished.disconnect(this,this.q.quit); } SendDelay.addSendString = function(str) { this.stringQueue[this.stringQueue.length] = str; } SendDelay.sendOneChar = function() { var text = this.stringQueue.shift(); QTerm.sendParsedString(text); if (this.stringQueue.length == 0) { this.t.stop(); QTerm.eventFinished(); return; } } QTerm.SendDelay = SendDelay; QTerm.onSendDelay = function() { var UIloader = new QUiLoader(this); var uifile = new QFile(QTerm.findFile("ui/senddelay.ui")); uifile.open(QIODevice.ReadOnly); var dialog = UIloader.load(uifile, this); uifile.close(); dialog.stringLineEdit.text = QTerm.SendDelay.text; dialog.repeatingSpinBox.value = QTerm.SendDelay.times; dialog.delaySpinBox.value = QTerm.SendDelay.delay/1000; if ( dialog.exec() == 0 ) return; var text = dialog.stringLineEdit.text; var times = dialog.repeatingSpinBox.value; var delay = dialog.delaySpinBox.value*1000; if (text.length != 0 && times != 0) { QTerm.osdMessage("send \""+text+"\" "+times+" times with "+delay+" ms delay", QTerm.OSDType.Info, 2000); QTerm.SendDelay.send(text,times,delay); } } if (QTerm.addPopupMenu( "sendDelay", qsTr("Send String With Delay...") ) ) { QTerm.sendDelay.triggered.connect(QTerm.onSendDelay); } qterm-0.7.3/src/scripts/smth.js000066400000000000000000000201651332762052600164520ustar00rootroot00000000000000QTerm.loadScript("utils.js"); QTerm.loadScript("highlight.js"); QTerm.loadScript("google.js"); QTerm.SMTH= { Unknown : -1, Menu : 0, List : 1, Article : 2, Top10 : 3, Edit: 4 } QTerm.pageState = QTerm.SMTH.Unknown; QTerm.init = function() { QTerm.osdMessage(qsTr("System script loaded"), QTerm.OSDType.Info, 10000); if (QTerm.addPopupMenu( "aboutScript", qsTr("About This Script") ) ) { QTerm.aboutScript.triggered.connect(QTerm.onAbout); } } QTerm.setCursorType = function(x,y) { QTerm.accepted = false; if (QTerm.pageState == QTerm.SMTH.Top10) { QTerm.accepted = true; if (x < 12) { return 6; } else if (y >= 2 && y < QTerm.rows() -1 && x > 12 && x < QTerm.columns() - 16 && QTerm.getText(y).search(/[^\s]/)!=-1) { return 7; } else { return 9; } } return -1; } // VERY naive/straight forward code, for SMTH only QTerm.setPageState = function() { QTerm.accepted = true; var title = QTerm.getText(0); var bottom = QTerm.getText(QTerm.rows()-1); var third = QTerm.getText(2); QTerm.pageState = QTerm.SMTH.Unknown; var menuList = ["主选单","聊天选单","[处理信笺选单]","工具箱选单","分类讨论区选单","系统资讯选单"]; var listList = ["[好朋友列表]","[讨论区列表]","邮件选单","[个人定制区]"]; var articleList = ["[十大模式]","[主题阅读]","[阅读文章]","[阅读精华区资料]","下面还有喔","(R)回信, (D)删除, (G)继续? [G]:"]; // The functions used here is defined in utils.js if (title.startsWith(menuList)) QTerm.pageState = QTerm.SMTH.Menu; else if (title.startsWith(listList)) QTerm.pageState = QTerm.SMTH.List; else if (title.indexOf("水木社区 精华区公布栏")!=-1) QTerm.pageState = QTerm.SMTH.List; else if (title.indexOf("本日十大热门话题")!=-1 && bottom.indexOf("查阅帮助信息")!=-1) QTerm.pageState = QTerm.SMTH.Top10; else if (third.indexOf("编号")!=-1) QTerm.pageState = QTerm.SMTH.List; else if (bottom.startsWith(articleList)) QTerm.pageState = QTerm.SMTH.Article; else if (bottom.indexOf("Ctrl-Q")!=-1) QTerm.pageState = QTerm.SMTH.Edit; return QTerm.pageState; } QTerm.setSelectRect = function(x, y) { var rect = [0,0,0,0]; if (QTerm.pageState == QTerm.SMTH.List && QTerm.isListLineClickable(x,y)) { QTerm.accepted = true; rect[0] = 0; rect[1] = y; rect[2] = QTerm.columns(); rect[3] = 1; } else if (QTerm.pageState == QTerm.SMTH.Menu) { QTerm.accepted = true; var item = QTerm.getMenuItem(x, y); var line = QTerm.getLine(y); if (item.length > 0) { var index = line.getText().indexOf(item); rect[0] = line.beginIndex(index); rect[1] = y; rect[2] = line.beginIndex(index+item.length) - rect[0]; rect[3] = 1; } } else if (QTerm.pageState == QTerm.SMTH.Top10) { if (y >= 2 && y < QTerm.rows() -1 && x > 12 && x < QTerm.columns() - 16 && QTerm.getText(y).search(/[^\s]/)!=-1) { QTerm.accepted = true; rect[0] = 0; rect[1] = y; rect[2] = QTerm.columns(); rect[3] = 1; } } return rect; } QTerm.isListLineClickable = function(x, y) { // Copied from the source code of QTerm if (QTerm.pageState == QTerm.SMTH.List) { if (y >= 3 && y < QTerm.rows() -1 && x > 12 && x < QTerm.columns() - 16 && QTerm.getText(y).search(/[^\s]/)!=-1) { QTerm.accepted = true; return true; } } else if (QTerm.pageState == QTerm.SMTH.Top10) { if (y >= 2 && y < QTerm.rows() -1 && x > 12 && x < QTerm.columns() - 16 && y % 2 == 1 && QTerm.getText(y).search(/[^\s]/)!=-1) { QTerm.accepted = true; return true; } } QTerm.accepted = false; return false } QTerm.getMenuItem= function(x, y) { QTerm.accepted = true; if (QTerm.pageState != QTerm.SMTH.Menu) { return ""; } var line = QTerm.getLine(y); var text = line.getText(); var pos = line.pos(x); var pattern = /\b[\(\[]?[a-zA-Z0-9][\)\]]\s?[^\s]+/g; var result; var clickableString = ""; while ((result = pattern.exec(text)) != null) { clickableString = result[0]; if (pos > result.index && pos < result.index + clickableString.length) { return clickableString; } if (pattern.lastIndex == 0) return ""; } return "" } QTerm.onMouseEvent = function(type, button, buttons, modifiers, pt_x, pt_y) { var x = QTerm.charX(pt_x, pt_y); var y = QTerm.charY(pt_x, pt_y); var accepted = false; if (type == 1 && button == 1 && modifiers == 0) { accepted = QTerm.sendKey(x, y); } QTerm.accepted = accepted; } QTerm.sendKey = function(x, y) { if (QTerm.getUrl().length > 0) return false; var result; if (QTerm.pageState == QTerm.SMTH.Article && x < 12) { if( QTerm.getText(QTerm.rows()-1).indexOf("%") != -1 ) { QTerm.sendParsedString("^[[D"); QTerm.sendParsedString("^[[D"); } else QTerm.sendParsedString("^[[D"); return true; } else if (QTerm.pageState == QTerm.SMTH.Menu) { str = QTerm.getMenuItem(x,y); if (str == "") { return false; } result = str.match(/[\(\[]?([a-zA-Z0-9])[\).\]]\s?[^\s]+/); QTerm.sendString(result[1]); QTerm.sendParsedString("^M"); return true; } else if (QTerm.pageState == QTerm.SMTH.Top10 && (y >= 2 && y < QTerm.rows() -1 && x > 12 && x < QTerm.columns() - 16 && QTerm.getText(y).search(/[^\s]/)!=-1)) { var text = QTerm.getText(y - y%2); result = QTerm.getText(y - y%2).match(/\s+(\d+)\s+/); QTerm.sendString(result[1]); if (y%2 == 0) { QTerm.sendParsedString("s"); } else { QTerm.sendParsedString("^M"); } } return false; } QTerm.onKeyPressEvent = function(key, modifiers, text) { // var msg = "The key pressed is: " + text; // QTerm.osdMessage(msg,1,1000); QTerm.accepted = false; } QTerm.onWheelEvent = function(delta, buttons, modifiers, orientation, pt_x, pt_y) { QTerm.accepted = false; } QTerm.onNewData = function() { QTerm.accepted = false; // This will highlight qterm and kde, function defined in highlight.js QTerm.scriptEvent("QTerm: new data"); QTerm.highlightKeywords(/qterm|kde/ig); return false; } QTerm.antiIdle = function() { QTerm.accepted = false; } //The script should get the message by itself since the code in QTerm might not be reliable for every //site. QTerm.autoReply = function() { QTerm.accepted = false; } QTerm.checkUrl = function(x, y) { QTerm.accepted = false; return ""; } QTerm.checkIP = function(x, y) { QTerm.accepted = false; return ""; } QTerm.onTelnetState = function(state) { QTerm.accepted = false; return; } QTerm.onZmodemState = function(type, value, state) { QTerm.accepted = false; return; } // Here is an example about how to add item to the popup menu. if (QTerm.qtbindingsAvailable) { QTerm.loadScript("console.js"); QTerm.loadScript("senddelay.js"); QTerm.loadScript("article.js"); QTerm.onCopyArticle = function() { var text = "" if (QTerm.pageState != QTerm.SMTH.Article) QTerm.osdMessage(qsTr("No article to download"), QTerm.OSDType.Warning, 5000); else text = QTerm.Article.getArticle(); QTerm.accepted = true; return text; } } else { QTerm.onCopyArticle = function() { QTerm.accepted = false; return ""; } } QTerm.addPopupSeparator(); QTerm.onAbout = function() { msg = qsTr("You are using smth.js in QTerm %1 (C) 2009-2010 QTerm Developers").arg(QTerm.version());; QTerm.osdMessage(msg, QTerm.OSDType.Info, 10000); } QTerm.endOfArticle = function() { if( QTerm.getText(QTerm.rows()-1).indexOf("%") == -1 ) { return true; } else { return false; } } qterm-0.7.3/src/scripts/ui/000077500000000000000000000000001332762052600155525ustar00rootroot00000000000000qterm-0.7.3/src/scripts/ui/CMakeLists.txt000066400000000000000000000002751332762052600203160ustar00rootroot00000000000000file(GLOB scriptFiles "${CMAKE_CURRENT_SOURCE_DIR}/*.ui") file(COPY ${scriptFiles} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) install(FILES ${scriptFiles} DESTINATION share/qterm/scripts/ui) qterm-0.7.3/src/scripts/ui/senddelay.ui000066400000000000000000000105311332762052600200610ustar00rootroot00000000000000 Dialog 0 0 372 213 0 0 0 31 Send string with delay 0 170 361 32 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok 10 20 90 31 90 31 String: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 10 70 90 32 90 32 Repeating: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 10 120 90 31 90 31 Delay(s): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 110 20 251 31 0 31 110 70 251 31 0 31 110 120 251 31 0 31 buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 qterm-0.7.3/src/scripts/utils.js000066400000000000000000000031451332762052600166360ustar00rootroot00000000000000String.prototype.startsWith = function(list) { for (var i = 0; i < list.length; i++) { var item = list[i]; if (this.substr(0,item.length) == item) return true; } return false; } String.prototype.contains = function(str) { return(this.indexOf(str) != -1); } String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() { return this.replace(/^\s+/,""); } String.prototype.rtrim = function() { return this.replace(/\s+$/,""); } QTerm.Attr = { Bold : 0x01, Dimm : 0x02, Default : 0x04, Underline: 0x08, Blink : 0x10, Reverse : 0x40, Invisible : 0x80 } QTerm.Color = { Black : 0, Red : 1, Green : 2, Yellow : 3, Blue : 4, Magenta : 5, Cyan : 6, White : 7, Highlight : 8 } QTerm.setFG = function(color) { return color & 0x0f; } QTerm.getFG = function(color) { return color & 0x0f; } QTerm.setBG = function(color) { return (color << 4) & 0x0f; } QTerm.getBG = function(color) { return (color & 0xf0) >> 4; } QTerm.setColor = function(color) { return color & 0x00ff; } QTerm.getColor = function(color) { return color & 0x00ff; } QTerm.setAttr = function(attr) { return (attr << 8) & 0xff00; } QTerm.getAttr = function(attr) { return (attr & 0xff00) >> 8; } QTerm.defaultColor = function() { return setFG(QTerm.Color.White)|setBG(QTerm.Color.Black); } QTerm.OSDType = { None : 0, Info : 1, Warning : 2, Error : 3 } QTerm.getText = function(line) { return QTerm.getLine(line).getText(); } qterm-0.7.3/src/scripts/websnap.js000066400000000000000000000036141332762052600171360ustar00rootroot00000000000000QTerm.loadExtension("qt.core"); QTerm.loadExtension("qt.network"); QTerm.loadExtension("qt.gui"); QTerm.loadExtension("qt.webkit"); var WebSnap = WebSnap ? WebSnap : new Object; WebSnap.webPage = new QWebPage; WebSnap.label = new QLabel; //WebSnap.label = new QLabel(QTerm.window()); WebSnap.loading = false; WebSnap.showSnap = function(ok) { if (!ok) { QTerm.osdMessage("cannot download the webpage"); return; } this.loading = false; var target = new QSize(400, 300); var size = this.webPage.mainFrame().contentsSize; size.setHeight(size.width() * target.height() / target.width()); // create the target surface var image = new QPixmap(size); image.fill(Qt.transparent); // render and rescale var p = new QPainter; p.begin(image); this.webPage.viewportSize = this.webPage.mainFrame().contentsSize; this.webPage.mainFrame().render(p); p.end(); image = image.scaled(target, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation); // QTerm.osdMessage("generating finished", 1, 0); this.label.size = target; this.label.pixmap = image; } WebSnap.getWebsnap = function( urlStr ) { // QTerm.osdMessage("generating websnap", 1, 0); var url = new QUrl(urlStr, QUrl.TolerantMode); // this.webPage = new QWebPage; // this.label = new QLabel; this.webPage.loadFinished.connect(this,this.showSnap); this.webPage.mainFrame().load(url); this.loading = true; var image = new QPixmap; image.load(QTerm.localPath()+"pic/loading.png"); this.label.pixmap = image; // this.label.setWindowFlags(Qt.FramelessWindowHint) this.label.move(QTerm.posX(),QTerm.posY()); this.label.show(); } QTerm.WebSnap = WebSnap; QTerm.onWebsnap = function() { QTerm.WebSnap.getWebsnap(QTerm.getUrl()); } if (QTerm.addUrlMenu( "snapshot", "Web Snapshot" ) ) { QTerm.snapshot.triggered.connect(QTerm.onWebsnap); } qterm-0.7.3/src/shortcutsdialog.cpp000066400000000000000000000147641332762052600174040ustar00rootroot00000000000000#include "shortcutsdialog.h" #include "qtermglobal.h" #include #include #include #include namespace QTerm { ShortcutsDialog::ShortcutsDialog(QWidget* parent, QList actions, QList shortcuts) :QDialog(parent),m_defaultShortcut() { setupUi(this); editShortcut->installEventFilter(this); buttonAssign->setEnabled(false); connect(buttonAssign, SIGNAL(clicked()), this, SLOT(buttonAssignClicked())); connect(buttonRemove, SIGNAL(clicked()), this, SLOT(buttonRemoveClicked())); connect(buttonDone, SIGNAL(clicked()), this, SLOT(buttonDoneClicked())); connect(buttonDefault, SIGNAL(clicked()), this, SLOT(restoreDefaultShortcut())); connect(editShortcut, SIGNAL(textChanged(const QString &)), this, SLOT(editShortcutTextChanged(const QString &))); connect(tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(tableWidgetCurrentCellChanged(int,int,int,int))); createDefaultShortcut(); foreach(QAction* action, actions) { //toolTip() gives text without '&' if (action->actionGroup()->objectName() != "extraGroup") continue; QTableWidgetItem *itemAction = new QTableWidgetItem(action->toolTip()); QString shortcut = action->shortcut().toString(); QTableWidgetItem *itemShortcut = new QTableWidgetItem(shortcut); listKeys << shortcut; listActions << action; int row = tableWidget->rowCount(); tableWidget->insertRow(row); tableWidget->setItem(row, 0, itemAction); tableWidget->setItem(row, 1, itemShortcut); } foreach(QShortcut* shortcut, shortcuts) { QTableWidgetItem *itemShortcut = new QTableWidgetItem(shortcut->objectName()); QString key = shortcut->key().toString(); QTableWidgetItem *itemKey = new QTableWidgetItem(key); listKeys << key; listActions << shortcut; int row = tableWidget->rowCount(); tableWidget->insertRow(row); tableWidget->setItem(row, 0, itemShortcut); tableWidget->setItem(row, 1, itemKey); } tableWidget->resizeColumnsToContents(); tableWidget->setCurrentCell(0, 0); restoreGeometry(Global::instance()->loadGeometry("Shortcuts")); } ShortcutsDialog::~ShortcutsDialog() { Global::instance()->saveGeometry("Shortcuts",saveGeometry()); } void ShortcutsDialog::createDefaultShortcut() { m_defaultShortcut.insert("actionAbout","F1"); m_defaultShortcut.insert("actionAddress","F2"); m_defaultShortcut.insert("actionQuickConnect","F3"); m_defaultShortcut.insert("actionRefresh","F5"); m_defaultShortcut.insert("actionFull","F6"); m_defaultShortcut.insert("actionScriptRun","F7"); m_defaultShortcut.insert("actionScriptStop","F8"); m_defaultShortcut.insert("actionCopyArticle","F9"); m_defaultShortcut.insert("actionViewMessage","F10"); m_defaultShortcut.insert("actionBoss","F12"); m_defaultShortcut.insert("actionCopy","Ctrl+Ins"); m_defaultShortcut.insert("actionPaste","Shift+Ins"); } void ShortcutsDialog::buttonAssignClicked() { int row = listKeys.indexOf(editShortcut->text()); if (row == tableWidget->currentRow()) return; // already existed if (row != -1) { QObject* obj = listActions.at(row); int aw = QMessageBox::warning(this, tr("Assign Shortcut"), QString(tr("shortcut %1 is already assigned to %2\n" "Do you want to clear and reassign?")) .arg(editShortcut->text()) .arg(getName(obj)), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default); if (aw == QMessageBox::No) return; // clear it setKeySequence(obj, QKeySequence()); } // set it to the target action row = tableWidget->currentRow(); setKeySequence(listActions.at(row), editShortcut->text()); } void ShortcutsDialog::buttonRemoveClicked() { int row = tableWidget->currentRow(); setKeySequence(listActions.at(row), QKeySequence()); } void ShortcutsDialog::editShortcutTextChanged(const QString& shortcut) { buttonAssign->setEnabled(!shortcut.isEmpty()); } void ShortcutsDialog::buttonDoneClicked() { } void ShortcutsDialog::restoreDefaultShortcut() { foreach(QObject * action, listActions) { if (m_defaultShortcut.contains(action->objectName())) { setKeySequence(action, QKeySequence(m_defaultShortcut.value(action->objectName()))); } else { setKeySequence(action, QKeySequence()); } } editShortcut->setText(listKeys.at(tableWidget->currentRow())); } void ShortcutsDialog::updateTableItem(QObject * action, QString key) { QTableWidgetItem* item; int row = listActions.indexOf(action); item = tableWidget->item(row, 1); item->setText(key); listKeys.replace(row, key); } void ShortcutsDialog::tableWidgetCurrentCellChanged(int row, int col, int, int) { QTableWidgetItem *item = tableWidget->item(row, 1); buttonRemove->setEnabled(!item->text().isEmpty()); editShortcut->setText(item->text()); } bool ShortcutsDialog::eventFilter(QObject *object, QEvent *event) { if (object != editShortcut || event->type() != QEvent::KeyPress) return false; QKeyEvent* keyevent = (QKeyEvent*)event; int key = keyevent->key(); Qt::KeyboardModifiers mod = keyevent->modifiers(); // dont accept Mdodifiers only if (key == Qt::Key_Meta || key == Qt::Key_Alt || key == Qt::Key_AltGr || key == Qt::Key_Shift || key == Qt::Key_Control) return false; QKeySequence seqKey(mod+key); QString text = seqKey.toString(QKeySequence::NativeText); editShortcut->setText(text); return true; } QString ShortcutsDialog::getName(QObject* obj) { if (obj->inherits("QAction")) { QAction* action = qobject_cast(obj); return action->text(); } else if (obj->inherits("QShortcut")) return obj->objectName(); return QString(); } void ShortcutsDialog::setKeySequence(QObject* obj, QKeySequence key) { if (obj->inherits("QAction")) { QAction* action = qobject_cast(obj); action->setShortcut(key); } else if (obj->inherits("QShortcut")) { QShortcut* shortcut = qobject_cast(obj); shortcut->setKey(key); } updateTableItem(obj, key.toString()); } } #include qterm-0.7.3/src/shortcutsdialog.h000066400000000000000000000016761332762052600170470ustar00rootroot00000000000000#ifndef SHORTCUTSDIALOG_H #define SHORTCUTSDIALOG_H #include "ui_shortcutsdialog.h" class QShortcut; class QAction; namespace QTerm{ class ShortcutsDialog : public QDialog, public Ui_ShortcutsDialog { Q_OBJECT public: ShortcutsDialog(QWidget*, QList, QList); ~ShortcutsDialog(); protected slots: void buttonRemoveClicked(); void buttonDoneClicked(); void buttonAssignClicked(); void editShortcutTextChanged(const QString&); void tableWidgetCurrentCellChanged(int, int, int, int); void restoreDefaultShortcut(); protected: bool eventFilter(QObject *obj, QEvent *event); QString getName(QObject*); void setKeySequence(QObject*, QKeySequence); private: void createDefaultShortcut(); void updateTableItem(QObject * action, QString key); QList listActions; QList listKeys; QMap m_defaultShortcut; }; } #endif //SHORTCUTSDIALOG_H qterm-0.7.3/src/soundconf.cpp000066400000000000000000000110631332762052600161510ustar00rootroot00000000000000#include "soundconf.h" #include "qtermconfig.h" #include "qtermsound.h" #include "qtermglobal.h" #include "qterm.h" #include #include namespace QTerm { //extern QString getOpenFileName(const QString&, QWidget*); /* * Constructs a fSoundConf which is a child of 'parent', with the * name 'name' and widget flags set to 'f' * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ soundConf::soundConf( QWidget* parent, Qt::WindowFlags fl ) : QDialog( parent, fl ),bgMethod(this) { ui.setupUi(this); bgMethod.addButton(ui.radioButton1,0); bgMethod.addButton(ui.radioButton2,1); bgMethod.addButton(ui.radioButton3,2); bgMethod.addButton(ui.radioButton4,3); m_pSound = NULL; loadSetting(); } /* * Destroys the object and frees any allocated resources */ soundConf::~soundConf() { // no need to delete child widgets, Qt does it all for us delete m_pSound; } /* * public slot */ void soundConf::onSelectFile() { QString soundfile = QFileDialog::getOpenFileName( this, "Choose a file", QDir::currentPath(), "*" ); if ( !soundfile.isNull() ) { ui.leFile->setText(soundfile); } } /* * public slot */ void soundConf::onSelectProg() { QString progfile = QFileDialog::getOpenFileName( this, "Choose a program", QDir::currentPath(), "*" ); if ( !progfile.isEmpty() ) { ui.leFile->setText(progfile); } } /* * public slot */ void soundConf::onPlayMethod( int id ) { #ifdef _NO_ARTS_COMPILED if (id == 1){ QMessageBox::critical(this, tr("No such output driver"), tr("ARTS is not supported by this instance of QTerm,\nCheck whether your ARTS support is enabled in compile time."), tr("&OK")); bgMethod.button(3)->setChecked(true); // QRadioButton * tmp = static_cast(bgMethod->find(3)); // tmp->setChecked(true); } #endif #ifdef _NO_ESD_COMPILED if (id == 2){ QMessageBox::critical(this, tr("No such output driver"), tr("ESD is not supported by this instance of QTerm,\nCheck whether your ESD support is enabled in compile time"), tr("&OK")); // QRadioButton * tmp = static_cast(bgMethod->find(3)); // tmp->setChecked(true); bgMethod.button(3)->setChecked(true); } #endif if(id == 3 || bgMethod.checkedId() == 3) { ui.leProg->setEnabled(true); ui.bpSelect->setEnabled(true); } else if(id==0 || id==1 || id==2) { ui.leProg->setEnabled(false); ui.bpSelect->setEnabled(false); } } void soundConf::onTestPlay() { if (ui.leFile->text().isEmpty()) QMessageBox::critical(this, tr("No sound file"), tr("You have to select a file to test the sound"), tr("&Ok")); switch (bgMethod.checkedId()) { case 0: m_pSound = new InternalSound(ui.leFile->text()); break; case 1: /* #ifndef _NO_ARTS_COMPILED m_pSound = new QTermArtsSound(leFile->text()); #endif break; case 2: #ifndef _NO_ESD_COMPILED m_pSound = new QTermEsdSound(leFile->text()); #endif*/ break; case 3: if (ui.leProg->text().isEmpty()) QMessageBox::critical(this, tr("No player"), tr("You have to specify an external player"), tr("&Ok")); else m_pSound = new ExternalSound(ui.leProg->text(), ui.leFile->text()); break; default: m_pSound = NULL; } if (m_pSound) m_pSound->play(); delete m_pSound; m_pSound = NULL; } void soundConf::loadSetting() { QString strTmp; strTmp = Global::instance()->fileCfg()->getItemValue("preference", "wavefile"); if (!strTmp.isEmpty()) ui.leFile->setText( strTmp ); strTmp = Global::instance()->fileCfg()->getItemValue("preference", "playmethod"); if (!strTmp.isEmpty()){ bgMethod.button(strTmp.toInt())->setChecked(true); if (strTmp.toInt() != 3) { ui.leProg->setEnabled(false); ui.bpSelect->setEnabled(false); } else { strTmp = Global::instance()->fileCfg()->getItemValue("preference", "externalplayer"); if (!strTmp.isEmpty()) ui.leProg->setText( strTmp ); } } else { ui.leProg->setEnabled(false); ui.bpSelect->setEnabled(false); } } void soundConf::saveSetting() { QString strTmp; Global::instance()->fileCfg()->setItemValue("preference", "beep", "2"); Global::instance()->fileCfg()->setItemValue("preference", "wavefile", ui.leFile->text()); strTmp.setNum(bgMethod.checkedId()); Global::instance()->fileCfg()->setItemValue("preference", "playmethod", strTmp); if (strTmp == "3") Global::instance()->fileCfg()->setItemValue("preference", "externalplayer", ui.leProg->text()); Global::instance()->fileCfg()->save(); } void soundConf::accept() { saveSetting(); QDialog::accept(); } } // namespace QTerm #include qterm-0.7.3/src/soundconf.h000066400000000000000000000010531332762052600156140ustar00rootroot00000000000000#ifndef SOUNDCONF_H #define SOUNDCONF_H #include #include "ui_soundconf.h" namespace QTerm { class Sound; class soundConf : public QDialog { Q_OBJECT public: soundConf( QWidget* parent = 0, Qt::WindowFlags fl = 0 ); ~soundConf(); void loadSetting(); void saveSetting(); public slots: void onSelectFile(); void onSelectProg(); void onPlayMethod( int id ); void onTestPlay(); protected slots: void accept(); private: Sound * m_pSound; Ui::soundConf ui; QButtonGroup bgMethod; }; } // namespace QTerm #endif // SOUNDCONF_H qterm-0.7.3/src/ssh/000077500000000000000000000000001332762052600142435ustar00rootroot00000000000000qterm-0.7.3/src/ssh/auth.cpp000066400000000000000000000313401332762052600157110ustar00rootroot00000000000000// // C++ Implementation: sshauth // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include extern "C" { #include "libcrypto-compat.h" } #include "auth.h" #include "packet.h" #include "ssh1.h" #include "ssh2.h" #include "hostinfo.h" #include "key.h" #include #include #include #ifdef SSH_DEBUG #include extern void dumpData(const QByteArray & data); #endif namespace QTerm { SSH2Auth::SSH2Auth(QByteArray & sessionID, SSH2InBuffer * in, SSH2OutBuffer * out, QObject *parent) : QObject(parent), m_username(), m_method(), m_authMethod(None), m_lastTried(None), m_sessionID(sessionID), m_keyType(Unknown), m_publicKeyAuthAvailable(false), m_tries(0) { m_in = in; m_out = out; m_hostInfo = NULL; m_key = NULL; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(authPacketReceived(int))); } SSH2Auth::~SSH2Auth() { delete m_key; } void SSH2Auth::setHostInfo(HostInfo * hostInfo) { if (hostInfo->type() == HostInfo::SSH) { m_hostInfo = static_cast(hostInfo); } QString privateKeyFile = m_hostInfo->privateKeyFile(); if (!privateKeyFile.isEmpty()) { DSA *dsa = NULL; RSA *rsa = NULL; QString passphrase = m_hostInfo->passphrase(); QFile file(privateKeyFile); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug("Cannot open the private key file"); m_publicKeyAuthAvailable = false; return; } QByteArray privateKeyData = file.readAll(); file.close(); KeyType type = checkPrivateKeyType(privateKeyData); if (type == Unknown) { qDebug("Unknown private key type"); m_publicKeyAuthAvailable = false; return; } BIO * mem = BIO_new_mem_buf((void*)privateKeyData.data(), -1); if (type == SSH_RSA) { rsa = PEM_read_bio_RSAPrivateKey(mem, NULL, m_hostInfo->passphraseCallback, passphrase.toUtf8().data()); m_key = new SSH2RSAKey(rsa); } else if (type == SSH_DSS) { dsa = PEM_read_bio_DSAPrivateKey(mem, NULL, m_hostInfo->passphraseCallback, passphrase.toUtf8().data()); m_key = new SSH2DSAKey(dsa); } BIO_free(mem); if (!rsa && !dsa) { m_publicKeyAuthAvailable = false; qDebug("Cannot read the private key file"); return; } m_publicKeyAuthAvailable = true; m_keyType = type; } } void SSH2Auth::authPacketReceived(int flag) { #ifdef SSH_DEBUG qDebug() << "flag " << flag; #endif // TODO: BANNER switch (flag) { case SSH2_MSG_SERVICE_ACCEPT: noneAuth(); break; case SSH2_MSG_USERAUTH_FAILURE: m_in->getUInt8();//flag m_method = m_in->getString(); #ifdef SSH_DEBUG qDebug() << "method: " << m_method << "flag " << m_in->getUInt8(); #endif failureHandler(); break; // TODO: handle the conflict: // SSH2_MSG_USERAUTH_INFO_REQUEST // SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ // SSH2_MSG_USERAUTH_PK_OK // all three above share the same flag number. case 60: switch (m_authMethod) { case PublicKey: // TODO: discard the remaining data #ifdef SSH_DEBUG qDebug() << "PublicKey: get pk ok message"; #endif generateSign(); break; case Keyboard: #ifdef SSH_DEBUG qDebug() << "Keyboard Interactive: request input"; #endif requestInput(); break; case Password: #ifdef SSH_DEBUG qDebug() << "Password: todo ;)"; #endif break; default: #ifdef SSH_DEBUG qDebug() << "Unknown auth method"; #endif break; } break; case SSH2_MSG_USERAUTH_SUCCESS: #ifdef SSH_DEBUG qDebug() << "====== success! ======"; #endif emit authFinished(); default: break; } } void SSH2Auth::failureHandler() { if (m_method.contains("publickey") && m_publicKeyAuthAvailable && m_lastTried == None) { m_lastTried = PublicKey; publicKeyAuth(); } else if (m_method.contains("keyboard-interactive") && m_lastTried <= PublicKey) { if (m_tries > 1) { m_lastTried = Keyboard; m_tries = 0; } keyboardAuth(); m_tries++; } else if (m_method.contains("password") && m_lastTried <= Keyboard) { if (m_tries > 1) { m_lastTried = Password; m_tries = 0; } passwordAuth(); m_tries++; } else if (m_lastTried <= Password) { // We are out of luck. emit error("Every auth method has failed"); return; } else { emit error("Server does not support keyboard interactive authtication method."); return; } } void SSH2Auth::requestAuthService() { m_out->startPacket(SSH2_MSG_SERVICE_REQUEST); m_out->putString("ssh-userauth"); m_out->sendPacket(); } void SSH2Auth::noneAuth() { bool ok; m_authMethod = None; m_username = m_hostInfo->userName(&ok); if (!ok) { #ifdef SSH_DEBUG qDebug() << "User canceled!"; #endif emit error("User canceled"); return; } m_out->startPacket(SSH2_MSG_USERAUTH_REQUEST); m_out->putString(m_username.toUtf8()); m_out->putString("ssh-connection"); m_out->putString("none"); m_out->sendPacket(); } void SSH2Auth::passwordAuth() { bool ok; m_authMethod = Password; if (m_tries > 0) { m_hostInfo->reset(); } QString password = m_hostInfo->password(&ok); if (!ok) { #ifdef SSH_DEBUG qDebug() << "User canceled!"; #endif emit error("User canceled"); return; } m_out->startPacket(SSH2_MSG_USERAUTH_REQUEST); m_out->putString(m_username.toUtf8()); m_out->putString("ssh-connection"); m_out->putString("password"); m_out->putUInt8(0); m_out->putString(password.toUtf8()); m_out->sendPacket(); } void SSH2Auth::keyboardAuth() { m_authMethod = Keyboard; m_out->startPacket(SSH2_MSG_USERAUTH_REQUEST); m_out->putString(m_username.toUtf8()); m_out->putString("ssh-connection"); m_out->putString("keyboard-interactive"); m_out->putString(""); m_out->putString(""); m_out->sendPacket(); } void SSH2Auth::publicKeyAuth() { #ifdef SSH_DEBUG qDebug() << "Start Public Key Auth"; #endif m_authMethod = PublicKey; m_out->startPacket(SSH2_MSG_USERAUTH_REQUEST); m_out->putString(m_username.toUtf8()); m_out->putString("ssh-connection"); m_out->putString("publickey"); m_out->putUInt8(0); if (m_keyType == SSH_DSS) { m_out->putString("ssh-dss"); } else if (m_keyType == SSH_RSA) { m_out->putString("ssh-rsa"); } else { qDebug("Unknow public key type"); failureHandler(); return; } m_out->putString(m_key->publicKey()); m_out->sendPacket(); #ifdef SSH_DEBUG qDebug() << "Public Key Sent"; #endif } SSH2Auth::KeyType SSH2Auth::checkPrivateKeyType(const QByteArray & data) { if (data.startsWith("-----BEGIN RSA PRIVATE KEY-----")) { return SSH_RSA; } else if (data.startsWith("-----BEGIN DSA PRIVATE KEY-----")) { return SSH_DSS; } else { return Unknown; } } void SSH2Auth::generateSign() { // TODO: ugly SSH2OutBuffer tmp(0); tmp.startPacket(); tmp.putString(m_sessionID); m_out->startPacket(SSH2_MSG_USERAUTH_REQUEST); m_out->putString(m_username.toUtf8()); m_out->putString("ssh-connection"); m_out->putString("publickey"); m_out->putUInt8(1); if (m_keyType == SSH_RSA) { RSA * rsa = static_cast(m_key)->privateKey(); m_out->putString("ssh-rsa"); m_out->putString(m_key->publicKey()); QByteArray buf = QCryptographicHash::hash(tmp.buffer() + m_out->buffer(), QCryptographicHash::Sha1); QByteArray sigblob(RSA_size(rsa), 0); unsigned int siglen = 0; RSA_sign(NID_sha1, (uchar*) buf.data(), buf.size(), (unsigned char *) sigblob.data(), &siglen, rsa); m_out->putUInt32(4 + 7 + 4 + sigblob.size()); m_out->putString("ssh-rsa"); m_out->putString(sigblob); } else if (m_keyType == SSH_DSS) { DSA_SIG *sig = NULL; uint rlen, slen; DSA * dsa = static_cast(m_key)->privateKey(); m_out->putString("ssh-dss"); m_out->putString(m_key->publicKey()); QByteArray buf = QCryptographicHash::hash(tmp.buffer() + m_out->buffer(), QCryptographicHash::Sha1); QByteArray sigblob(40, 0); sig = DSA_do_sign((uchar*) buf.data(), buf.size(), dsa); const BIGNUM * r; const BIGNUM * s; DSA_SIG_get0(sig, &r, &s); rlen = BN_num_bytes(r); slen = BN_num_bytes(s); //TODO: check rlen and slen: ssh-dss.c in openssh BN_bn2bin(r, (uchar *) sigblob.data() + 20 - rlen); BN_bn2bin(s, (uchar *) sigblob.data() + 40 - slen); DSA_SIG_free(sig); m_out->putUInt32(4 + 7 + 4 + sigblob.size()); m_out->putString("ssh-dss"); m_out->putString(sigblob); } m_out->sendPacket(); } void SSH2Auth::requestInput() { if (m_tries > 0) { m_hostInfo->reset(); } m_in->getUInt8(); //flag QString name = QString::fromUtf8(m_in->getString()); #ifdef SSH_DEBUG qDebug() << "name: " << name; #endif QString instruction = QString::fromUtf8(m_in->getString()); #ifdef SSH_DEBUG qDebug() << "instruction: " << instruction; #endif QByteArray langTag = m_in->getString(); #ifdef SSH_DEBUG if (!langTag.isEmpty()) qDebug() << "langTag is not empty, ignore it"; #endif int numPrompts = m_in->getUInt32(); #ifdef SSH_DEBUG qDebug() << "number of prompts: " << numPrompts; #endif QList answerList; bool ok; for (int i = 0; i < numPrompts; i++) { QString prompt = QString::fromUtf8(m_in->getString()); QString answer; if (m_in->getUInt8() == 1) answer = m_hostInfo->answer(prompt, SSHInfo::Normal, &ok); else answer = m_hostInfo->answer(prompt, SSHInfo::Password, &ok); if (!ok) { #ifdef SSH_DEBUG qDebug() << "User canceled!"; #endif emit error("User canceled!"); return; } answerList << answer; } m_out->startPacket(SSH2_MSG_USERAUTH_INFO_RESPONSE); m_out->putUInt32(answerList.size()); #ifdef SSH_DEBUG qDebug() << "number of answers: " << answerList.size(); #endif foreach(QString answer, answerList) m_out->putString(answer.toUtf8()); m_out->sendPacket(); } SSH1Auth::SSH1Auth(SSH1InBuffer * in, SSH1OutBuffer * out, QObject *parent) : QObject(parent), m_phase(UserName), m_tries(0) { m_in = in; m_out = out; m_hostInfo = NULL; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(authPacketReceived(int))); } SSH1Auth::~SSH1Auth() {} void SSH1Auth::setHostInfo(HostInfo * hostInfo) { if (hostInfo->type() == HostInfo::SSH) { m_hostInfo = static_cast(hostInfo); } } void SSH1Auth::requestAuthService() { bool ok; QString username = m_hostInfo->userName(&ok); if (!ok) { #ifdef SSH_DEBUG qDebug() << "User canceled!"; #endif emit error("User canceled"); return; } m_out->startPacket(SSH_CMSG_USER); m_out->putString(username.toUtf8()); m_out->sendPacket(); } void SSH1Auth::authPacketReceived(int flag) { #ifdef SSH_DEBUG qDebug() << "flag " << flag; #endif // TODO: BANNER switch (flag) { case SSH_SMSG_SUCCESS: if (m_phase == UserName) qDebug("No auth needed"); #ifdef SSH_DEBUG else qDebug("passwordAuth succeed"); #endif emit authFinished(); break; case SSH_SMSG_FAILURE: if (m_phase == UserName) { #ifdef SSH_DEBUG qDebug("Prepare to auth"); #endif passwordAuth(); m_phase = PassWord; } else { qDebug("Wrong password?"); m_tries ++; passwordAuth(); } break; default: break; } } void SSH1Auth::passwordAuth() { //QString password = QString::fromLatin1 ( getpass ( "Password: " ) ); if (m_tries > 0) { if (m_tries > 3) { return; } m_hostInfo->reset(); } bool ok; QString password = m_hostInfo->password(&ok); if (!ok) { #ifdef SSH_DEBUG qDebug() << "User canceled!"; #endif emit error("User canceled"); return; } m_out->startPacket(SSH_CMSG_AUTH_PASSWORD); m_out->putString(password.toUtf8()); m_out->sendPacket(); } } #include "moc_auth.cpp" qterm-0.7.3/src/ssh/auth.h000066400000000000000000000043551332762052600153640ustar00rootroot00000000000000// // C++ Interface: sshauth // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_AUTH_H #define SSH_AUTH_H #include #include namespace QTerm { class HostInfo; class SSHInfo; class SSH2Key; class SSH2InBuffer; class SSH2OutBuffer; class SSH1InBuffer; class SSH1OutBuffer; /** @author hooey */ class SSH2Auth : public QObject { Q_OBJECT public: SSH2Auth(QByteArray & sessionID, SSH2InBuffer * in, SSH2OutBuffer * out, QObject *parent = 0); ~SSH2Auth(); void requestAuthService(); void setHostInfo(HostInfo * hostInfo); signals: void authFinished(); void error(const QString & message); private slots: void authPacketReceived(int flag); private: enum AuthMethod { None, PublicKey, Keyboard, Password }; enum KeyType { Unknown, SSH_RSA, SSH_DSS }; void noneAuth(); void publicKeyAuth(); void keyboardAuth(); void passwordAuth(); void requestInput(); void generateSign(); void failureHandler(); KeyType checkPrivateKeyType(const QByteArray & data); QString m_username; QByteArray m_method; AuthMethod m_authMethod; AuthMethod m_lastTried; SSH2InBuffer * m_in; SSH2OutBuffer * m_out; QByteArray m_sessionID; KeyType m_keyType; SSHInfo * m_hostInfo; SSH2Key * m_key; bool m_publicKeyAuthAvailable; // Give keyboardAuth and passwordAuth 3 tries. int m_tries; }; class SSH1Auth : public QObject { Q_OBJECT public: SSH1Auth(SSH1InBuffer * in, SSH1OutBuffer * out, QObject *parent = 0); ~SSH1Auth(); void requestAuthService(); void setHostInfo(HostInfo * hostInfo); signals: void authFinished(); void error(const QString & message); private slots: void authPacketReceived(int flag); private: enum Phase {UserName, PassWord}; Phase m_phase; void passwordAuth(); // void keyboardAuth(); void requestInput(); void generateSign(); void failureHandler(); SSH1InBuffer * m_in; SSH1OutBuffer * m_out; SSHInfo * m_hostInfo; int m_tries; }; } #endif // SSH_AUTH_H qterm-0.7.3/src/ssh/channel.cpp000066400000000000000000000222641332762052600163650ustar00rootroot00000000000000// // C++ Implementation: sshchannel // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "channel.h" #include "packet.h" #include "ssh1.h" #include "ssh2.h" #ifdef SSH_DEBUG #include extern void dumpData(const QByteArray & data); #endif namespace QTerm { SSH2Channel::SSH2Channel(SSH2InBuffer * in, SSH2OutBuffer * out, const QString & termType, int column, int row, QObject *parent) : QObject(parent), m_termType(termType), m_column(column), m_row(row) { m_in = in; m_out = out; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(channelPacketReceived(int))); } SSH2Channel::~SSH2Channel() { foreach(Channel * target, m_channelList) delete target; } void SSH2Channel::channelPacketReceived(int flag) { // TODO: other flags; switch (flag) { case SSH2_MSG_CHANNEL_OPEN_CONFIRMATION: channelOpened(); break; case SSH2_MSG_CHANNEL_OPEN_FAILURE: // TODO: handle failure qDebug("open channel failed"); break; case SSH2_MSG_CHANNEL_WINDOW_ADJUST: remoteWindowAdjusted(); break; case SSH2_MSG_CHANNEL_DATA: receiveData(); break; case SSH2_MSG_CHANNEL_EOF: #ifdef SSH_DEBUG qDebug("channel eof"); #endif break; case SSH2_MSG_CHANNEL_CLOSE: #ifdef SSH_DEBUG qDebug("channel closed"); #endif channelClosed(); break; case SSH2_MSG_CHANNEL_REQUEST: m_in->getUInt8(); #ifdef SSH_DEBUG qDebug() << "channel request"; qDebug() << "recipient channel " << m_in->getUInt32(); qDebug() << "request string " << m_in->getString(); qDebug() << "want reply " << m_in->getUInt8(); #endif break; default: qDebug("unknown packet: %d", flag); break; } } void SSH2Channel::receiveData() { m_in->getUInt8(); Channel * target = m_channelList.at(m_in->getUInt32()); QByteArray data = m_in->getString(); #ifdef SSH_DEBUG qDebug() << "===remote ID " << target->remoteID << target->remoteWindow; #endif // TODO: wait for window adjust? if (target->localWindow >= (size_t) data.size()) target->localWindow -= (size_t) data.size(); else qDebug("local window size is too small"); #ifdef SSH_DEBUG qDebug() << "local window size" << target->localWindow; #endif // qDebug() << data; target->data += data; if (target->localWindow < 2*target->localPacketSize) { adjustWindow(target->localID, 2*target->localPacketSize); target->localWindow += 2 * target->localPacketSize; } emit dataReady(target->localID); } void SSH2Channel::writeData(int id, const QByteArray & data) { if (m_channelList.at(id)->remoteWindow < (size_t) data.size()) { qDebug("remote window too small"); return; } m_channelList.at(id)->remoteWindow -= data.size(); m_out->startPacket(SSH2_MSG_CHANNEL_DATA); m_out->putUInt32(id); m_out->putString(data); m_out->sendPacket(); } void SSH2Channel::channelOpened() { m_in->getUInt8(); Channel * target = m_channelList.at(m_in->getUInt32()); target->remoteID = m_in->getUInt32(); target->remoteWindow = m_in->getUInt32(); target->remotePacketSize = m_in->getUInt32(); m_in->atEnd(); emit newChannel(target->localID); #ifdef SSH_DEBUG qDebug() << "ID: " << target->localID << target->remoteID << "windows size: " << target->localWindow << target->remoteWindow << "packet size: " << target->localPacketSize << target->remotePacketSize; #endif requestPty(target->localID); } void SSH2Channel::channelClosed() { m_in->getUInt8(); uint localID = m_in->getUInt32(); Channel * target = m_channelList.at(localID); m_out->startPacket(SSH2_MSG_CHANNEL_CLOSE); m_out->putUInt32(target->remoteID); m_out->sendPacket(); emit closeChannel(localID); m_channelList.removeAt(localID); } void SSH2Channel::adjustWindow(uint id, uint size) { m_out->startPacket(SSH2_MSG_CHANNEL_WINDOW_ADJUST); m_out->putUInt32(id); m_out->putUInt32(size); m_out->sendPacket(); } void SSH2Channel::remoteWindowAdjusted() { m_in->getUInt8(); uint id = m_in->getUInt32(); m_channelList.at(id)->remoteWindow += m_in->getUInt32(); #ifdef SSH_DEBUG qDebug() << "remote window: " << m_channelList.at(id)->remoteWindow; #endif } void SSH2Channel::requestPty(uint id) { // TODO: Env #ifdef SSH_DEBUG qDebug() << "request PTY"; #endif m_out->startPacket(SSH2_MSG_CHANNEL_REQUEST); m_out->putUInt32(id); m_out->putString("pty-req"); m_out->putUInt8(0); // TODO: "xterm" does not work somehow m_out->putString(m_termType.toLatin1()); // TODO: configuration m_out->putUInt32(m_column); m_out->putUInt32(m_row); m_out->putUInt32(0); m_out->putUInt32(0); m_out->putString(""); m_out->sendPacket(); #ifdef SSH_DEBUG qDebug() << "start shell"; #endif m_out->startPacket(SSH2_MSG_CHANNEL_REQUEST); m_out->putUInt32(id); m_out->putString("shell"); m_out->putUInt8(0); m_out->sendPacket(); emit channelReady(); } void SSH2Channel::requestWindowSize(int column, int row) { m_row = row; m_column = column; #ifdef SSH_DEBUG qDebug() << "request window size"; #endif m_out->startPacket(SSH2_MSG_CHANNEL_REQUEST); m_out->putUInt32(0); m_out->putString("window-change"); m_out->putUInt8(0); m_out->putUInt32(column); m_out->putUInt32(row); m_out->putUInt32(0); m_out->putUInt32(0); m_out->sendPacket(); } /*! \fn QTerm::SSH2Channel::openChannel(u_int32_t localID, SSH2InBuffer * in, SSH2OutBuffer * out) */ void SSH2Channel::openChannel() { Channel * newChannel = new Channel; newChannel->localID = m_channelList.size(); newChannel->localWindow = 4 * 32 * 1024; newChannel->localPacketSize = 32 * 1024; newChannel->data.resize(0); m_out->startPacket(SSH2_MSG_CHANNEL_OPEN); m_out->putString("session"); m_out->putUInt32(newChannel->localID); m_out->putUInt32(newChannel->localWindow); m_out->putUInt32(newChannel->localPacketSize); m_out->sendPacket(); m_channelList.append(newChannel); } QByteArray SSH2Channel::readData(int id, unsigned long size) { Channel * target = m_channelList.at(id); QByteArray data = target->data.left(size); target->data.remove(0, data.size()); return data; // m_channelList[id].data.resize(0); } unsigned long SSH2Channel::bytesAvailable(int id) { Channel * target = m_channelList.at(id); return target->data.size(); } SSH1Channel::SSH1Channel(SSH1InBuffer * in, SSH1OutBuffer * out, const QString & termType, int column, int row, QObject *parent) : QObject(parent), m_status(RequestPty), m_data(), m_termType(termType), m_column(column), m_row(row) { m_in = in; m_out = out; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(channelPacketReceived(int))); requestPty(); } SSH1Channel::~SSH1Channel() {} void SSH2Channel::setTermInfo(const QString & termType, int column, int row) { m_termType = termType; m_column = column; m_row = row; } void SSH1Channel::requestPty() { m_out->startPacket(SSH_CMSG_REQUEST_PTY); m_out->putString(m_termType.toLatin1()); m_out->putUInt32(m_row); m_out->putUInt32(m_column); m_out->putUInt32(0); m_out->putUInt32(0); m_out->putUInt8(0); m_out->sendPacket(); #ifdef SSH_DEBUG qDebug() << "Request pty"; #endif m_out->startPacket(SSH_CMSG_EXEC_SHELL); m_out->sendPacket(); } void SSH1Channel::requestWindowSize(int column, int row) { m_row = row; m_column = column; m_out->startPacket(SSH_CMSG_WINDOW_SIZE); m_out->putUInt32(row); m_out->putUInt32(column); m_out->putUInt32(0); m_out->putUInt32(0); m_out->sendPacket(); #ifdef SSH_DEBUG qDebug() << "Request window size"; #endif } void SSH1Channel::receiveData() { m_in->getUInt8(); QByteArray data = m_in->getString(); m_data += data; emit dataReady(); } QByteArray SSH1Channel::readData(unsigned long size) { QByteArray data = m_data.left(size); m_data.remove(0, data.size()); return data; } void SSH1Channel::writeData(const QByteArray & data) { m_out->startPacket(SSH_CMSG_STDIN_DATA); m_out->putString(data); m_out->sendPacket(); } unsigned long SSH1Channel::bytesAvailable() { return m_data.size(); } void SSH1Channel::channelPacketReceived(int flag) { // TODO: other flags; switch (flag) { case SSH_SMSG_SUCCESS: if (m_status == RequestPty) { #ifdef SSH_DEBUG qDebug() << "Pty request succeed"; #endif m_status = Interactive; emit channelReady(); } break; case SSH_SMSG_FAILURE: if (m_status == RequestPty) qDebug("Pty request failed"); break; case SSH_SMSG_STDOUT_DATA: case SSH_SMSG_STDERR_DATA: #ifdef SSH_DEBUG qDebug() << "new data available"; #endif receiveData(); break; default: qDebug("unknown packet: %d", flag); break; } } void SSH1Channel::setTermInfo(const QString & termType, int column, int row) { m_termType = termType; m_column = column; m_row = row; } } #include "moc_channel.cpp" qterm-0.7.3/src/ssh/channel.h000066400000000000000000000050241332762052600160250ustar00rootroot00000000000000// // C++ Interface: sshchannel // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_CHANNEL_H #define SSH_CHANNEL_H #include #include namespace QTerm { class SSH2InBuffer; class SSH2OutBuffer; class SSH1InBuffer; class SSH1OutBuffer; /** @author hooey */ class SSH2Channel : public QObject { Q_OBJECT public: SSH2Channel(SSH2InBuffer * in, SSH2OutBuffer * out, const QString & termType = "vt100", int column = 80, int row = 24, QObject *parent = 0); ~SSH2Channel(); void openChannel(); void channelClosed(); QByteArray readData(int id, unsigned long size); void writeData(int id, const QByteArray & data); unsigned long bytesAvailable(int id); void setTermInfo(const QString & termType, int column, int row); void requestWindowSize(int column, int row); signals: void dataReady(int id); void newChannel(int id); void channelReady(); void closeChannel(int id); private slots: void channelPacketReceived(int flag); private: typedef struct Channel_t { uint32_t localID; uint32_t localWindow; uint32_t localPacketSize; uint32_t remoteID; uint32_t remoteWindow; uint32_t remotePacketSize; QByteArray data; } Channel; void channelOpened(); void adjustWindow(uint id, uint size); void remoteWindowAdjusted(); void requestPty(uint id); void receiveData(); QList m_channelList; SSH2InBuffer * m_in; SSH2OutBuffer * m_out; QString m_termType; int m_column; int m_row; }; class SSH1Channel : public QObject { Q_OBJECT public: SSH1Channel(SSH1InBuffer * in, SSH1OutBuffer * out, const QString & termType = "vt100", int column = 80, int row = 24, QObject *parent = 0); ~SSH1Channel(); QByteArray readData(unsigned long size); void writeData(const QByteArray & data); unsigned long bytesAvailable(); void setTermInfo(const QString & termType, int column, int row); void requestWindowSize(int column, int row); signals: void dataReady(); void channelReady(); private slots: void channelPacketReceived(int flag); private: enum Status { RequestPty, Interactive, None }; void requestPty(); void receiveData(); Status m_status; SSH1InBuffer * m_in; SSH1OutBuffer * m_out; QByteArray m_data; QString m_termType; int m_column; int m_row; }; } #endif qterm-0.7.3/src/ssh/crc32.cpp000066400000000000000000000125611332762052600156700ustar00rootroot00000000000000/* $OpenBSD: crc32.c,v 1.9 2003/02/12 21:39:50 markus Exp $ */ /* * Copyright (c) 2003 Markus Friedl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "crc32.h" static const uint32_t crc32tab[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL }; uint32_t ssh_crc32(const uint8_t *buf, uint32_t size) { uint32_t i, crc; crc = 0; for (i = 0; i < size; i++) crc = crc32tab[(crc ^ buf[i]) & 0xff] ^(crc >> 8); return crc; } qterm-0.7.3/src/ssh/crc32.h000066400000000000000000000027551332762052600153410ustar00rootroot00000000000000/* $OpenBSD: crc32.h,v 1.14 2003/02/12 21:39:50 markus Exp $ */ /* * Copyright (c) 2003 Markus Friedl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SSH_CRC32_H #define SSH_CRC32_H #include #include uint32_t ssh_crc32(const uint8_t *, uint32_t); #endif qterm-0.7.3/src/ssh/kex.cpp000066400000000000000000000466771332762052600155620ustar00rootroot00000000000000// // C++ Implementation: sshkex // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // extern "C" { #include "libcrypto-compat.h" } #include "kex.h" #include "packet.h" #include "transport.h" #include "ssh1.h" #include "ssh2.h" #include "hostinfo.h" #include #include #ifdef SSH_DEBUG #include extern void dumpData(const QByteArray & data); #endif #define INTBLOB_LEN 20 #define SSH_CIPHER_3DES 3 namespace QTerm { SSH2Kex::SSH2Kex(SSH2InBuffer * in, SSH2OutBuffer * out, const QByteArray & server, const QByteArray & client, QObject * parent) : QObject(parent), m_kexList(), m_hostKeyList(), m_encList(), m_macList(), m_compList(), V_S(server), V_C(client), I_S(), I_C(), m_status(Init), m_sessionID() { m_kexList << "diffie-hellman-group14-sha1" << "diffie-hellman-group1-sha1"; m_hostKeyList << "ssh-rsa" << "ssh-dss"; m_encList << "aes128-cbc" << "aes128-ctr" << "3des-cbc"; m_macList << "hmac-sha1" << "hmac-md5"; m_compList << "none"; m_in = in; m_out = out; m_hostInfo = NULL; m_inTrans = NULL; m_outTrans = NULL; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(kexPacketReceived(int))); ctx = BN_CTX_new(); g = BN_new(); p = BN_new(); x = BN_new(); /* Random from client */ e = BN_new(); /* g^x mod p */ f = BN_new(); /* g^(Random from server) mod p */ K = BN_new(); /* The shared secret: f^x mod p */ } SSH2Kex::~SSH2Kex() { BN_clear_free(g); BN_clear_free(p); BN_clear_free(x); BN_clear_free(e); BN_clear_free(f); BN_clear_free(K); BN_CTX_free(ctx); } void SSH2Kex::setHostInfo(HostInfo * hostInfo) { if (hostInfo->type() == HostInfo::SSH) { m_hostInfo = static_cast(hostInfo); } } QString SSH2Kex::chooseAlgorithm(const QStringList & target, const QStringList & available) { QString algorithm; foreach(algorithm, available) { if (target.contains(algorithm)) { return algorithm; } } #ifdef SSH_DEBUG qDebug() << "no algorithm available!"; #endif emit error("No proper algorithm available!"); return QString(); } void SSH2Kex::sendKex() { // I_S = in->buffer(); // m_encCS = m_encSC = "3des-cbc"; // m_macCS = m_macSC = "hmac-sha1"; // m_compCS = m_compSC = "none"; QByteArray cookie; m_out->startPacket(SSH2_MSG_KEXINIT); cookie.resize(16); RAND_bytes((unsigned char *) cookie.data(), 16); m_out->putData(cookie); m_out->putString(m_kexList.join(",").toUtf8()); m_out->putString(m_hostKeyList.join(",").toUtf8()); m_out->putString(m_encList.join(",").toUtf8()); m_out->putString(m_encList.join(",").toUtf8()); m_out->putString(m_macList.join(",").toUtf8()); m_out->putString(m_macList.join(",").toUtf8()); m_out->putString(m_compList.join(",").toUtf8()); m_out->putString(m_compList.join(",").toUtf8()); m_out->putString(""); m_out->putString(""); m_out->putUInt8(0); m_out->putUInt32(0); I_C = m_out->buffer(); m_out->sendPacket(); m_status = KexSent; } void SSH2Kex::sendKexDH(const QString & dhtype) { if (dhtype == "diffie-hellman-group14-sha1") { DHGroup14(); } else if (dhtype == "diffie-hellman-group1-sha1") { DHGroup1(); } m_out->startPacket(SSH2_MSG_KEXDH_INIT); m_out->putBN(e); m_out->sendPacket(); } void SSH2Kex::DHGroup1() { #ifdef SSH_DEBUG qDebug() << "diffie-hellman-group1-sha1"; #endif unsigned char p_value[128] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; BN_set_word(g, 2); BN_bin2bn(p_value, 128, p); BN_rand(x, 128, 0, 0); BN_mod_exp(e, g, x, p, ctx); } void SSH2Kex::DHGroup14() { #ifdef SSH_DEBUG qDebug() << "diffie-hellman-group14-sha1"; #endif unsigned char p_value[256] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAC, 0xAA, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; BN_set_word(g, 2); BN_bin2bn(p_value, 256, p); BN_rand(x, 256, 0, 0); BN_mod_exp(e, g, x, p, ctx); } void SSH2Kex::readKexInit() { m_in->getUInt8(); m_in->getData(16); QStringList nameList; nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString kexType = chooseAlgorithm(nameList, m_kexList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString hostKeyType = chooseAlgorithm(nameList, m_hostKeyList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString encTypeCS = chooseAlgorithm(nameList, m_encList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString encTypeSC = chooseAlgorithm(nameList, m_encList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString macTypeCS = chooseAlgorithm(nameList, m_macList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString macTypeSC = chooseAlgorithm(nameList, m_macList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString compTypeCS = chooseAlgorithm(nameList, m_compList); nameList = QString::fromUtf8(m_in->getString()).split(",", QString::SkipEmptyParts); QString compTypeSC = chooseAlgorithm(nameList, m_compList); //TODO: language? if (encTypeCS.isEmpty() || macTypeCS.isEmpty() || compTypeCS.isEmpty()) { return; } if (encTypeSC.isEmpty() || macTypeSC.isEmpty() || compTypeSC.isEmpty()) { return; } m_inTrans = new SSH2Transport(encTypeSC, macTypeSC, compTypeSC); m_outTrans = new SSH2Transport(encTypeCS, macTypeCS, compTypeCS); I_S = m_in->buffer(); if (m_status == Init) sendKex(); sendKexDH(kexType); } void SSH2Kex::kexPacketReceived(int flag) { switch (flag) { case SSH2_MSG_KEXINIT: readKexInit(); break; case SSH2_MSG_KEXDH_REPLY: readKexReply(); break; case SSH2_MSG_NEWKEYS: if (m_status == NewKeysSent) { m_in->setTransport(m_inTrans); m_out->setTransport(m_outTrans); emit kexFinished(m_sessionID); } else m_status = NewKeysReceived; break; default: break; } } void SSH2Kex::readKexReply() { m_in->getUInt8(); K_S = m_in->getString(); if (!m_hostInfo->checkHostKey(K_S)) { qDebug("Reject the host key"); emit error("hostkey does not match!"); return; } m_in->getBN(f); QByteArray sign = m_in->getString(); m_in->atEnd(); BN_mod_exp(K, f, x, p, ctx); SSH2OutBuffer tmp(NULL); tmp.startPacket(); tmp.putString(V_C.replace("\r","").replace("\n","")); tmp.putString(V_S.replace("\r","").replace("\n","")); tmp.putString(I_C); tmp.putString(I_S); tmp.putString(K_S); tmp.putBN(e); tmp.putBN(f); tmp.putBN(K); QByteArray key = QCryptographicHash::hash(tmp.buffer(), QCryptographicHash::Sha1); if (!verifySignature(key, K_S, sign)) { qDebug("Signature check error"); emit error("Signature check error!"); return; } m_out->startPacket(SSH2_MSG_NEWKEYS); m_out->sendPacket(); if (m_sessionID.isEmpty()) m_sessionID = key; initTransport(key); if (m_status == NewKeysReceived) { m_in->setTransport(m_inTrans); m_out->setTransport(m_outTrans); emit kexFinished(m_sessionID); } else m_status = NewKeysSent; } void SSH2Kex::initTransport(const QByteArray & hash) { // client to server QByteArray iv = deriveKey(hash, m_sessionID, 'A', m_outTrans->ivLen()); QByteArray secret = deriveKey(hash, m_sessionID, 'C', m_outTrans->secretLen()); QByteArray key = deriveKey(hash, m_sessionID, 'E', m_outTrans->keyLen()); #ifdef SSH_DEBUG // dumpData ( key ); #endif m_outTrans->initEncryption(secret, iv, SSH2Encryption::Encryption); m_outTrans->initMAC(key); //server to client iv = deriveKey(hash, m_sessionID, 'B', m_inTrans->ivLen()); secret = deriveKey(hash, m_sessionID, 'D', m_inTrans->secretLen()); key = deriveKey(hash, m_sessionID, 'F', m_inTrans->keyLen()); #ifdef SSH_DEBUG // dumpData ( key ); #endif m_inTrans->initEncryption(secret, iv, SSH2Encryption::Decryption); m_inTrans->initMAC(key); } bool SSH2Kex::verifySignature(const QByteArray & hash, const QByteArray & hostKey, const QByteArray & signature) { int ret = 0; SSH2InBuffer tmp(NULL); tmp.buffer().append(hostKey); QByteArray type = tmp.getString(); #ifdef SSH_DEBUG qDebug() << "key type: " << type; #endif DSA *dsa = DSA_new(); RSA *rsa = RSA_new(); BIGNUM * e = BN_new(); BIGNUM * n = BN_new(); BIGNUM * p = BN_new(); BIGNUM * q = BN_new(); BIGNUM * g = BN_new(); BIGNUM * pub_key = BN_new(); if (type == "ssh-rsa") { tmp.getBN(e); tmp.getBN(n); tmp.atEnd(); RSA_set0_key(rsa, n, e, NULL); qDebug() << "key size: " << RSA_size(rsa); } if (type == "ssh-dss") { #ifdef SSH_DEBUG qDebug() << "generate DSA key"; #endif tmp.getBN(p); tmp.getBN(q); tmp.getBN(g); tmp.getBN(pub_key); tmp.atEnd(); DSA_set0_pqg(dsa, p, q, g); DSA_set0_key(dsa, pub_key, NULL); } tmp.buffer().append(signature); type.resize(0); type = tmp.getString(); QByteArray signBlob = tmp.getString(); #ifdef SSH_DEBUG //dumpData ( signBlob ); #endif if (type == "ssh-rsa") { if (signBlob.size() != RSA_size(rsa)) { qDebug() << "TODO: key size mismatch"; } QByteArray digest = QCryptographicHash::hash(hash, QCryptographicHash::Sha1); ret = RSA_verify(NID_sha1, (const unsigned char *) digest.data(), digest.size(), (const unsigned char *)signBlob.data(), signBlob.size(), rsa); qDebug() << "Verify RSA: " << ret; } if (type == "ssh-dss") { #ifdef SSH_DEBUG qDebug() << "generate DSA signature"; #endif DSA_SIG * sig; sig = DSA_SIG_new(); BIGNUM * r = BN_new(); BIGNUM * s = BN_new(); BN_bin2bn((const unsigned char *) signBlob.data(), INTBLOB_LEN, r); BN_bin2bn((const unsigned char *) signBlob.data() + INTBLOB_LEN, INTBLOB_LEN, s); DSA_SIG_set0(sig, r, s); QByteArray digest = QCryptographicHash::hash(hash, QCryptographicHash::Sha1); ret = DSA_do_verify((const unsigned char *) digest.data(), digest.size(), sig, dsa); DSA_SIG_free(sig); } DSA_free(dsa); RSA_free(rsa); if (ret == 1) return true; else if (ret == 0) qDebug("incorrect"); else qDebug("error: %d", ret); return false; } QByteArray SSH2Kex::deriveKey(const QByteArray & hash, const QByteArray & sessionID, char id, uint need) { SSH2OutBuffer tmp(0); tmp.startPacket(); tmp.putBN(K); QCryptographicHash sha1Hash(QCryptographicHash::Sha1); sha1Hash.addData(tmp.buffer()); sha1Hash.addData(hash); sha1Hash.addData(&id, 1); sha1Hash.addData(sessionID); QByteArray digest = sha1Hash.result(); for (uint have = 20; need > have; have += need) { sha1Hash.reset(); sha1Hash.addData(tmp.buffer()); sha1Hash.addData(hash); sha1Hash.addData(digest); digest += sha1Hash.result(); } // digest.truncate ( need ); return digest; } SSH1Kex::SSH1Kex(SSH1InBuffer * in, SSH1OutBuffer * out, QObject * parent) : QObject(parent), m_cookie(), m_sessionID(), m_sessionKey() { m_in = in; m_out = out; // m_inTrans = NULL; // m_outTrans = NULL; connect(m_in, SIGNAL(packetReady(int)), this, SLOT(kexPacketReceived(int))); } SSH1Kex::~SSH1Kex() {} void SSH1Kex::kexPacketReceived(int flag) { #ifdef SSH_DEBUG qDebug() << "flag: " << flag; #endif switch (flag) { case SSH_SMSG_PUBLIC_KEY: readKex(); break; case SSH_SMSG_SUCCESS: // m_out->startPacket(SSH_CMSG_USER); // m_out->putString("hooey"); // m_out->sendPacket(); emit kexFinished(); break; default: { m_in->getUInt8(); QString error = m_in->getString(); qDebug("unknown packet"); qDebug("error: %s",error.toLatin1().data()); break; } } } void SSH1Kex::readKex() { m_in->getUInt8(); m_cookie = m_in->getData(8); int serverKeyLength = m_in->getUInt32(); #ifdef SSH_DEBUG qDebug() << "length" << serverKeyLength; #endif RSA * serverKey = RSA_new(); BIGNUM * s_e = BN_new(); BIGNUM * s_n = BN_new(); m_in->getBN(s_e); m_in->getBN(s_n); RSA_set0_key(serverKey, s_n, s_e, NULL); QByteArray server_n(BN_num_bytes(s_n), 0); BN_bn2bin(s_n, (unsigned char *) server_n.data()); // TODO: rbits = BN_num_bits(d_servKey->d_rsa->n); int hostKeyLength = m_in->getUInt32(); #ifdef SSH_DEBUG qDebug() << "length" << hostKeyLength; #endif RSA * hostKey = RSA_new(); BIGNUM * h_e = BN_new(); BIGNUM * h_n = BN_new(); m_in->getBN(h_e); m_in->getBN(h_n); RSA_set0_key(hostKey, h_n, h_e, NULL); QByteArray host_n(BN_num_bytes(h_n), 0); BN_bn2bin(h_n, (unsigned char *) host_n.data()); m_sessionID = QCryptographicHash::hash(host_n + server_n + m_cookie, QCryptographicHash::Md5); #ifdef SSH_DEBUG dumpData(m_sessionID); #endif m_sessionKey.resize(32); RAND_bytes((unsigned char *) m_sessionKey.data(), 32); initEncryption(m_sessionKey); #ifdef SSH_DEBUG dumpData(m_sessionKey); #endif BIGNUM * key = BN_new(); BN_set_word(key, 0); for (int i = 0; i < 32; i++) { BN_lshift(key, key, 8); if (i < 16) BN_add_word(key, ((u_char)m_sessionKey[i]) ^((u_char)m_sessionID[i])); else BN_add_word(key, (u_char)m_sessionKey[i]); } if (BN_cmp(s_n, h_n) < 0) { publicEncrypt(key, key, serverKey); publicEncrypt(key, key, hostKey); } else { publicEncrypt(key, key, hostKey); publicEncrypt(key, key, serverKey); } uint serverFlag = m_in->getUInt32(); uint serverCiphers = m_in->getUInt32(); uint serverAuth = m_in->getUInt32(); if ((serverCiphers & (1 << SSH_CIPHER_3DES)) != 0) qDebug("We can use 3DES"); // qDebug() << serverFlag << serverCiphers << serverAuth; m_in->atEnd(); m_out->startPacket(SSH_CMSG_SESSION_KEY); m_out->putUInt8(SSH_CIPHER_3DES); m_out->putData(m_cookie); m_out->putBN(key); m_out->putUInt32(1); m_out->sendPacket(); m_in->setEncryption(m_inEncrypt); m_out->setEncryption(m_outEncrypt); } void SSH1Kex::publicEncrypt(BIGNUM *out, BIGNUM *in, RSA *key) { QByteArray inbuf; QByteArray outbuf; int len, ilen, olen; const BIGNUM * e; const BIGNUM * n; RSA_get0_key(key, &n, &e, NULL); if (BN_num_bits(e) < 2 || !BN_is_odd(e)) qDebug("rsa_public_encrypt() exponent too small or not odd"); olen = BN_num_bytes(n); outbuf.resize(olen); ilen = BN_num_bytes(in); inbuf.resize(ilen); BN_bn2bin(in, (unsigned char *) inbuf.data()); // FIXME: failure handler if ((len = RSA_public_encrypt(ilen, (unsigned char *) inbuf.data(), (unsigned char *) outbuf.data(), key, RSA_PKCS1_PADDING)) <= 0) qDebug("rsa_public_encrypt() failed"); if (BN_bin2bn((unsigned char *) outbuf.data(), len, out) == NULL) qDebug("rsa_public_encrypt: BN_bin2bn failed"); } void SSH1Kex::initEncryption(const QByteArray & key) { m_inEncrypt = new SSH1Encryption(SSH1Encryption::Decryption, key); m_outEncrypt = new SSH1Encryption(SSH1Encryption::Encryption, key); } } #include "moc_kex.cpp" qterm-0.7.3/src/ssh/kex.h000066400000000000000000000057041332762052600152110ustar00rootroot00000000000000// // C++ Interface: sshkex // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_KEX_H #define SSH_KEX_H #include #include #include namespace QTerm { class SSH2InBuffer; class SSH2OutBuffer; class SSH1InBuffer; class SSH1OutBuffer; class SSH2Transport; class SSH1Encryption; class HostInfo; class SSHInfo; /** @author hooey */ class SSH2Kex : public QObject { Q_OBJECT public: SSH2Kex(SSH2InBuffer * in, SSH2OutBuffer * out, const QByteArray & server, const QByteArray & client, QObject * parent = 0); ~SSH2Kex(); void sendKex(); void startBinary(); void setHostInfo(HostInfo * hostInfo); signals: void kexFinished(const QByteArray & sessionID); void error(const QString & message); void updateHostKey(const QString & hostKey); public slots: void kexPacketReceived(int flag); private: bool verifySignature(const QByteArray & hash, const QByteArray & hostKey, const QByteArray & signature); QByteArray deriveKey(const QByteArray & hash, const QByteArray & sessionID, char id, uint needed); void sendKexDH(const QString & dhtype); void readKexInit(); void readKexReply(); void DHGroup1(); void DHGroup14(); QString chooseAlgorithm(const QStringList & target, const QStringList & available); void initTransport(const QByteArray & hash); enum Status { Init, KexSent, NewKeysReceived, NewKeysSent }; QStringList m_kexList; QStringList m_hostKeyList; QStringList m_encList; QStringList m_macList; QStringList m_compList; BN_CTX *ctx; BIGNUM *g; BIGNUM *p; BIGNUM *x; /* Random from client */ BIGNUM *e; /* g^x mod p */ BIGNUM *f; /* g^(Random from server) mod p */ BIGNUM *K; /* The shared secret: f^x mod p */ QByteArray V_S; QByteArray V_C; QByteArray I_S; QByteArray I_C; QByteArray K_S; Status m_status; QByteArray m_sessionID; SSHInfo * m_hostInfo; SSH2InBuffer * m_in; SSH2OutBuffer * m_out; SSH2Transport * m_inTrans; SSH2Transport * m_outTrans; }; class SSH1Kex : public QObject { Q_OBJECT public: SSH1Kex(SSH1InBuffer * in, SSH1OutBuffer * out, QObject * parent = 0); ~SSH1Kex(); void sendKex(); void startBinary(); signals: void kexFinished(); void error(const QString & message); public slots: void kexPacketReceived(int flag); private: void readKex(); void publicEncrypt(BIGNUM *out, BIGNUM *in, RSA *key); void initEncryption(const QByteArray & hash); enum Status { Init, KexSent, NewKeysReceived, NewKeysSent }; Status m_status; QByteArray m_cookie; QByteArray m_sessionID; QByteArray m_sessionKey; SSH1InBuffer * m_in; SSH1OutBuffer * m_out; SSH1Encryption * m_inEncrypt; SSH1Encryption * m_outEncrypt; }; } #endif // SSH_KEX_H qterm-0.7.3/src/ssh/key.cpp000066400000000000000000000020621332762052600155370ustar00rootroot00000000000000// // C++ Implementation: ssh2key // // Description: // // // Author: hooey , (C) 2016 // // Copyright: See COPYING file that comes with this distribution // // #include "key.h" #include "packet.h" namespace QTerm { SSH2RSAKey::SSH2RSAKey(RSA * keyData) :SSH2Key() { m_key = keyData; } SSH2RSAKey::~SSH2RSAKey() { RSA_free(m_key); } QByteArray SSH2RSAKey::publicKey() { const BIGNUM *e, *n; SSH2OutBuffer tmp(NULL); tmp.startPacket(); tmp.putString("ssh-rsa"); RSA_get0_key(m_key, &n, &e, NULL); tmp.putBN(e); tmp.putBN(n); return tmp.buffer(); } SSH2DSAKey::SSH2DSAKey(DSA * keyData) :SSH2Key() { m_key = keyData; } SSH2DSAKey::~SSH2DSAKey() { DSA_free(m_key); } QByteArray SSH2DSAKey::publicKey() { const BIGNUM *p, *q, *g, *n; SSH2OutBuffer tmp(NULL); tmp.startPacket(); tmp.putString("ssh-dss"); DSA_get0_pqg(m_key, &p, &q, &g); DSA_get0_key(m_key, &n, NULL); tmp.putBN(p); tmp.putBN(q); tmp.putBN(g); tmp.putBN(n); return tmp.buffer(); } } qterm-0.7.3/src/ssh/key.h000066400000000000000000000015161332762052600152070ustar00rootroot00000000000000// // C++ Interface: sshkey // // Description: // // // Author: hooey , (C) 2016 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_KEY_H #define SSH_KEY_H extern "C" { #include "libcrypto-compat.h" } #include namespace QTerm { class SSH2Key { public: SSH2Key() {} virtual ~SSH2Key() {} virtual QByteArray publicKey() = 0; }; class SSH2RSAKey : public SSH2Key { public: SSH2RSAKey(RSA * keyData); virtual ~SSH2RSAKey(); virtual QByteArray publicKey(); RSA * privateKey() {return m_key;} private: RSA * m_key; }; class SSH2DSAKey : public SSH2Key { public: SSH2DSAKey(DSA * keyData); virtual ~SSH2DSAKey(); virtual QByteArray publicKey(); DSA * privateKey() {return m_key;} private: DSA * m_key; }; } #endif // SSH_KEY_H qterm-0.7.3/src/ssh/libcrypto-compat.c000066400000000000000000000162021332762052600177000ustar00rootroot00000000000000/* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #include "libcrypto-compat.h" #if OPENSSL_VERSION_NUMBER < 0x10100000L #include #include static void *OPENSSL_zalloc(size_t num) { void *ret = OPENSSL_malloc(num); if (ret != NULL) memset(ret, 0, num); return ret; } int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) { /* If the fields n and e in r are NULL, the corresponding input * parameters MUST be non-NULL for n and e. d may be * left NULL (in case only the public key is used). */ if ((r->n == NULL && n == NULL) || (r->e == NULL && e == NULL)) return 0; if (n != NULL) { BN_free(r->n); r->n = n; } if (e != NULL) { BN_free(r->e); r->e = e; } if (d != NULL) { BN_free(r->d); r->d = d; } return 1; } int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q) { /* If the fields p and q in r are NULL, the corresponding input * parameters MUST be non-NULL. */ if ((r->p == NULL && p == NULL) || (r->q == NULL && q == NULL)) return 0; if (p != NULL) { BN_free(r->p); r->p = p; } if (q != NULL) { BN_free(r->q); r->q = q; } return 1; } int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp) { /* If the fields dmp1, dmq1 and iqmp in r are NULL, the corresponding input * parameters MUST be non-NULL. */ if ((r->dmp1 == NULL && dmp1 == NULL) || (r->dmq1 == NULL && dmq1 == NULL) || (r->iqmp == NULL && iqmp == NULL)) return 0; if (dmp1 != NULL) { BN_free(r->dmp1); r->dmp1 = dmp1; } if (dmq1 != NULL) { BN_free(r->dmq1); r->dmq1 = dmq1; } if (iqmp != NULL) { BN_free(r->iqmp); r->iqmp = iqmp; } return 1; } void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) { if (n != NULL) *n = r->n; if (e != NULL) *e = r->e; if (d != NULL) *d = r->d; } void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q) { if (p != NULL) *p = r->p; if (q != NULL) *q = r->q; } void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp) { if (dmp1 != NULL) *dmp1 = r->dmp1; if (dmq1 != NULL) *dmq1 = r->dmq1; if (iqmp != NULL) *iqmp = r->iqmp; } void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g) { if (p != NULL) *p = d->p; if (q != NULL) *q = d->q; if (g != NULL) *g = d->g; } int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g) { /* If the fields p, q and g in d are NULL, the corresponding input * parameters MUST be non-NULL. */ if ((d->p == NULL && p == NULL) || (d->q == NULL && q == NULL) || (d->g == NULL && g == NULL)) return 0; if (p != NULL) { BN_free(d->p); d->p = p; } if (q != NULL) { BN_free(d->q); d->q = q; } if (g != NULL) { BN_free(d->g); d->g = g; } return 1; } void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key) { if (pub_key != NULL) *pub_key = d->pub_key; if (priv_key != NULL) *priv_key = d->priv_key; } int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key) { /* If the field pub_key in d is NULL, the corresponding input * parameters MUST be non-NULL. The priv_key field may * be left NULL. */ if (d->pub_key == NULL && pub_key == NULL) return 0; if (pub_key != NULL) { BN_free(d->pub_key); d->pub_key = pub_key; } if (priv_key != NULL) { BN_free(d->priv_key); d->priv_key = priv_key; } return 1; } void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) { if (pr != NULL) *pr = sig->r; if (ps != NULL) *ps = sig->s; } int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s) { if (r == NULL || s == NULL) return 0; BN_clear_free(sig->r); BN_clear_free(sig->s); sig->r = r; sig->s = s; return 1; } void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) { if (pr != NULL) *pr = sig->r; if (ps != NULL) *ps = sig->s; } int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s) { if (r == NULL || s == NULL) return 0; BN_clear_free(sig->r); BN_clear_free(sig->s); sig->r = r; sig->s = s; return 1; } EVP_MD_CTX *EVP_MD_CTX_new(void) { return OPENSSL_zalloc(sizeof(EVP_MD_CTX)); } static void OPENSSL_clear_free(void *str, size_t num) { if (str == NULL) return; if (num) OPENSSL_cleanse(str, num); OPENSSL_free(str); } /* This call frees resources associated with the context */ int EVP_MD_CTX_reset(EVP_MD_CTX *ctx) { if (ctx == NULL) return 1; /* * Don't assume ctx->md_data was cleaned in EVP_Digest_Final, because * sometimes only copies of the context are ever finalised. */ if (ctx->digest && ctx->digest->cleanup && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) ctx->digest->cleanup(ctx); if (ctx->digest && ctx->digest->ctx_size && ctx->md_data && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); } EVP_PKEY_CTX_free(ctx->pctx); #ifndef OPENSSL_NO_ENGINE ENGINE_finish(ctx->engine); #endif OPENSSL_cleanse(ctx, sizeof(*ctx)); return 1; } void EVP_MD_CTX_free(EVP_MD_CTX *ctx) { EVP_MD_CTX_reset(ctx); OPENSSL_free(ctx); } HMAC_CTX *HMAC_CTX_new(void) { HMAC_CTX *ctx = OPENSSL_zalloc(sizeof(HMAC_CTX)); if (ctx != NULL) { if (!HMAC_CTX_reset(ctx)) { HMAC_CTX_free(ctx); return NULL; } } return ctx; } static void hmac_ctx_cleanup(HMAC_CTX *ctx) { EVP_MD_CTX_reset(&ctx->i_ctx); EVP_MD_CTX_reset(&ctx->o_ctx); EVP_MD_CTX_reset(&ctx->md_ctx); ctx->md = NULL; ctx->key_length = 0; OPENSSL_cleanse(ctx->key, sizeof(ctx->key)); } void HMAC_CTX_free(HMAC_CTX *ctx) { if (ctx != NULL) { hmac_ctx_cleanup(ctx); EVP_MD_CTX_free(&ctx->i_ctx); EVP_MD_CTX_free(&ctx->o_ctx); EVP_MD_CTX_free(&ctx->md_ctx); OPENSSL_free(ctx); } } int HMAC_CTX_reset(HMAC_CTX *ctx) { HMAC_CTX_init(ctx); return 1; } EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void) { return OPENSSL_zalloc(sizeof(EVP_CIPHER_CTX)); } void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx) { /* EVP_CIPHER_CTX_reset(ctx); alias */ EVP_CIPHER_CTX_init(ctx); OPENSSL_free(ctx); } #endif /* OPENSSL_VERSION_NUMBER */ qterm-0.7.3/src/ssh/libcrypto-compat.h000066400000000000000000000030471332762052600177100ustar00rootroot00000000000000#ifndef LIBCRYPTO_COMPAT_H #define LIBCRYPTO_COMPAT_H #include #include #include #include #include #include #include #if OPENSSL_VERSION_NUMBER < 0x10100000L int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp); void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key); int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); EVP_MD_CTX *EVP_MD_CTX_new(void); void EVP_MD_CTX_free(EVP_MD_CTX *ctx); HMAC_CTX *HMAC_CTX_new(void); int HMAC_CTX_reset(HMAC_CTX *ctx); void HMAC_CTX_free(HMAC_CTX *ctx); #endif /* OPENSSL_VERSION_NUMBER */ #endif /* LIBCRYPTO_COMPAT_H */ qterm-0.7.3/src/ssh/packet.cpp000066400000000000000000000364211332762052600162240ustar00rootroot00000000000000// // C++ Implementation: sshpacket // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "packet.h" #include "crc32.h" #include #ifdef SSH_DEBUG #include #endif uint32_t get_u32(const void * vp) { uint32_t v; const uint8_t * p = (const uint8_t *) vp; v = (uint32_t) p[0] << 24; v |= (uint32_t) p[1] << 16; v |= (uint32_t) p[2] << 8; v |= (uint32_t) p[3]; return v; } uint16_t get_u16(const void *vp) { const uint8_t *p = (const uint8_t *) vp; uint16_t v; v = (uint16_t) p[0] << 8; v |= (uint16_t) p[1]; return (v); } void put_u32(void * vp, uint32_t v) { uint8_t * p = (uint8_t *) vp; p[0] = (uint8_t)(v >> 24) & 0xff; p[1] = (uint8_t)(v >> 16) & 0xff; p[2] = (uint8_t)(v >> 8) & 0xff; p[3] = (uint8_t) v & 0xff; } void put_u16(void * vp, uint16_t v) { uint8_t * p = (uint8_t *) vp; p[0] = (uint8_t)(v >> 8) & 0xff; p[1] = (uint8_t) v & 0xff; } #ifdef SSH_DEBUG void dumpData(const QByteArray & data) { int size = data.size(); qDebug() << "dump " << size << " bytes"; for (int i = 0; i < size; i++) { printf("%02x ", (unsigned char) data[i]); if (i > 1 && (i + 1) % 16 == 0) printf("\n"); } printf("\n"); } #endif namespace QTerm { SSH2InBuffer::SSH2InBuffer(SocketPrivate * plainSocket, QObject * parent) : QObject(parent), m_in(), m_out(), m_buf(this), m_sequenceNumber(0),m_incompletePacket() { m_buf.setBuffer(&m_out); m_buf.open(QBuffer::ReadWrite); m_socket = plainSocket; m_transport = NULL; if (m_socket != NULL) connect(m_socket, SIGNAL(readyRead()), this, SLOT(parseData())); } SSH2InBuffer::~SSH2InBuffer() {} void SSH2InBuffer::parseData() { if (m_socket == NULL) return; int blockSize = m_transport == NULL ? 8 : m_transport->blockSize(); int macLen = m_transport == NULL ? 0 : m_transport->macLen(); qint64 nbyte = m_socket->bytesAvailable(); QByteArray from_socket = m_socket->readBlock(nbyte); // Add data into the buffer m_in.append(from_socket); // Parse packet while (m_in.size() > 8) { // qDebug() << n << "bytes available"; // ---------------------------------------------------------------------- // | n = packet length | p = padding length | payload | padding | mac | // ---------------------------------------------------------------------- // | 4 | 1 | n - p - 5 | p | | // ---------------------------------------------------------------------- QByteArray firstBlock; if (m_incompletePacket.isEmpty()) { if (m_transport != NULL) firstBlock = m_transport->crypt(m_in.left(blockSize)); else firstBlock = m_in.left(blockSize); } else { firstBlock = m_incompletePacket; } #ifdef SSH_DEBUG dumpData(firstBlock); #endif // TODO: sanity check for packet length int length = get_u32(firstBlock.data()); uint8_t padding = firstBlock[4]; // qDebug() << "packet length " << length << " padding length " << padding; // TODO: die gracefully if (length < 0) { qDebug("something is wrong"); emit error("SSH2InBuffer: negative packet length"); return; } if ((length + 4 + macLen) > m_in.size()) { qDebug("packet not complete"); m_incompletePacket = firstBlock; return; } // Get the total encrypted data QByteArray source; if ((length + 4) > blockSize) { if (m_transport != NULL) source = m_transport->crypt(m_in.mid(blockSize, length + 4 - blockSize)); else source = m_in.mid(blockSize, length + 4 - blockSize); } QByteArray target = firstBlock + source; if (m_transport != NULL) { QByteArray tmp(4, 0); put_u32(tmp.data(), m_sequenceNumber); QByteArray cMac = m_transport->mac(tmp + target); QByteArray sMac = m_in.mid(length + 4, macLen); // FIXME: failure handler if (cMac != sMac) qDebug("mac does not match"); } m_out = target.mid(5, length - padding - 1); m_buf.reset(); m_incompletePacket.clear(); int flag = m_out[0]; // TODO: remove the mac; if (m_transport != NULL) m_in.remove(0, length + 4 + macLen); else m_in.remove(0, length + 4); // qDebug() << "Read " << nread << "bytes data"; // dumpData ( m_out ); m_sequenceNumber++; emit packetReady(flag); } } uint32_t SSH2InBuffer::getUInt32() { char tmp[4]; m_buf.read(tmp, 4); return get_u32(tmp); } uint8_t SSH2InBuffer::getUInt8() { uint8_t v; m_buf.getChar((char*) &v); return v; } QByteArray SSH2InBuffer::getData(uint32_t size) { QByteArray data(size, 0); m_buf.read(data.data(), size); return data; } QByteArray SSH2InBuffer::getString() { uint32_t length = getUInt32(); return getData(length); } void SSH2InBuffer::getBN(BIGNUM * value) { QByteArray buf = getString(); if (buf.size() > 0 && (buf[0] & 0x80)) { qDebug("getBN: negative numbers not supported"); return; } if (buf.size() > 8 * 1024) { qDebug("getBN: cannot handle BN of size: %d", buf.size()); return; } if (BN_bin2bn((const unsigned char *) buf.data(), buf.size(), value) == NULL) { qDebug("getBN: BN_bin2bn failed"); return; } } bool SSH2InBuffer::atEnd() { if (m_buf.bytesAvailable() > 0) { qDebug("WARNING: extra data"); return false; } #ifdef SSH_DEBUG qDebug() << "At the end of the buffer"; #endif return true; } QByteArray & SSH2InBuffer::buffer() { return m_out; } SSH1InBuffer::SSH1InBuffer(SocketPrivate * plainSocket, QObject * parent) : QObject(parent), m_in(), m_out(), m_buf(this) { m_buf.setBuffer(&m_out); m_buf.open(QBuffer::ReadWrite); m_socket = plainSocket; m_encryption = NULL; if (m_socket != NULL) connect(m_socket, SIGNAL(readyRead()), this, SLOT(parseData())); } SSH1InBuffer::~SSH1InBuffer() {} uint32_t SSH1InBuffer::getUInt32() { char tmp[4]; m_buf.read(tmp, 4); return get_u32(tmp); } uint8_t SSH1InBuffer::getUInt8() { uint8_t v; m_buf.getChar((char*) &v); return v; } QByteArray SSH1InBuffer::getData(uint32_t size) { QByteArray data(size, 0); m_buf.read(data.data(), size); return data; } QByteArray SSH1InBuffer::getString() { uint32_t length = getUInt32(); return getData(length); } void SSH1InBuffer::getBN(BIGNUM * value) { char tmp[2]; m_buf.read(tmp, 2); int bits = get_u16(tmp); int bytes = (bits + 7) / 8; QByteArray buf = getData(bytes); #ifdef SSH_DEBUG qDebug() << "BN length: " << bytes; #endif // if ( buf.size() > 0 && ( buf[0] & 0x80 ) ) { // qDebug() << "getBN: negative numbers not supported"; // return; // } if (buf.size() > 8 * 1024) { qDebug("getBN: cannot handle BN of size: %d", buf.size()); return; } if (BN_bin2bn((const unsigned char *) buf.data(), buf.size(), value) == NULL) { qDebug("getBN: BN_bin2bn failed"); return; } } bool SSH1InBuffer::atEnd() { if (m_buf.bytesAvailable() > 0) { qDebug("WARNING: extra data"); return false; } #ifdef SSH_DEBUG qDebug() << "At the end of the buffer"; #endif return true; } QByteArray & SSH1InBuffer::buffer() { return m_out; } void SSH1InBuffer::parseData() { if (m_socket == NULL) return; // int blockSize = m_transport == NULL ? 8 : m_transport->blockSize(); // int macLen = m_transport == NULL ? 0 : m_transport->macLen(); qint64 nbyte = 0; while ((nbyte = m_socket->bytesAvailable()) > 0) { QByteArray from_socket = m_socket->readBlock(nbyte); // Add data into the buffer m_in.append(from_socket); // dumpData ( m_in ); // ------------------------------------------------------- // | n = packet length | p = padding | payload | crc32 | // ------------------------------------------------------- // | 4 | 1 - 7 | n - 4 | 4 | // ------------------------------------------------------- // | | total len | // ------------------------------------------------------- while (m_in.size() > 4) { int length = get_u32(m_in.data()); int totalLen = (length + 8) & ~7; int padding = totalLen - length; #ifdef SSH_DEBUG qDebug() << "length: " << length << "total length: " << totalLen << "padding: " << padding; #endif if (totalLen > m_in.size()) { qDebug("packet not complete"); return; } QByteArray plain; // qDebug() << "Encrypted data without the length"; // dumpData(m_in.mid(4,totalLen + 4)); if (m_encryption == NULL) plain = m_in.mid(4, totalLen); else plain = m_encryption->crypt(m_in.mid(4, totalLen)); // the Padding, Packet type, and Data fields uint32_t mycrc = ssh_crc32((unsigned char *) plain.left(totalLen - 4).data(), totalLen - 4); m_out = plain.mid(padding, length - 4); #ifdef SSH_DEBUG qDebug() << "Decrypted data"; #endif // dumpData ( m_out ); // dumpData ( m_in.mid ( totalLen, 4 ) ); uint32_t gotcrc = get_u32(plain.mid(totalLen - 4, 4)); if (gotcrc != mycrc) // TODO: die gracefully qDebug("crc32 check error!"); m_buf.reset(); int flag = m_out[0]; m_in.remove(0, totalLen + 4); emit packetReady(flag); } } } SSH2OutBuffer::SSH2OutBuffer(SocketPrivate * plainSocket, QObject * parent) : QObject(parent), m_in(), m_buf(this), m_sequenceNumber(0) { m_buf.setBuffer(&m_in); m_buf.open(QBuffer::ReadWrite); m_transport = NULL; m_socket = plainSocket; } SSH2OutBuffer::~SSH2OutBuffer() {} void SSH2OutBuffer::startPacket() { m_in.resize(0); m_buf.reset(); } void SSH2OutBuffer::startPacket(uint8_t flag) { startPacket(); putUInt8(flag); } void SSH2OutBuffer::putUInt32(uint32_t v) { char tmp[4]; put_u32(tmp, v); m_buf.write(tmp, 4); } void SSH2OutBuffer::putUInt8(uint8_t v) { m_buf.putChar(v); } void SSH2OutBuffer::putData(const QByteArray & data) { m_buf.write(data); } void SSH2OutBuffer::putString(const QByteArray & string) { putUInt32(string.size()); if (string.size() == 0) return; else putData(string); } void SSH2OutBuffer::putBN(const BIGNUM * value) { u_int bytes; int oi; u_int hasnohigh = 0; if (BN_is_zero(value)) { putUInt32(0); return; } if (BN_is_negative(value)) { qDebug("putBN: negative numbers not supported"); return; } bytes = BN_num_bytes(value) + 1; /* extra padding byte */ if (bytes < 2) { qDebug("putBN: BN too small"); return; } QByteArray buf(bytes - 1, 0); // buf[0] = 0x00; /* Get the value of in binary */ oi = BN_bn2bin(value, (unsigned char *) buf.data()); buf.insert(0, (char) 0); if (oi < 0 || (u_int) oi != bytes - 1) { qDebug("buffer_put_bignum2_ret: BN_bn2bin() failed: oi != bin_size"); return; } hasnohigh = (buf[1] & 0x80) ? 0 : 1; putString(buf.mid(hasnohigh)); return; } void SSH2OutBuffer::sendPacket() { int blockSize; if (m_transport != NULL) blockSize = m_transport->blockSize(); else blockSize = 8; int len = m_in.size(); #ifdef SSH_DEBUG qDebug() << "len: " << len; #endif int totalLen; QByteArray tmp(4, 0); uint8_t padding = blockSize - ((len + 5) % blockSize); if (padding < 4) padding += blockSize; #ifdef SSH_DEBUG qDebug() << "padding: " << padding << " bytes"; #endif QByteArray paddingData(padding,0); if (m_transport != NULL) RAND_bytes((unsigned char *) paddingData.data(), padding); QByteArray plain = m_in+paddingData; totalLen = plain.size() + 1; plain.insert(0, padding); put_u32(tmp.data(), totalLen); plain.insert(0, tmp); // for ( int i = 3; i >= 0; i-- ) // packet.insert ( 0, ( char ) tmp[i] ); //dumpData ( packet ); QByteArray packet; if (m_transport != NULL) { packet = m_transport->crypt(plain); put_u32(tmp.data(), m_sequenceNumber); packet += m_transport->mac(tmp + plain); } else packet = plain; qint64 nwrite = m_socket->writeBlock(packet); m_sequenceNumber++; if (nwrite < packet.size()) qDebug("packet write too small"); } QByteArray & SSH2OutBuffer::buffer() { return m_in; } SSH1OutBuffer::SSH1OutBuffer(SocketPrivate * plainSocket, QObject * parent) : QObject(parent), m_in(), m_buf(this) { m_buf.setBuffer(&m_in); m_buf.open(QBuffer::ReadWrite); m_encryption = NULL; m_socket = plainSocket; } SSH1OutBuffer::~SSH1OutBuffer() {} void SSH1OutBuffer::startPacket() { m_in.resize(0); m_buf.reset(); } void SSH1OutBuffer::startPacket(uint8_t flag) { startPacket(); putUInt8(flag); } void SSH1OutBuffer::putUInt32(uint32_t v) { char tmp[4]; put_u32(tmp, v); m_buf.write(tmp, 4); } void SSH1OutBuffer::putUInt8(uint8_t v) { m_buf.putChar(v); } void SSH1OutBuffer::putData(const QByteArray & data) { m_buf.write(data); } void SSH1OutBuffer::putString(const QByteArray & string) { putUInt32(string.size()); if (string.size() == 0) return; else putData(string); } void SSH1OutBuffer::putBN(const BIGNUM * value) { int bits = BN_num_bits(value); int bin_size = (bits + 7) / 8; QByteArray buf(bin_size, 0); int oi; char msg[2]; /* Get the value of in binary */ oi = BN_bn2bin(value, (uint8_t*) buf.data()); if (oi != bin_size) { qDebug("BN_bn2bin() failed"); return; } /* Store the number of bits in the buffer in two bytes, msb first. */ put_u16(msg, bits); m_buf.write(msg, 2); /* Store the binary data. */ putData(buf); } void SSH1OutBuffer::sendPacket() { int len = m_in.size() + 4; // CRC32 int padding = 8 - (len % 8); #ifdef SSH_DEBUG qDebug() << len << padding; #endif QByteArray tmp(padding, 0); if (m_encryption != NULL) RAND_bytes((unsigned char *) tmp.data(), padding); QByteArray plain = tmp + m_in; tmp.resize(4); uint32_t mycrc = ssh_crc32((unsigned char *) plain.data(), plain.size()); put_u32(tmp.data(), mycrc); // dumpData(tmp); // TODO: encryption QByteArray packet; if (m_encryption == NULL) packet = plain + tmp; else packet = m_encryption->crypt(plain + tmp); tmp.resize(4); put_u32(tmp.data(), len); packet.insert(0, tmp); qint64 nwrite = m_socket->writeBlock(packet); // m_socket->flush(); if (nwrite < packet.size()) qDebug("packet write too small"); } QByteArray & SSH1OutBuffer::buffer() { return m_in; } } #include "moc_packet.cpp" qterm-0.7.3/src/ssh/packet.h000066400000000000000000000066521332762052600156740ustar00rootroot00000000000000// // C++ Interface: sshpacket // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_PACKET_H #define SSH_PACKET_H #include "transport.h" #include "qtermsocket.h" #include #include #include #include #include namespace QTerm { /** @author hooey */ class SSH2InBuffer : public QObject { Q_OBJECT public: explicit SSH2InBuffer(SocketPrivate * plainSocket, QObject * parent = 0); ~SSH2InBuffer(); uint32_t getUInt32(); uint8_t getUInt8(); QByteArray getData(uint length); QByteArray getString(); void getBN(BIGNUM * bn); bool atEnd(); QByteArray & buffer(); void setTransport(SSH2Transport* theValue) { delete m_transport; m_transport = theValue; } signals: void packetReady(int flag); void error(const QString & message); private slots: void parseData(); private: QByteArray m_in; QByteArray m_out; QBuffer m_buf; SocketPrivate * m_socket; SSH2Transport * m_transport; uint32_t m_sequenceNumber; QByteArray m_incompletePacket; }; class SSH1InBuffer : public QObject { Q_OBJECT public: explicit SSH1InBuffer(SocketPrivate * plainSocket, QObject * parent = 0); ~SSH1InBuffer(); uint32_t getUInt32(); uint8_t getUInt8(); QByteArray getData(uint length); QByteArray getString(); void getBN(BIGNUM * bn); bool atEnd(); QByteArray & buffer(); void setEncryption(SSH1Encryption* theValue) { delete m_encryption; m_encryption = theValue; } signals: void packetReady(int flag); void error(const QString & message); private slots: void parseData(); private: QByteArray m_in; QByteArray m_out; QBuffer m_buf; SocketPrivate * m_socket; SSH1Encryption * m_encryption; }; class SSH2OutBuffer : public QObject { Q_OBJECT public: explicit SSH2OutBuffer(SocketPrivate * plainSocket, QObject * parent = 0); ~SSH2OutBuffer(); void startPacket(); void startPacket(uint8_t flag); void putUInt32(uint32_t v); void putUInt8(uint8_t v); void putData(const QByteArray & data); void putString(const QByteArray & string); void putBN(const BIGNUM * bn); void sendPacket(); QByteArray & buffer(); // TODO: ugly void setTransport(SSH2Transport* theValue) { delete m_transport; m_transport = theValue; } private: QByteArray m_in; QBuffer m_buf; SocketPrivate * m_socket; SSH2Transport * m_transport; uint32_t m_sequenceNumber; }; class SSH1OutBuffer : public QObject { Q_OBJECT public: explicit SSH1OutBuffer(SocketPrivate * plainSocket, QObject * parent = 0); ~SSH1OutBuffer(); void startPacket(); void startPacket(uint8_t flag); void putUInt32(uint32_t v); void putUInt8(uint8_t v); void putData(const QByteArray & data); void putString(const QByteArray & string); void putBN(const BIGNUM * bn); void sendPacket(); QByteArray & buffer(); // TODO: ugly void setEncryption(SSH1Encryption* theValue) { delete m_encryption; m_encryption = theValue; } private: QByteArray m_in; QBuffer m_buf; SocketPrivate * m_socket; SSH1Encryption * m_encryption; // uint32_t m_sequenceNumber; }; } #endif // SSH_PACKET_H qterm-0.7.3/src/ssh/socket.cpp000066400000000000000000000241621332762052600162440ustar00rootroot00000000000000// // C++ Implementation: sshsocket // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #include "socket.h" #include "packet.h" #include "kex.h" #include "auth.h" #include "channel.h" #include "ssh1.h" #include "ssh2.h" #include "qtermsocket.h" #include "hostinfo.h" #include #include #include #ifdef SSH_DEBUG #include #endif // FIXME: smth have some problem with \r\n #define QTERM_SSHV1_BANNER "SSH-1.5-QTermSSH\n" #define QTERM_SSHV2_BANNER "SSH-2.0-QTermSSH\r\n" namespace QTerm { SSH2SocketPriv::SSH2SocketPriv(SocketPrivate * plainSocket, QByteArray & banner, QObject * parent) : SSHSocketPriv(parent), m_banner(banner), m_status(Init), m_sessionID(), m_channelList() { #if OPENSSL_VERSION_NUMBER < 0x10100000L OpenSSL_add_all_ciphers(); #endif m_sessionID = NULL; m_auth = NULL; m_hostInfo = plainSocket->hostInfo(); m_inPacket = new SSH2InBuffer(plainSocket, this); m_outPacket = new SSH2OutBuffer(plainSocket, this); m_kex = new SSH2Kex(m_inPacket, m_outPacket, m_banner, QTERM_SSHV2_BANNER, this); m_kex->setHostInfo(m_hostInfo); m_kex->sendKex(); connect(m_kex, SIGNAL(kexFinished(const QByteArray &)), this, SLOT(slotKexFinished(const QByteArray &))); connect(m_kex, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString&))); connect(m_inPacket, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString&))); // connect(m_outPacket, SIGNAL(error( const QString& )),this, SIGNAL(error( const QString& ))); // connect ( m_inPacket, SIGNAL ( packetReady ( int ) ), this, SLOT ( newPacket ( int ) ) ); } SSH2SocketPriv::~SSH2SocketPriv() { #if OPENSSL_VERSION_NUMBER < 0x10100000L EVP_cleanup(); #endif } void SSH2SocketPriv::slotKexFinished(const QByteArray & sessionID) { m_sessionID = sessionID; m_kex->deleteLater(); #ifdef SSH_DEBUG qDebug() << "kex finished"; #endif m_auth = new SSH2Auth(m_sessionID, m_inPacket, m_outPacket); m_auth->setHostInfo(m_hostInfo); connect(m_auth, SIGNAL(authFinished()), this, SLOT(slotAuthFinished())); connect(m_auth, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString &))); m_auth->requestAuthService(); } void SSH2SocketPriv::slotAuthFinished() { m_auth->deleteLater(); #ifdef SSH_DEBUG qDebug() << "authFinished"; #endif m_channel = new SSH2Channel(m_inPacket, m_outPacket, m_hostInfo->termType(), m_hostInfo->termColumn(), m_hostInfo->termRow(), this); connect(m_channel, SIGNAL(newChannel(int)), this, SLOT(slotNewChannel(int))); connect(m_channel, SIGNAL(closeChannel(int)), this, SLOT(slotChannelClosed(int))); connect(m_channel, SIGNAL(dataReady(int)), this, SLOT(slotChannelData(int))); connect(m_channel, SIGNAL(channelReady()), this, SIGNAL(socketReady())); m_channel->openChannel(); } void SSH2SocketPriv::slotNewChannel(int id) { // TODO: identify different channels m_channelList << id; } void SSH2SocketPriv::slotChannelClosed(int id) { m_channelList.removeAll(id); if (m_channelList.size() == 0) emit closeConnection(); } void SSH2SocketPriv::slotChannelData(int id) { if (id == 0) emit readyRead(); } QByteArray SSH2SocketPriv::readData(unsigned long size) { return m_channel->readData(0, size); } void SSH2SocketPriv::writeData(const QByteArray & data) { m_channel->writeData(0, data); } unsigned long SSH2SocketPriv::bytesAvailable() { return m_channel->bytesAvailable(0); } void SSH2SocketPriv::requestWindowSize(int column, int row) { m_channel->requestWindowSize(column, row); } SSH1SocketPriv::SSH1SocketPriv(SocketPrivate * plainSocket, QByteArray & banner, QObject * parent) { #ifdef SSH_DEBUG qDebug() << "init ssh1 session"; #endif #if OPENSSL_VERSION_NUMBER < 0x10100000L OpenSSL_add_all_ciphers(); #endif m_inPacket = new SSH1InBuffer(plainSocket, this); m_outPacket = new SSH1OutBuffer(plainSocket, this); m_kex = new SSH1Kex(m_inPacket, m_outPacket, this); m_hostInfo = plainSocket->hostInfo(); connect(m_kex, SIGNAL(kexFinished()), this, SLOT(slotKexFinished())); connect(m_kex, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString&))); connect(m_inPacket, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString&))); // connect(m_outPacket, SIGNAL(error( const QString& )),this, SIGNAL(error( const QString& ))); } SSH1SocketPriv::~SSH1SocketPriv() { #if OPENSSL_VERSION_NUMBER < 0x10100000L EVP_cleanup(); #endif } void SSH1SocketPriv::slotKexFinished() { m_kex->deleteLater(); #ifdef SSH_DEBUG qDebug() << "kex finished"; #endif m_auth = new SSH1Auth(m_inPacket, m_outPacket, this); m_auth->setHostInfo(m_hostInfo); connect(m_auth, SIGNAL(error(const QString&)), this, SIGNAL(error(const QString &))); connect(m_auth, SIGNAL(authFinished()), this, SLOT(slotAuthFinished())); m_auth->requestAuthService(); } void SSH1SocketPriv::slotAuthFinished() { m_auth->deleteLater(); #ifdef SSH_DEBUG qDebug() << "authFinished"; #endif m_channel = new SSH1Channel(m_inPacket, m_outPacket, m_hostInfo->termType(), m_hostInfo->termColumn(), m_hostInfo->termRow(), this); // connect ( m_channel, SIGNAL ( newChannel ( int ) ), this, SLOT ( slotNewChannel ( int ) ) ); connect(m_channel, SIGNAL(dataReady()), this, SIGNAL(readyRead())); connect(m_channel, SIGNAL(channelReady()), this, SIGNAL(socketReady())); // m_channel->openChannel(); } QByteArray SSH1SocketPriv::readData(unsigned long size) { return m_channel->readData(size); } void SSH1SocketPriv::writeData(const QByteArray & data) { m_channel->writeData(data); } unsigned long SSH1SocketPriv::bytesAvailable() { return m_channel->bytesAvailable(); } void SSH1SocketPriv::requestWindowSize(int column, int row) { m_channel->requestWindowSize(column, row); } SSHSocket::SSHSocket(QObject * parent) : Socket(parent), m_data() { m_socket = new SocketPrivate(this); m_version = SSHUnknown; m_priv = NULL; connect(m_socket, SIGNAL(hostFound()), this, SIGNAL(hostFound())); //connect(m_socket, SIGNAL(connected()), this, SIGNAL(connected())); connect(m_socket, SIGNAL(connectionClosed()), this, SIGNAL(connectionClosed())); connect(m_socket, SIGNAL(delayedCloseFinished()), this, SIGNAL(delayedCloseFinished())); connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(error(QAbstractSocket::SocketError))); connect(m_socket, SIGNAL(SocketState(int)), this, SIGNAL(SocketState(int))); } void SSHSocket::setProxy(int nProxyType, //0-no proxy; 1-wingate; 2-sock4; 3-socks5 bool bAuth, // if authentation needed const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd) { m_socket->setProxy(nProxyType,bAuth,strProxyHost,uProxyPort,strProxyUsr, strProxyPwd); // TODO: proxy? } void SSHSocket::flush() {} void SSHSocket::requestWindowSize(int column, int row) { m_priv->requestWindowSize(column, row); } void SSHSocket::close() { // TODO: clean up the rest of it m_socket->close(); } void SSHSocket::connectToHost(HostInfo * hostInfo) { #ifdef SSH_DEBUG qDebug() << "connect to: " << hostInfo->hostName() << hostInfo->port(); #endif if (m_socket->state() == QAbstractSocket::UnconnectedState) { m_socket->disconnect(SIGNAL(readyRead())); connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); m_socket->connectToHost(hostInfo); } } QByteArray SSHSocket::readBlock(unsigned long size) { if (m_priv != NULL) { return m_priv->readData(size); } return QByteArray(); } long SSHSocket::writeBlock(const QByteArray & data) { if (m_priv == NULL) { return 0; } m_priv->writeData(data); return data.size(); } unsigned long SSHSocket::bytesAvailable() { if (m_priv == NULL) { return 0; } return m_priv->bytesAvailable(); } void SSHSocket::checkVersion(const QByteArray & banner) { #ifdef SSH_DEBUG qDebug() << banner; #endif QString server(banner); QStringList list = server.split("-", QString::SkipEmptyParts); if (list[0] != "SSH") { qDebug("It is not a SSH protocol: %s", server.toLatin1().data()); return; } float version = list[1].toFloat(); if (version >= 1.99) { m_version = SSHV2; } else { m_version = SSHV1; } switch (m_version) { case SSHV1: m_socket->writeBlock(QTERM_SSHV1_BANNER); #ifdef SSH_DEBUG qDebug() << "Send banner version 1"; #endif break; case SSHV2: m_socket->writeBlock(QTERM_SSHV2_BANNER); #ifdef SSH_DEBUG qDebug() << "Send banner version 2"; #endif break; case SSHUnknown: qDebug("Unknown ssh version"); break; default: break; } } void SSHSocket::readData() { #ifdef SSH_DEBUG qDebug() << "Read SSH data!"; #endif qint64 nbyte = m_socket->bytesAvailable(); QByteArray to_socket; QByteArray from_socket = m_socket->readBlock(nbyte); checkVersion(from_socket); if (m_version == SSHV2) { m_priv = new SSH2SocketPriv(m_socket, from_socket, this); // m_socket->write ( QTERM_SSHV2_BANNER ); } else if (m_version == SSHV1) { m_priv = new SSH1SocketPriv(m_socket, from_socket, this); // m_socket->write ( QTERM_SSHV1_BANNER ); } else { emit error(QAbstractSocket::UnknownSocketError); return; } disconnect(m_socket, SIGNAL(readyRead()), this, SLOT(readData())); connect(m_priv, SIGNAL(socketReady()), this, SIGNAL(connected())); connect(m_priv, SIGNAL(readyRead()), this, SIGNAL(readyRead())); connect(m_priv, SIGNAL(error(const QString &)), this, SLOT(onError(const QString &))); connect(m_priv, SIGNAL(closeConnection()), this, SLOT(close())); } void SSHSocket::onError(const QString & message) { // TODO: notify the user #ifdef SSH_DEBUG qDebug() << "We get an error message: " << message; #endif if (m_priv != NULL) { m_priv->deleteLater(); } m_socket->close(); } } #include "moc_socket.cpp" qterm-0.7.3/src/ssh/socket.h000066400000000000000000000071231332762052600157070ustar00rootroot00000000000000// // C++ Interface: sshsocket // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_SOCKET_H #define SSH_SOCKET_H #include "qtermsocket.h" #include namespace QTerm { class HostInfo; class SSH2InBuffer; class SSH2OutBuffer; class SSH1InBuffer; class SSH1OutBuffer; class SSH2Kex; class SSH1Kex; class SSH2SocketPriv; class SSH2Auth; class SSH1Auth; class SSH2Channel; class SSH1Channel; /** @author hooey */ class SSHSocketPriv : public QObject { Q_OBJECT public: SSHSocketPriv(QObject * parent = 0) : QObject(parent) {} virtual ~SSHSocketPriv() {} virtual QByteArray readData(unsigned long size) = 0; virtual void writeData(const QByteArray & data) = 0; virtual unsigned long bytesAvailable() = 0; virtual void requestWindowSize(int column, int row) = 0; signals: void readyRead(); void error(const QString & message); void socketReady(); void closeConnection(); }; class SSH2SocketPriv : public SSHSocketPriv { Q_OBJECT public: SSH2SocketPriv(SocketPrivate * plainSocket, QByteArray & banner, QObject * parent = 0); ~SSH2SocketPriv(); QByteArray readData(unsigned long size); void writeData(const QByteArray & data); unsigned long bytesAvailable(); void requestWindowSize(int column, int row); signals: void allChannelsClosed(); private slots: void slotKexFinished(const QByteArray & sessionID); void slotAuthFinished(); void slotNewChannel(int id); void slotChannelData(int id); void slotChannelClosed(int id); private: enum SSHStatus { Init, Kex, Unknown }; SSH2InBuffer * m_inPacket; SSH2OutBuffer * m_outPacket; SSH2Kex * m_kex; SSH2Auth * m_auth; SSH2Channel * m_channel; QByteArray m_banner; SSHStatus m_status; QByteArray m_sessionID; QList m_channelList; HostInfo * m_hostInfo; }; class SSH1SocketPriv : public SSHSocketPriv { Q_OBJECT public: SSH1SocketPriv(SocketPrivate * plainSocket, QByteArray & banner, QObject * parent = 0); ~SSH1SocketPriv(); QByteArray readData(unsigned long size); void writeData(const QByteArray & data); unsigned long bytesAvailable(); void requestWindowSize(int column, int row); private slots: void slotKexFinished(); void slotAuthFinished(); private: SSH1InBuffer * m_inPacket; SSH1OutBuffer * m_outPacket; SSH1Kex * m_kex; SSH1Auth * m_auth; SSH1Channel * m_channel; HostInfo * m_hostInfo; }; class SSHSocket : public Socket { Q_OBJECT public: SSHSocket(QObject * parent = 0); ~SSHSocket() {} void setProxy(int nProxyType, //0-no proxy; 1-wingate; 2-sock4; 3-socks5 bool bAuth, // if authentation needed const QString& strProxyHost, quint16 uProxyPort, const QString& strProxyUsr, const QString& strProxyPwd); void connectToHost(HostInfo * hostInfo); QByteArray readBlock(unsigned long size); long writeBlock(const QByteArray & data); unsigned long bytesAvailable(); void flush(); void requestWindowSize(int column, int row); public slots: void close(); signals: void readyRead(); private slots: void readData(); void onError(const QString & message); private: void checkVersion(const QByteArray & banner); enum SSHVersion { SSHV1, SSHV2, SSHUnknown }; SSHVersion m_version; SocketPrivate * m_socket; SSHSocketPriv * m_priv; QByteArray m_data; }; } #endif // SSH_SOCKET_H qterm-0.7.3/src/ssh/ssh1.h000066400000000000000000000101451332762052600152730ustar00rootroot00000000000000/* $OpenBSD: ssh1.h,v 1.6 2006/03/25 22:22:43 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland * All rights reserved * * As far as I am concerned, the code I have written for this software * can be used freely for any purpose. Any derived versions of this * software must be clearly marked as such, and if the derived work is * incompatible with the protocol description in the RFC file, it must be * called by a name other than "ssh" or "Secure Shell". */ /* * Definition of message types. New values can be added, but old values * should not be removed or without careful consideration of the consequences * for compatibility. The maximum value is 254; value 255 is reserved for * future extension. */ /* Ranges */ #define SSH_MSG_MIN 1 #define SSH_MSG_MAX 254 /* Message name */ /* msg code */ /* arguments */ #define SSH_MSG_NONE 0 /* no message */ #define SSH_MSG_DISCONNECT 1 /* cause (string) */ #define SSH_SMSG_PUBLIC_KEY 2 /* ck,msk,srvk,hostk */ #define SSH_CMSG_SESSION_KEY 3 /* key (BIGNUM) */ #define SSH_CMSG_USER 4 /* user (string) */ #define SSH_CMSG_AUTH_RHOSTS 5 /* user (string) */ #define SSH_CMSG_AUTH_RSA 6 /* modulus (BIGNUM) */ #define SSH_SMSG_AUTH_RSA_CHALLENGE 7 /* int (BIGNUM) */ #define SSH_CMSG_AUTH_RSA_RESPONSE 8 /* int (BIGNUM) */ #define SSH_CMSG_AUTH_PASSWORD 9 /* pass (string) */ #define SSH_CMSG_REQUEST_PTY 10 /* TERM, tty modes */ #define SSH_CMSG_WINDOW_SIZE 11 /* row,col,xpix,ypix */ #define SSH_CMSG_EXEC_SHELL 12 /* */ #define SSH_CMSG_EXEC_CMD 13 /* cmd (string) */ #define SSH_SMSG_SUCCESS 14 /* */ #define SSH_SMSG_FAILURE 15 /* */ #define SSH_CMSG_STDIN_DATA 16 /* data (string) */ #define SSH_SMSG_STDOUT_DATA 17 /* data (string) */ #define SSH_SMSG_STDERR_DATA 18 /* data (string) */ #define SSH_CMSG_EOF 19 /* */ #define SSH_SMSG_EXITSTATUS 20 /* status (int) */ #define SSH_MSG_CHANNEL_OPEN_CONFIRMATION 21 /* channel (int) */ #define SSH_MSG_CHANNEL_OPEN_FAILURE 22 /* channel (int) */ #define SSH_MSG_CHANNEL_DATA 23 /* ch,data (int,str) */ #define SSH_MSG_CHANNEL_CLOSE 24 /* channel (int) */ #define SSH_MSG_CHANNEL_CLOSE_CONFIRMATION 25 /* channel (int) */ /* SSH_CMSG_X11_REQUEST_FORWARDING 26 OBSOLETE */ #define SSH_SMSG_X11_OPEN 27 /* channel (int) */ #define SSH_CMSG_PORT_FORWARD_REQUEST 28 /* p,host,hp (i,s,i) */ #define SSH_MSG_PORT_OPEN 29 /* ch,h,p (i,s,i) */ #define SSH_CMSG_AGENT_REQUEST_FORWARDING 30 /* */ #define SSH_SMSG_AGENT_OPEN 31 /* port (int) */ #define SSH_MSG_IGNORE 32 /* string */ #define SSH_CMSG_EXIT_CONFIRMATION 33 /* */ #define SSH_CMSG_X11_REQUEST_FORWARDING 34 /* proto,data (s,s) */ #define SSH_CMSG_AUTH_RHOSTS_RSA 35 /* user,mod (s,mpi) */ #define SSH_MSG_DEBUG 36 /* string */ #define SSH_CMSG_REQUEST_COMPRESSION 37 /* level 1-9 (int) */ #define SSH_CMSG_MAX_PACKET_SIZE 38 /* size 4k-1024k (int) */ #define SSH_CMSG_AUTH_TIS 39 /* we use this for s/key */ #define SSH_SMSG_AUTH_TIS_CHALLENGE 40 /* challenge (string) */ #define SSH_CMSG_AUTH_TIS_RESPONSE 41 /* response (string) */ #define SSH_CMSG_AUTH_KERBEROS 42 /* (KTEXT) */ #define SSH_SMSG_AUTH_KERBEROS_RESPONSE 43 /* (KTEXT) */ #define SSH_CMSG_HAVE_KERBEROS_TGT 44 /* credentials (s) */ #define SSH_CMSG_HAVE_AFS_TOKEN 65 /* token (s) */ /* protocol version 1.5 overloads some version 1.3 message types */ #define SSH_MSG_CHANNEL_INPUT_EOF SSH_MSG_CHANNEL_CLOSE #define SSH_MSG_CHANNEL_OUTPUT_CLOSE SSH_MSG_CHANNEL_CLOSE_CONFIRMATION /* * Authentication methods. New types can be added, but old types should not * be removed for compatibility. The maximum allowed value is 31. */ #define SSH_AUTH_RHOSTS 1 #define SSH_AUTH_RSA 2 #define SSH_AUTH_PASSWORD 3 #define SSH_AUTH_RHOSTS_RSA 4 #define SSH_AUTH_TIS 5 #define SSH_AUTH_KERBEROS 6 #define SSH_PASS_KERBEROS_TGT 7 /* 8 to 15 are reserved */ #define SSH_PASS_AFS_TOKEN 21 /* Protocol flags. These are bit masks. */ #define SSH_PROTOFLAG_SCREEN_NUMBER 1 /* X11 forwarding includes screen */ #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN 2 /* forwarding opens contain host */ qterm-0.7.3/src/ssh/ssh2.h000066400000000000000000000125521332762052600153000ustar00rootroot00000000000000/* $OpenBSD: ssh2.h,v 1.10 2006/03/25 22:22:43 djm Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * draft-ietf-secsh-architecture-05.txt * * Transport layer protocol: * * 1-19 Transport layer generic (e.g. disconnect, ignore, debug, * etc) * 20-29 Algorithm negotiation * 30-49 Key exchange method specific (numbers can be reused for * different authentication methods) * * User authentication protocol: * * 50-59 User authentication generic * 60-79 User authentication method specific (numbers can be reused * for different authentication methods) * * Connection protocol: * * 80-89 Connection protocol generic * 90-127 Channel related messages * * Reserved for client protocols: * * 128-191 Reserved * * Local extensions: * * 192-255 Local extensions */ /* ranges */ #define SSH2_MSG_TRANSPORT_MIN 1 #define SSH2_MSG_TRANSPORT_MAX 49 #define SSH2_MSG_USERAUTH_MIN 50 #define SSH2_MSG_USERAUTH_MAX 79 #define SSH2_MSG_USERAUTH_PER_METHOD_MIN 60 #define SSH2_MSG_USERAUTH_PER_METHOD_MAX SSH2_MSG_USERAUTH_MAX #define SSH2_MSG_CONNECTION_MIN 80 #define SSH2_MSG_CONNECTION_MAX 127 #define SSH2_MSG_RESERVED_MIN 128 #define SSH2_MSG_RESERVED_MAX 191 #define SSH2_MSG_LOCAL_MIN 192 #define SSH2_MSG_LOCAL_MAX 255 #define SSH2_MSG_MIN 1 #define SSH2_MSG_MAX 255 /* transport layer: generic */ #define SSH2_MSG_DISCONNECT 1 #define SSH2_MSG_IGNORE 2 #define SSH2_MSG_UNIMPLEMENTED 3 #define SSH2_MSG_DEBUG 4 #define SSH2_MSG_SERVICE_REQUEST 5 #define SSH2_MSG_SERVICE_ACCEPT 6 /* transport layer: alg negotiation */ #define SSH2_MSG_KEXINIT 20 #define SSH2_MSG_NEWKEYS 21 /* transport layer: kex specific messages, can be reused */ #define SSH2_MSG_KEXDH_INIT 30 #define SSH2_MSG_KEXDH_REPLY 31 /* dh-group-exchange */ #define SSH2_MSG_KEX_DH_GEX_REQUEST_OLD 30 #define SSH2_MSG_KEX_DH_GEX_GROUP 31 #define SSH2_MSG_KEX_DH_GEX_INIT 32 #define SSH2_MSG_KEX_DH_GEX_REPLY 33 #define SSH2_MSG_KEX_DH_GEX_REQUEST 34 /* user authentication: generic */ #define SSH2_MSG_USERAUTH_REQUEST 50 #define SSH2_MSG_USERAUTH_FAILURE 51 #define SSH2_MSG_USERAUTH_SUCCESS 52 #define SSH2_MSG_USERAUTH_BANNER 53 /* user authentication: method specific, can be reused */ #define SSH2_MSG_USERAUTH_PK_OK 60 #define SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ 60 #define SSH2_MSG_USERAUTH_INFO_REQUEST 60 #define SSH2_MSG_USERAUTH_INFO_RESPONSE 61 /* connection protocol: generic */ #define SSH2_MSG_GLOBAL_REQUEST 80 #define SSH2_MSG_REQUEST_SUCCESS 81 #define SSH2_MSG_REQUEST_FAILURE 82 /* channel related messages */ #define SSH2_MSG_CHANNEL_OPEN 90 #define SSH2_MSG_CHANNEL_OPEN_CONFIRMATION 91 #define SSH2_MSG_CHANNEL_OPEN_FAILURE 92 #define SSH2_MSG_CHANNEL_WINDOW_ADJUST 93 #define SSH2_MSG_CHANNEL_DATA 94 #define SSH2_MSG_CHANNEL_EXTENDED_DATA 95 #define SSH2_MSG_CHANNEL_EOF 96 #define SSH2_MSG_CHANNEL_CLOSE 97 #define SSH2_MSG_CHANNEL_REQUEST 98 #define SSH2_MSG_CHANNEL_SUCCESS 99 #define SSH2_MSG_CHANNEL_FAILURE 100 /* disconnect reason code */ #define SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT 1 #define SSH2_DISCONNECT_PROTOCOL_ERROR 2 #define SSH2_DISCONNECT_KEY_EXCHANGE_FAILED 3 #define SSH2_DISCONNECT_HOST_AUTHENTICATION_FAILED 4 #define SSH2_DISCONNECT_RESERVED 4 #define SSH2_DISCONNECT_MAC_ERROR 5 #define SSH2_DISCONNECT_COMPRESSION_ERROR 6 #define SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE 7 #define SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED 8 #define SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE 9 #define SSH2_DISCONNECT_CONNECTION_LOST 10 #define SSH2_DISCONNECT_BY_APPLICATION 11 #define SSH2_DISCONNECT_TOO_MANY_CONNECTIONS 12 #define SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER 13 #define SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE 14 #define SSH2_DISCONNECT_ILLEGAL_USER_NAME 15 /* misc */ #define SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED 1 #define SSH2_OPEN_CONNECT_FAILED 2 #define SSH2_OPEN_UNKNOWN_CHANNEL_TYPE 3 #define SSH2_OPEN_RESOURCE_SHORTAGE 4 #define SSH2_EXTENDED_DATA_STDERR 1 qterm-0.7.3/src/ssh/transport.cpp000066400000000000000000000121411332762052600170020ustar00rootroot00000000000000// // C++ Implementation: sshtransport // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // extern "C" { #include "libcrypto-compat.h" } #include "transport.h" #include #ifdef SSH_DEBUG #include extern void dumpData(const QByteArray & data); #endif namespace QTerm { SSH2Transport::SSH2Transport(const QString & enc, const QString & mac, const QString & comp) { // if ( enc == "3des-cbc" ) m_enc = new SSH2Encryption(enc); // else // m_enc = NULL; // if ( mac == "hmac-sha1" ) m_mac = new SSH2MAC(mac); // else // m_enc = NULL; // if ( comp != "none" ) // qDebug() << "Compression is not yet supported"; // // m_comp = NULL; } SSH2Transport::~SSH2Transport() { delete m_enc; delete m_mac; // delete m_comp; } /*! \fn QTerm::SSH2Transport::initEncryption(const QByteArray & secret, const QByteArray & iv) */ void SSH2Transport::initEncryption(const QByteArray & secret, const QByteArray & iv, SSH2Encryption::Method method) { m_enc->init(secret, iv, method); } /*! \fn QTerm::SSH2Transport::initMAC(const QByteArray & key) */ void SSH2Transport::initMAC(const QByteArray & key) { m_mac->setKey(key); } /*! \fn QTerm::SSH2Transport::crypt(const QByteArray & src) */ QByteArray SSH2Transport::crypt(const QByteArray & src) { return m_enc->crypt(src); } SSH2Encryption::SSH2Encryption(const QString & algorithm) { m_ctx = EVP_CIPHER_CTX_new(); if (algorithm == "aes128-cbc") { m_ivLen = 16; m_blockSize = 16; m_secretLen = 16; m_evptype = EVP_aes_128_cbc(); } else if (algorithm == "aes128-ctr") { m_ivLen = 16; m_blockSize = 16; m_secretLen = 16; m_evptype = EVP_aes_128_ctr(); } else if (algorithm == "3des-cbc") { m_ivLen = 8; m_blockSize = 8; m_secretLen = 24; m_evptype = EVP_des_ede3_cbc(); } } SSH2Encryption::~SSH2Encryption() { EVP_CIPHER_CTX_free(m_ctx); } void SSH2Encryption::init(const QByteArray & key, const QByteArray & iv, Method method) { if (EVP_CipherInit(m_ctx, m_evptype, (const uint8_t*) key.data(), (const uint8_t*) iv.data(), method == Encryption) == 0) qDebug("Cipher init failed"); } QByteArray SSH2Encryption::crypt(const QByteArray & src) { QByteArray dest; if (src.size() % m_blockSize) { qDebug("SSH2Encryption: bad plaintext length %d", src.size()); return dest; } dest.resize(src.size()); if (EVP_Cipher(m_ctx, (uint8_t*) dest.data(), (const uint8_t *) src.data(), src.size()) == 0) qDebug("SSH2Encryption: EVP_Cipher failed"); return dest; } SSH2MAC::SSH2MAC(const QString & algorithm) { m_ctx = HMAC_CTX_new(); if (algorithm == "hmac-sha1") { m_keyLen = 20; m_macLen = 20; m_evptype = EVP_sha1(); } else if (algorithm == "hmac-md5") { m_keyLen = 16; m_macLen = 16; m_evptype = EVP_md5(); } } SSH2MAC::~SSH2MAC() { HMAC_CTX_free(m_ctx); } QByteArray SSH2MAC::mac(const QByteArray & data) { QByteArray hmac(m_macLen, 0); HMAC_Init_ex(m_ctx, (const uint8_t*) m_key.data(), m_keyLen, m_evptype, NULL); HMAC_Update(m_ctx, (const uint8_t *) data.data(), data.size()); HMAC_Final(m_ctx, (uint8_t *) hmac.data(), NULL); return hmac; } SSH1Encryption::SSH1Encryption(Method method, const QByteArray & key) : m_method(method) { DES_cblock desKey; uint8_t * data = (unsigned char *) key.data(); memset(desKey, 0, sizeof(desKey)); memcpy(desKey, data, sizeof(desKey)); DES_set_key(&desKey, &m_key1); data += 8; memset(desKey, 0, sizeof(desKey)); memcpy(desKey, data, sizeof(desKey)); DES_set_key(&desKey, &m_key2); data += 8; memset(desKey, 0, sizeof(desKey)); memcpy(desKey, data, sizeof(desKey)); DES_set_key(&desKey, &m_key3); memset(m_IV1, 0, sizeof(m_IV1)); memset(m_IV2, 0, sizeof(m_IV2)); memset(m_IV3, 0, sizeof(m_IV3)); } SSH1Encryption::~SSH1Encryption() {} QByteArray SSH1Encryption::crypt(const QByteArray & src) { QByteArray dest; if (src.size() % 8) qDebug("============Bad data len: %d", src.size()); dest.resize(src.size()); if (m_method == Encryption) { #ifdef SSH_DEBUG qDebug() << "Encryption"; #endif DES_ncbc_encrypt((uint8_t *)src.data(), (uint8_t *)dest.data(), dest.size(), &m_key1, &m_IV1, DES_ENCRYPT); DES_ncbc_encrypt((uint8_t *)dest.data(), (uint8_t *)dest.data(), dest.size(), &m_key2, &m_IV2, DES_DECRYPT); DES_ncbc_encrypt((uint8_t *)dest.data(), (uint8_t *)dest.data(), dest.size(), &m_key3, &m_IV3, DES_ENCRYPT); } else { #ifdef SSH_DEBUG qDebug() << "Decryption"; #endif DES_ncbc_encrypt((uint8_t *)src.data(), (uint8_t *)dest.data(), dest.size(), &m_key3, &m_IV3, DES_DECRYPT); DES_ncbc_encrypt((uint8_t *)dest.data(), (uint8_t *)dest.data(), dest.size(), &m_key2, &m_IV2, DES_ENCRYPT); DES_ncbc_encrypt((uint8_t *)dest.data(), (uint8_t *)dest.data(), dest.size(), &m_key1, &m_IV1, DES_DECRYPT); } return dest; } } qterm-0.7.3/src/ssh/transport.h000066400000000000000000000065201332762052600164530ustar00rootroot00000000000000// // C++ Interface: sshtransport // // Description: // // // Author: hooey , (C) 2007 // // Copyright: See COPYING file that comes with this distribution // // #ifndef SSH_TRANSPORT_H #define SSH_TRANSPORT_H #include #include // TODO: change to EVP? #include #include #include namespace QTerm { /** @author hooey */ class SSH2Encryption { public: SSH2Encryption(const QString & algorithm); ~SSH2Encryption(); enum Method { Encryption, Decryption }; void init(const QByteArray & iv, const QByteArray & key, Method method); QByteArray crypt(const QByteArray & src); uint ivLen() const { return m_ivLen; } uint blockSize() const { return m_blockSize; } uint secretLen() const { return m_secretLen; } private: EVP_CIPHER_CTX * m_ctx; uint m_secretLen; uint m_blockSize; uint m_ivLen; const EVP_CIPHER * m_evptype; }; class SSH2MAC { public: SSH2MAC(const QString & algorithm); ~SSH2MAC(); QByteArray mac(const QByteArray & data); uint keyLen() const { return m_keyLen; } uint macLen() const { return m_macLen; } void setKey(const QByteArray& theValue) { m_key = theValue; } private: HMAC_CTX * m_ctx; QByteArray m_key; uint m_keyLen; uint m_macLen; const EVP_MD * m_evptype; }; /* class SSHCompression { public: SSHCompression(); ~SSHCompression(); }; */ class SSH2Transport { public: SSH2Transport(const QString & enc, const QString & mac, const QString & comp); ~SSH2Transport(); /*! \fn QTerm::SSH2Transport::secretLen() */ uint secretLen() const { return m_enc->secretLen(); } /*! \fn QTerm::SSH2Transport::ivLen() */ uint ivLen() const { return m_enc->ivLen(); } /*! \fn QTerm::SSH2Transport::keyLen() */ uint keyLen() const { return m_mac->keyLen(); } /*! \fn QTerm::SSH2Transport::macLen() */ uint macLen() const { return m_mac->macLen(); } void initMAC(const QByteArray & key); void initEncryption(const QByteArray & secret, const QByteArray & iv, SSH2Encryption::Method method); /*! \fn QTerm::SSH2Transport::blockLen() */ uint blockSize() const { return m_enc->blockSize(); } QByteArray crypt(const QByteArray & src); /*! \fn QTerm::SSH2Transport::mac(QByteArray & src) */ QByteArray mac(const QByteArray & src) { return m_mac->mac(src); } private: SSH2Encryption * m_enc; SSH2MAC * m_mac; // SSHCompression * m_comp; }; class SSH1Encryption { public: enum Method { Encryption, Decryption }; SSH1Encryption(Method method, const QByteArray & key); ~SSH1Encryption(); QByteArray crypt(const QByteArray & src); // void encrypt ( const uint8_t * source, uint8_t * dest, int len ); // void decrypt ( const uint8_t * source, uint8_t * dest, int len ); private: DES_cblock m_IV1; DES_cblock m_IV2; DES_cblock m_IV3; DES_key_schedule m_key1; DES_key_schedule m_key2; DES_key_schedule m_key3; Method m_method; }; } #endif // SSH_TRANSPORT_H qterm-0.7.3/src/statusBar.cpp000066400000000000000000000340731332762052600161310ustar00rootroot00000000000000#include "overlayWidget.h" #include "statusBar.h" #include "qtermglobal.h" // #include // #include // #include // #include // #include // #include //polish() // #include // #include // #include // #include //class CloseButton // #include // #include // #include //QToolTip::palette() // #include // #include // #include //Added by qt3to4: #include #include // #include #include #include #include #include #include #include #include #include #include //QToolTip::palette() //segregated classes #include "popupMessage.h" #include "progressBar.h" namespace QTerm { //TODO allow for uncertain progress periods StatusBar* StatusBar::s_instance = 0; StatusBar::StatusBar( QWidget *parent, const char *name ) : QWidget( parent ) { setObjectName(name); s_instance = this; QBoxLayout *mainlayout = new QHBoxLayout( this );//, 2, /*spacing*/5 ); mainlayout->setContentsMargins(0,0,0,0); mainlayout->setSpacing(5); //we need extra spacing due to the way we paint the surrounding boxes QBoxLayout *layout = new QHBoxLayout;//, /*spacing*/5 ); layout->setSpacing(5); layout->setContentsMargins(0,0,0,0); mainlayout->addLayout(layout); m_mainTextLabel = new QLabel( this ); m_mainTextLabel->setObjectName("mainTextLabel"); QWidget * mainProgressBarBox = new QWidget(this); mainProgressBarBox->setObjectName("progressBox"); QHBoxLayout *mainProgressBarLayout = new QHBoxLayout( mainProgressBarBox ); mainProgressBarLayout->setContentsMargins(0,0,0,0); QToolButton *b1 = new QToolButton( mainProgressBarBox );//, "cancelButton" ); b1->setObjectName("cancelButton"); mainProgressBarLayout->addWidget(b1); m_mainProgressBar = new QProgressBar( mainProgressBarBox );//, "mainProgressBar" ); m_mainProgressBar->setObjectName("mainProgressBar"); mainProgressBarLayout->addWidget(m_mainProgressBar); QToolButton *b2 = new QToolButton( mainProgressBarBox );//, "showAllProgressDetails" ); b2->setObjectName("showAllProgressDetails"); mainProgressBarLayout->addWidget(b2); mainProgressBarLayout->setSpacing( 2 ); mainProgressBarBox->hide(); layout->addWidget( m_mainTextLabel ); layout->addWidget( mainProgressBarBox ); layout->setStretchFactor( m_mainTextLabel, 3 ); layout->setStretchFactor( mainProgressBarBox, 1 ); m_otherWidgetLayout = new QHBoxLayout;//, /*spacing*/0 ); mainProgressBarLayout->setContentsMargins(0,0,0,0); m_otherWidgetLayout->setSpacing(0); mainlayout->addLayout(m_otherWidgetLayout); mainlayout->setStretchFactor( layout, 6 ); mainlayout->setStretchFactor( m_otherWidgetLayout, 4 ); //b1->setIconSet( SmallIconSet( "cancel" ) ); //b2->setIconSet( SmallIconSet( "2uparrow") ); b1->setIcon( QIcon( ":/pic/messagebox_critical.png" )); b2->setIcon( QIcon( ":/pic/messagebox_info.png" )); b2->setCheckable( true ); // QToolTip::add( b1, tr( "Abort all background-operations" ) ); // QToolTip::add( b2, tr( "Show progress detail" ) ); b1->setToolTip( tr( "Abort all background-operations" ) ); b2->setToolTip( tr( "Show progress detail" ) ); connect( b1, SIGNAL(clicked()), SLOT(abortAllProgressOperations()) ); connect( b2, SIGNAL(toggled( bool )), SLOT(toggleProgressWindow( bool )) ); m_popupProgress = new PopupMessage( this, mainProgressBarBox, 0 ); m_popupProgress->showCloseButton( false ); m_popupProgress->showCounter( false ); // m_popupProgress->setMargin( 1 ); m_popupProgress->setFrameStyle( QFrame::Box | QFrame::Raised ); m_popupProgress->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); } void StatusBar::addWidget( QWidget *widget ) { m_otherWidgetLayout->addWidget( widget ); } /// reimplemented functions void StatusBar::ensurePolished() { QWidget::ensurePolished(); int h = 0; QObjectList list = children(); //for( QObject * o = list.first(); o; o = list.next() ) { foreach (QObject * o, list){ if (o->inherits("QWidget")){ int _h = static_cast( o ) ->minimumSizeHint().height(); if ( _h > h ) h = _h; // debug() << o->className() << ", " << o->name() << ": " << _h << ": " << static_cast(o)->minimumHeight() << endl; if ( o->inherits( "QLabel" ) ) static_cast(o)->setIndent( 4 ); } } h -= 4; // it's too big usually //for ( QObject * o = list.first(); o; o = list.next() ) foreach (QObject * o, list) static_cast(o)->setFixedHeight( h ); //delete list; } void StatusBar::paintEvent( QPaintEvent* ) { QObjectList list = children();//queryList( "QWidget", 0, false, false ); QPainter p( this ); //for( QObject * o = list.first(); o; o = list.next() ) { foreach (QObject * o, list) { if (o->inherits("QWidget")){ QWidget *w = (QWidget*)o; if ( !w->isVisible() ) continue; /*style().drawPrimitive( QStyle::PE_StatusBarSection, &p, QRect( w->x() - 1, w->y() - 1, w->width() + 2, w->height() + 2 ), colorGroup(), QStyle::State_None, QStyleOption( w ) );*/ } } //delete list; } bool StatusBar::event( QEvent *e ) { if ( e->type() == QEvent::LayoutRequest ) update(); return QWidget::event( e ); } /// Messaging system void StatusBar::setMainText( const QString &text ) { m_mainText = text; // it may not be appropriate for us to set the mainText yet resetMainText(); } void StatusBar::shortMessage( const QString &text ) { m_mainTextLabel->setText( text ); m_mainTextLabel->setPalette( QToolTip::palette() ); //SingleShotPool::startTimer( 5000, this, SLOT(resetMainText()) ); resetMainText(); } void StatusBar::resetMainText() { /* if( sender() ) debug() << sender()->name() << endl; // don't reset if we are showing a shortMessage if( SingleShotPool::isActive( this, SLOT(resetMainText()) ) ) return; */ m_mainTextLabel->setPalette(QPalette()); if( allDone() ) m_mainTextLabel->setText( m_mainText ); else { //m_mainTextLabel->setPaletteBackgroundColor( m_mainTextLabel->paletteBackgroundColor().dark( 110 ) ); m_mainTextLabel->setPalette( QToolTip::palette() ); ProgressBar *bar = 0; uint count = 0; foreachType( ProgressMap, m_progressMap ) if( !(*it)->m_done ) { bar = *it; count++; } if( count == 1 ) m_mainTextLabel->setText( bar->description() + "..." ); else m_mainTextLabel->setText( tr("Multiple background-tasks running") ); } } /* void StatusBar::shortLongMessage( const QString &_short, const QString &_long ) { shortMessage( _short ); if ( !_long.isEmpty() ) { AMAROK_NOTIMPLEMENTED } } */ //void //StatusBar::longMessage( const QString &text, int /*type*/ ) /*{ PopupMessage * message; message = new PopupMessage( this, m_mainTextLabel ); message->setText( text ); if ( !m_messageQueue.isEmpty() ) message->stackUnder( m_messageQueue.last() ); message->reposition(); message->display(); raise(); m_messageQueue += message; } */ //void //StatusBar::longMessageThreadSafe( const QString &text, int /*type*/ ) /*{ QCustomEvent * e = new QCustomEvent( 1000 ); e->setData( new QString( text ) ); QApplication::postEvent( this, e ); } */ // void // StatusBar::customEvent( QCustomEvent *e ) // { // QString *s = static_cast( e->data() ); // shortMessage( *s ); // delete s; //} /// application wide progress monitor inline bool StatusBar::allDone() { for( ProgressMap::Iterator it = m_progressMap.begin(), end = m_progressMap.end(); it != end; ++it ) if( (*it)->m_done == false ) return false; return true; } ProgressBar& StatusBar::newProgressOperation( QObject *owner) { if ( m_progressMap.contains( owner ) ) return *m_progressMap[owner]; if( allDone() ) // if we're allDone then we need to remove the old progressBars before // we start anything new or the total progress will not be accurate pruneProgressBars(); else (progressBox()->findChild("showAllProgressDetails"))->show(); QWidget * hbox = new QWidget( m_popupProgress ); QHBoxLayout *hlayout = new QHBoxLayout( hbox ); QLabel *label = new QLabel( hbox ); hlayout->addWidget(label); ProgressBar *pBar = new ProgressBar( hbox, label ); hlayout->addWidget(pBar); hbox->show(); m_popupProgress->addWidget( hbox ); m_progressMap.insert( owner, pBar ); connect( owner, SIGNAL(destroyed( QObject* )), SLOT(endProgressOperation( QObject* )) ); // so we can show the correct progress information // after the ProgressBar is setup //SingleShotPool::startTimer( 0, this, SLOT(updateProgressAppearance()) ); updateProgressAppearance(); progressBox()->show(); cancelButton()->setEnabled( true ); return *m_progressMap[ owner ]; } /* ProgressBar& StatusBar::newProgressOperation( KIO::Job *job ) { ProgressBar & bar = newProgressOperation( (QObject*)job ); bar.setTotalSteps( 100 ); if(!allDone()) static_cast(progressBox()->child("showAllProgressDetails"))->show(); connect( job, SIGNAL(result( KIO::Job* )), SLOT(endProgressOperation()) ); //TODO connect( job, SIGNAL(infoMessage( KIO::Job *job, const QString& )), SLOT() ); connect( job, SIGNAL(percent( KIO::Job*, unsigned long )), SLOT(setProgress( KIO::Job*, unsigned long )) ); return bar; } */ /* void StatusBar::endProgressOperation() { QObject *owner = (QObject*)sender(); //HACK deconsting it KIO::Job *job = dynamic_cast( owner ); //FIXME doesn't seem to work for KIO::DeleteJob, it has it's own error handler and returns no error too // if you try to delete http urls for instance <- KDE SUCKS! if( job && job->error() ) longMessage( job->errorString(), Error ); endProgressOperation( owner ); } */ void StatusBar::endProgressOperation( QObject *owner ) { //the owner of this progress operation has been deleted //we need to stop listening for progress from it //NOTE we don't delete it yet, as this upsets some //things, we just call setDone(). if ( !m_progressMap.contains( owner ) ) return ; m_progressMap[owner]->setDone(); if( allDone() && m_popupProgress->isHidden() ) { cancelButton()->setEnabled( false ); //SingleShotPool::startTimer( 2000, this, SLOT(hideMainProgressBar()) ); hideMainProgressBar(); } updateTotalProgress(); } void StatusBar::abortAllProgressOperations() //slot { for( ProgressMap::Iterator it = m_progressMap.begin(), end = m_progressMap.end(); it != end; ++it ) (*it)->m_abort->animateClick(); m_mainTextLabel->setText( tr("Aborting all jobs...") ); cancelButton()->setEnabled( false ); } void StatusBar::toggleProgressWindow( bool show ) //slot { m_popupProgress->adjustSize(); //FIXME shouldn't be needed, adding bars doesn't seem to do this m_popupProgress->setVisible( show ); if( !show ) hideMainProgressBar(); //SingleShotPool::startTimer( 2000, this, SLOT(hideMainProgressBar()) ); } void StatusBar::showMainProgressBar() { if( !allDone() ) progressBox()->show(); } void StatusBar::hideMainProgressBar() { if( allDone() && m_popupProgress->isHidden() ) { pruneProgressBars(); resetMainText(); m_mainProgressBar->setValue( 0 ); progressBox()->close(); } } void StatusBar::setProgress( int steps ) { setProgress( sender(), steps ); } /* void StatusBar::setProgress( KIO::Job *job, unsigned long percent ) { setProgress( ( QObject* ) job, percent ); } */ void StatusBar::setProgress( const QObject *owner, int steps ) { if ( !m_progressMap.contains( owner ) ) return ; m_progressMap[ owner ] ->setValue( steps ); updateTotalProgress(); } void StatusBar::setProgressStatus( const QObject *owner, const QString &text ) { if ( !m_progressMap.contains( owner ) ) return ; m_progressMap[owner]->setStatus( text ); } void StatusBar::incrementProgress() { incrementProgress( sender() ); } void StatusBar::incrementProgress( const QObject *owner ) { if ( !m_progressMap.contains( owner ) ) return; m_progressMap[owner]->setValue( m_progressMap[ owner ] ->value() + 1 ); updateTotalProgress(); } void StatusBar::updateTotalProgress() { uint totalSteps = 0; uint progress = 0; foreachType( ProgressMap, m_progressMap ) { totalSteps += (*it)->maximum(); progress += (*it)->value(); } if( totalSteps == 0 && progress == 0 ) return; m_mainProgressBar->setMaximum( totalSteps ); m_mainProgressBar->setValue( progress ); pruneProgressBars(); } void StatusBar::updateProgressAppearance() { toggleProgressWindowButton()->setVisible( m_progressMap.count() > 1 ); resetMainText(); updateTotalProgress(); } void StatusBar::pruneProgressBars() { ProgressMap::Iterator it = m_progressMap.begin(); const ProgressMap::Iterator end = m_progressMap.end(); int count = 0; bool removedBar = false; while( it != end ) if( (*it)->m_done == true ) { delete (*it)->m_label; delete (*it)->m_abort; delete (*it); ProgressMap::Iterator jt = it; ++it; m_progressMap.erase( jt ); removedBar = true; } else { ++it; ++count; } if(count==1 && removedBar) //if its gone from 2 or more bars to one bar... { resetMainText(); (progressBox()->findChild("showAllProgressDetails"))->hide(); m_popupProgress->setVisible(false); } } } //namespace QTerm //#include "statusBar.moc" #include qterm-0.7.3/src/statusBar.h000066400000000000000000000074761332762052600156050ustar00rootroot00000000000000#ifndef QTERM_STATUSBAR_H #define QTERM_STATUSBAR_H #include "progressBar.h" //convenience // #include //baseclass // #include //stack allocated // #include //stack allocated //Added by qt3to4: #include #include #include #include #include #include #include class QString; class QLayout; class QLabel; class QString; namespace QTerm { class PopupMessage; typedef QMap ProgressMap; class StatusBar : public QWidget { Q_OBJECT public: StatusBar(QWidget * parent, const char * name = "mainStatusBar" ); static StatusBar* instance() { return s_instance; } /** * Start a progress operation, if owner is 0, the return value is * undefined - the application will probably crash. * @param owner controls progress for this operation * @return the progressBar so you can configure its parameters * @see setProgress( QObject*, int ) * @see incrementProgress( QObject* ) * @see setProgressStatus( const QObject*, const QString& ) */ ProgressBar &newProgressOperation( QObject *owner ); void setProgress( const QObject * owner, int steps ); void incrementProgress( const QObject * owner ); void setProgressStatus( const QObject * owner, const QString & text ); public slots: void setMainText( const QString &text ); void resetMainText(); void shortMessage( const QString &text ); /** Stop anticipating progress from sender() */ //void endProgressOperation(); /** Stop anticipating progress from @param owner */ void endProgressOperation( QObject *owner ); /** * Convenience function works like setProgress( QObject*, int ) * Uses the return value from sender() to determine the owner of * the progress bar in question */ void setProgress( int steps ); /** * Convenience function works like incrementProgress( QObject* ) * Uses the return value from sender() to determine the owner of * the progress bar in question */ void incrementProgress(); public slots: void toggleProgressWindow( bool show ); void abortAllProgressOperations(); private slots: /** For internal use against KIO::Jobs */ //void setProgress( KIO::Job*, unsigned long percent ); void showMainProgressBar(); void hideMainProgressBar(); void updateProgressAppearance(); protected: virtual void ensurePolished(); virtual void paintEvent( QPaintEvent* ); virtual bool event( QEvent* ); /** * You must parent the widget to the statusbar, we won't do that * for you! The widget will be added to the right of the layout. * Currently you must add widgets before the statusbar gets shown * for the first time, because we are not currently very flexible. */ void addWidget( QWidget *widget ); QLabel *m_mainTextLabel; private: void updateTotalProgress(); bool allDone(); ///@return true if all progress operations are complete void pruneProgressBars(); /// deletes old progress bars QWidget *cancelButton() { return findChild( "cancelButton" ); } QWidget *toggleProgressWindowButton() { return findChild( "showAllProgressDetails" ); } QWidget *progressBox() { return findChild( "progressBox" ); } PopupMessage *m_popupProgress; QProgressBar *m_mainProgressBar; ProgressMap m_progressMap; QList m_messageQueue; QString m_mainText; QLayout *m_otherWidgetLayout; static StatusBar * s_instance; }; } /** * You can use this for lists that aren't QStringLists. * Watch out for the definition of last in the scope of your for. * * BundleList bundles; * foreachType( BundleList, bundles ) * debug() << *it.url() << endl; */ #define foreachType( Type, x ) \ for( Type::ConstIterator it = x.begin(), end = x.end(); it != end; ++it ) #endif qterm-0.7.3/src/termstring.cpp000066400000000000000000000256111332762052600163550ustar00rootroot00000000000000// // C++ Implementation: TermString // // Description: // // // Author: hooey , (C) 2008 // // Copyright: See COPYING file that comes with this distribution // // #include "termstring.h" #include //FIXME: check the range of index!!! namespace QTerm { TermString::TermString() :m_string(),m_index() { } TermString::TermString(const QString & str) :m_string(str),m_index() { updateIndex(); } TermString::~TermString() { } void TermString::replace(int index, int length, const QString & str) { if (index >= m_index.size()) { m_string += QString(index - m_index.size(), ' '); append(str); return; } int startpos = m_index.at(index); int index2 = index+length < m_index.size() ? index+length - 1 : m_index.size() - 1; int endpos = m_index.at(index2); //TODO: I need to modify the replacing string for PTT, I doubt this is the correct thing to do //since it is more like some other bug in the calculation of char length, but for now, it works //and does not seem to introduce any regressions. QString newStr = str; if (startpos == -1 && index > 0) { //qDebug("TermString::replace: start pos is in the middle of a char"); startpos = m_index.at(index-1); newStr = " " + newStr; } if (index2 < (m_index.size() - 1) && m_index.at(index2+1) == -1) { //qDebug("TermString::mid: end pos is in the middle of a char"); newStr = newStr + " "; } if (endpos < 0 && index2 > 0) { endpos = m_index.at(index2 - 1); //Could this happen at the endof a string? } //qDebug() << "startpos: " << startpos << " endpos: " << endpos; m_string.replace(startpos, endpos-startpos + 1, newStr); updateIndex(); } void TermString::append(const QString & str) { m_string.append(str); updateIndex(); } void TermString::insert(int index, const QString & str) { if (index > m_index.size()) { m_string += QString(index - m_index.size(), ' '); } m_string.insert(index, str); updateIndex(); } void TermString::dumpIndex() { qDebug() << "Index for string: " << m_string << " " << m_index.length(); for (int i=0; i < m_index.length(); i++) { printf("%d ",(char)m_index[i]); } printf("\n"); } void TermString::updateIndex() { m_index.clear(); int cellCounter = 0; for (int i = 0; i < m_string.length(); i++) { int len = wcwidth(m_string.at(i)); if (len <= 0) { qDebug("TermString::updateIndex: Non printable char"); continue; } m_index.append(i); if (len > 1) { m_index.append(-1); cellCounter++; } cellCounter++; //qDebug() << "Char: " << m_string.at(i) << " index " << i << " counter " << cellCounter; } } void TermString::remove(int index, int len) { if (index >= m_index.size()) { qDebug("TermString::remove: pos larger than the size of the array"); return; } int pos = m_index.at(index); if (pos == -1) { qDebug("TermString::remove: pos is in the middle of a char"); pos = m_index.at(index-1); } m_string.remove(index, len); } QString TermString::string() { return m_string; } QString TermString::mid(int index, int len) { if (index < 0) { return QString(); } if (index >= m_index.size()) { //qDebug("TermString::mid: pos larger than the size of the array"); return QString(); } int startpos= m_index.at(index); if (startpos == -1) { //qDebug("TermString::mid: start pos is in the middle of a char"); startpos = m_index.at(index-1); } if (len == -1) { return m_string.mid(startpos,-1); } int index2 = index+len < m_index.size() ? index+len - 1 : m_index.size() - 1; int endpos = m_index.at(index2); if (index2 > 0 && index2 < (m_index.size() - 1) && m_index.at(index2+1) == -1) { //qDebug("TermString::mid: end pos is in the middle of a char"); return mid(index, len - 1); } if (endpos == -1) { endpos = m_index.at(index2-1); } return m_string.mid(startpos, endpos-startpos + 1); } int TermString::length() { return m_index.size(); } int TermString::beginIndex(int pos) { return m_index.indexOf(pos); } int TermString::size(int index) { if (m_index.at(index) == -1 ) { return 2; } if ((index+1) < m_index.size() && m_index.at(index+1) == -1) { return 2; } return 1; } bool TermString::isPartial(int index) { if (index < 0 || index >= m_index.size()) { //qDebug() << "length " << m_index.size() << ", index: " << index; return false; } if (m_index.at(index) == -1) { return true; } return false; } int TermString::pos(int index) { if (index < 0 || index >= m_index.length()) { //qDebug("pos: invalid index: %d", index); return -1; } if (m_index.at(index) == -1) { return m_index.at(index-1); } return m_index.at(index); } bool TermString::isEmpty() { if (m_string.isNull()) { return true; } return m_string.isEmpty(); } // Shameless copied from git int TermString::bisearch(QChar ucs, const struct interval *table, int max) { int min = 0; int mid; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } /* The following two functions define the column width of an ISO 10646 * character as follows: * * - The null character (U+0000) has a column width of 0. * * - Other C0/C1 control characters and DEL will lead to a return * value of -1. * * - Non-spacing and enclosing combining characters (general * category code Mn or Me in the Unicode database) have a * column width of 0. * * - SOFT HYPHEN (U+00AD) has a column width of 1. * * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. * * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian * Full-width (F) category as defined in Unicode Technical * Report #11 have a column width of 2. * * - All remaining characters (including all printable * ISO 8859-1 and WGL4 characters, Unicode control characters, * etc.) have a column width of 1. * * This implementation assumes that ucs_char_t characters are encoded * in ISO 10646. */ int TermString::wcwidth(QChar ch) { if (ch >= 0x7f) { return 2; } return 1; /* * Sorted list of non-overlapping intervals of non-spacing characters, * generated by * "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c". */ static const struct interval combining[] = { { 0x0300, 0x0357 }, { 0x035D, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 }, { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C4 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, { 0x064B, 0x0658 }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EA }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ch == 0) return 0; if (ch < 32 || (ch >= 0x7f && ch < 0xa0)) return -1; /* binary search in table of non-spacing characters */ if (bisearch(ch, combining, sizeof(combining) / sizeof(struct interval) - 1)) return 0; /* * If we arrive here, ch is neither a combining nor a C0/C1 * control character. */ return 1 + (ch >= 0x1100 && /* Hangul Jamo init. consonants */ (ch <= 0x115f || ch == 0x2329 || ch == 0x232a || /* CJK ... Yi */ (ch >= 0x2e80 && ch <= 0xa4cf && ch != 0x303f) || /* Hangul Syllables */ (ch >= 0xac00 && ch <= 0xd7a3) || /* CJK Compatibility Ideographs */ (ch >= 0xf900 && ch <= 0xfaff) || /* CJK Compatibility Forms */ (ch >= 0xfe30 && ch <= 0xfe6f) || /* Fullwidth Forms */ (ch >= 0xff00 && ch <= 0xff60) || (ch >= 0xffe0 && ch <= 0xffe6) || (ch >= 0x20000 && ch <= 0x2fffd) || (ch >= 0x30000 && ch <= 0x3fffd))); } } // namespace QTerm qterm-0.7.3/src/termstring.h000066400000000000000000000022101332762052600160100ustar00rootroot00000000000000// // C++ Interface: TermString // // Description: // // // Author: hooey , (C) 2009 // // Copyright: See COPYING file that comes with this distribution // // #ifndef TERMSTRING_H #define TERMSTRING_H #include #include namespace QTerm { class TermString { public: TermString(); TermString(const QString & str); ~TermString(); void insert(int index, const QString & str); void append(const QString & str); void replace(int index, int length, const QString & str); void remove(int index, int length); int length(); QString mid(int index, int len); QString string(); int beginIndex(int pos); int pos(int index); int size(int index); bool isPartial(int index); bool isEmpty(); static int wcwidth(QChar ch); private: struct interval { int first; int last; }; static int bisearch(QChar ucs, const struct interval *table, int max); void updateIndex(); void dumpIndex(); QString m_string; //TODO: Switch to QVector after we drop Qt4 support QList m_index; }; } // namespace QTerm #endif // TERMSTRING_H qterm-0.7.3/src/test/000077500000000000000000000000001332762052600144255ustar00rootroot00000000000000qterm-0.7.3/src/test/CMakeLists.txt000066400000000000000000000001651332762052600171670ustar00rootroot00000000000000enable_testing() add_subdirectory(config) add_subdirectory(global) add_subdirectory(hostinfo) #add_subdirectory(ssh) qterm-0.7.3/src/test/config/000077500000000000000000000000001332762052600156725ustar00rootroot00000000000000qterm-0.7.3/src/test/config/CMakeLists.txt000066400000000000000000000007611332762052600204360ustar00rootroot00000000000000set(config_SRCS testconfig.cpp ../../qtermconfig.cpp) qt4_automoc(${config_SRCS}) include_directories( ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTTEST_INCLUDE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(testconfig ${config_SRCS}) target_link_libraries(testconfig ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ) add_test(config ${EXEC_DIR}/testconfig) qterm-0.7.3/src/test/config/testconfig.cpp000066400000000000000000000022251332762052600205440ustar00rootroot00000000000000#include "testconfig.h" #include "qtermconfig.h" #include #include using namespace QTerm; void TestConfig::initTestCase() { conf= new Config("config.test"); } void TestConfig::test() { QVERIFY(conf->setItemValue("section","key","test")); QVERIFY(conf->save("config.test")); QString str = conf->getItemValue("section","key").toString(); QVERIFY(str == "test"); QVERIFY(conf->deleteItem("section","key")); QVERIFY(conf->save("config.test")); str = conf->getItemValue("section","key").toString(); QVERIFY(str == ""); QVERIFY(conf->setItemValue("section","key1","test")); QVERIFY(conf->setItemValue("section","key2","test")); QVERIFY(conf->save("config.test")); //QVERIFY(conf->deleteSection("section")); QVERIFY(conf->hasSection("section")); QVERIFY(conf->renameSection("section", "another section")); QVERIFY(conf->hasSection("another section")); QVERIFY(!conf->hasSection("section")); QVERIFY(conf->deleteSection("another section")); QVERIFY(conf->save("config.test")); } void TestConfig::cleanupTestCase() { delete conf; } QTEST_MAIN(TestConfig) #include "testconfig.moc" qterm-0.7.3/src/test/config/testconfig.h000066400000000000000000000004421332762052600202100ustar00rootroot00000000000000#ifndef TEST_CONFIG_H #define TEST_CONFIG_H #include namespace QTerm { class Config; class TestConfig : public QObject { Q_OBJECT private slots: void initTestCase(); void test(); void cleanupTestCase(); private: Config * conf; }; } // namespace QTerm #endif qterm-0.7.3/src/test/global/000077500000000000000000000000001332762052600156655ustar00rootroot00000000000000qterm-0.7.3/src/test/global/CMakeLists.txt000066400000000000000000000011661332762052600204310ustar00rootroot00000000000000set(global_SRCS testglobal.cpp ../../qtermconfig.cpp ../../qtermglobal.cpp ../../qtermparam.cpp ../../qtermconvert.cpp) qt4_automoc(${global_SRCS}) remove_definitions(-DKWALLET_ENABLED) include_directories( ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTTEST_INCLUDE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(testglobal ${global_SRCS}) target_link_libraries(testglobal ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTXML_LIBRARY} ) add_test(global ${EXEC_DIR}/testglobal) qterm-0.7.3/src/test/global/testglobal.cpp000066400000000000000000000004431332762052600205320ustar00rootroot00000000000000#include "testglobal.h" #include "qtermglobal.h" #include using namespace QTerm; void TestGlobal::testGlobal() { QDomDocument doc = Global::instance()->addrXml(); qDebug() << Global::instance()->loadFavoriteList(doc); } QTEST_MAIN(TestGlobal) #include "testglobal.moc" qterm-0.7.3/src/test/global/testglobal.h000066400000000000000000000003321332762052600201740ustar00rootroot00000000000000#ifndef TEST_GLOBAL_H #define TEST_GLOBAL_H #include namespace QTerm { class TestGlobal : public QObject { Q_OBJECT private slots: void testGlobal(); }; } // namespace QTerm #endif // TEST_GLOBAL_H qterm-0.7.3/src/test/hostinfo/000077500000000000000000000000001332762052600162565ustar00rootroot00000000000000qterm-0.7.3/src/test/hostinfo/CMakeLists.txt000066400000000000000000000010321332762052600210120ustar00rootroot00000000000000set(hostinfo_SRCS testhostinfo.cpp ../../hostinfo.cpp) qt4_automoc(${hostinfo_SRCS}) include_directories( ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTNETWORK_INCLUDE_DIR} ${QT_QTTEST_INCLUDE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(testhostinfo ${hostinfo_SRCS}) target_link_libraries(testhostinfo ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ) add_test(hostinfo ${EXEC_DIR}/testhostinfo) qterm-0.7.3/src/test/hostinfo/testhostinfo.cpp000066400000000000000000000013141332762052600215120ustar00rootroot00000000000000#include "testhostinfo.h" #include "hostinfo.h" #include using namespace QTerm; void TestHostInfo::testHostInfo() { HostInfo hostinfo("newsmth.net", 22); QVERIFY(hostinfo.hostName() == "newsmth.net"); } void TestHostInfo::testSSHHostInfo() { SSHInfo hostinfo("newsmth.net", 22); hostinfo.setUserName("hooey"); Completion completion; completion["who"]="Lu Ran"; completion["test"]="Temp"; hostinfo.setAutoCompletion(completion); bool test=false; QVERIFY(hostinfo.userName(&test) == "hooey"); QVERIFY(test); QVERIFY(hostinfo.answer("test") == "Temp"); QVERIFY(hostinfo.userName(&test) == "hooey"); } QTEST_MAIN(TestHostInfo) #include "testhostinfo.moc" qterm-0.7.3/src/test/hostinfo/testhostinfo.h000066400000000000000000000003771332762052600211670ustar00rootroot00000000000000#ifndef TEST_HOSTINFO_H #define TEST_HOSTINFO_H #include namespace QTerm { class TestHostInfo : public QObject { Q_OBJECT private slots: void testHostInfo(); void testSSHHostInfo(); }; } // namespace QTerm #endif // TEST_HOSTINFO_H qterm-0.7.3/src/test/http/000077500000000000000000000000001332762052600154045ustar00rootroot00000000000000qterm-0.7.3/src/test/http/http.pro000066400000000000000000000005561332762052600171130ustar00rootroot00000000000000###################################################################### # Automatically generated by qmake (2.01a) Mon Jun 21 08:53:54 2010 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . QT += network # Input HEADERS += qnamredirect.h SOURCES += main.cpp qnamredirect.cpp qterm-0.7.3/src/test/http/main.cpp000066400000000000000000000003011332762052600170260ustar00rootroot00000000000000#include "qnamredirect.h" #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QNAMRedirect w; w.show(); return a.exec(); } qterm-0.7.3/src/test/http/qnamredirect.cpp000066400000000000000000000073551332762052600206000ustar00rootroot00000000000000/* * Copyright (c) 2009 Nokia Corporation */ #include "qnamredirect.h" QNAMRedirect::QNAMRedirect(QWidget *parent) : QMainWindow(parent) { _qnam = createQNAM(); _originalUrl = "http://mitbbs.com/article2/PhotoForum/31264659_224.jpg"; QVBoxLayout* layout = new QVBoxLayout; #ifdef Q_OS_SYMBIAN setStyleSheet("QLabel, QPushButton{ font: 5pt; }"); #endif _textContainer = new QLabel("Click the button to test URL redirect!"); _textContainer->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); _textContainer->setAlignment(Qt::AlignCenter); _textContainer->setWordWrap(true); layout->addWidget(_textContainer); QPushButton* testButton = new QPushButton("Click here!"); /* If the button is clicked, we'll do a request. */ connect(testButton, SIGNAL(clicked()), this, SLOT(doRequest())); layout->addWidget(testButton); QFrame* frame = new QFrame; frame->setLayout(layout); setCentralWidget(frame); } QNAMRedirect::~QNAMRedirect() { if(_qnam) { _qnam->deleteLater(); } if(_textContainer) { _textContainer->deleteLater(); } } QNetworkAccessManager* QNAMRedirect::createQNAM() { QNetworkAccessManager* qnam = new QNetworkAccessManager(this); /* We'll handle the finished reply in replyFinished */ connect(qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); return qnam; } void QNAMRedirect::doRequest() { QString text = "QNAMRedirect::doRequest doing request to "; text.append(this->_originalUrl.toString()); this->_textContainer->setText(text); /* Let's just create network request for this predifned URL... */ QNetworkRequest request(this->_originalUrl); /* ...and ask the manager to do the request. */ QNetWorkReply reply = this->_qnam->get(request); connect(reply, SIGNAL(finished()), this, SLOT(httpFinished())); connect(reply, SIGNAL(readyRead()),this, SLOT(httpReadyRead())); connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDataReadProgress(qint64,qint64))); } void QNAMRedirect::replyFinished(QNetworkReply* reply) { /* * Reply is finished! * We'll ask for the reply about the Redirection attribute * http://doc.trolltech.com/qnetworkrequest.html#Attribute-enum */ QVariant possibleRedirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); /* We'll deduct if the redirection is valid in the redirectUrl function */ _urlRedirectedTo = this->redirectUrl(possibleRedirectUrl.toUrl(), _urlRedirectedTo); /* If the URL is not empty, we're being redirected. */ if(!_urlRedirectedTo.isEmpty()) { QString text = QString("QNAMRedirect::replyFinished: Redirected to ") .append(_urlRedirectedTo.toString()); this->_textContainer->setText(text); /* We'll do another request to the redirection url. */ this->_qnam->get(QNetworkRequest(_urlRedirectedTo)); } else { /* * We weren't redirected anymore * so we arrived to the final destination... */ QString text = QString("QNAMRedirect::replyFinished: Arrived to ") .append(reply->url().toString()); this->_textContainer->setText(text); /* ...so this can be cleared. */ _urlRedirectedTo.clear(); } /* Clean up. */ reply->deleteLater(); } QUrl QNAMRedirect::redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const { QUrl redirectUrl; /* * Check if the URL is empty and * that we aren't being fooled into a infinite redirect loop. * We could also keep track of how many redirects we have been to * and set a limit to it, but we'll leave that to you. */ if(!possibleRedirectUrl.isEmpty() && possibleRedirectUrl != oldRedirectUrl) { redirectUrl = possibleRedirectUrl; } return redirectUrl; } qterm-0.7.3/src/test/http/qnamredirect.h000066400000000000000000000015771332762052600202450ustar00rootroot00000000000000/* * Copyright (c) 2009 Nokia Corporation */ #ifndef QNAMREDIRECT_H #define QNAMREDIRECT_H #include #include #include #include #include #include #include #include #include #include class QNAMRedirect : public QMainWindow { Q_OBJECT public: QNAMRedirect(QWidget *parent = 0); ~QNAMRedirect(); private slots: void doRequest(); void replyFinished(QNetworkReply* reply); private: QPointer _qnam; QUrl _originalUrl; QUrl _urlRedirectedTo; QPointer _textContainer; QNetworkAccessManager* createQNAM(); QUrl redirectUrl(const QUrl& possibleRedirectUrl, const QUrl& oldRedirectUrl) const; }; #endif // QNAMREDIRECT_H qterm-0.7.3/src/test/ssh/000077500000000000000000000000001332762052600152225ustar00rootroot00000000000000qterm-0.7.3/src/test/ssh/CMakeLists.txt000066400000000000000000000013451332762052600177650ustar00rootroot00000000000000set(ssh_SRCS ../../ssh/auth.cpp ../../ssh/channel.cpp ../../ssh/crc32.cpp ../../ssh/kex.cpp ../../ssh/packet.cpp ../../ssh/socket.cpp ../../ssh/transport.cpp ../../qtermsocket.cpp ../../hostinfo.cpp testssh.cpp) qt4_automoc(${ssh_SRCS}) include_directories( ${QT_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTNETWORK_INCLUDE_DIR} ${QT_QTTEST_INCLUDE_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(testssh ${ssh_SRCS}) target_link_libraries(testssh ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTTEST_LIBRARY} ${OPENSSL_CRYPTO_LIBRARIES} ) add_test(ssh ${EXEC_DIR}/testssh) qterm-0.7.3/src/test/ssh/testssh.cpp000066400000000000000000000006101332762052600174200ustar00rootroot00000000000000#include "testssh.h" #include "hostinfo.h" #include "ssh/socket.h" using namespace QTerm; void TestSSH::testSSH() { SSHSocket * socket = new SSHSocket; SSHInfo * hostInfo = new SSHInfo("test", 22); hostInfo->setUserName("hooey"); socket->connectToHost(hostInfo); QTest::qWait(2000); //QVERIFY(socket->status() == "OK"); } QTEST_MAIN(TestSSH) #include "testssh.moc" qterm-0.7.3/src/test/ssh/testssh.h000066400000000000000000000002741332762052600170730ustar00rootroot00000000000000#ifndef SSH_TEST_H #define SSH_TEST_H #include namespace QTerm { class TestSSH: public QObject { Q_OBJECT private slots: void testSSH(); }; } // namespace QTerm #endif qterm-0.7.3/src/toolbardialog.cpp000066400000000000000000000231731332762052600170020ustar00rootroot00000000000000#include "toolbardialog.h" #include "qtermglobal.h" #include #include #include #include #include namespace QTerm { ToolbarDialog::ToolbarDialog(QWidget* parent) : QDialog(parent),m_defaultToolBars() { setupUi(this); createDefaultToolBars(); // populate all available actions QList actions = parent->findChildren(QRegExp("action*")); QAction* action; foreach(action, actions) { if (action->actionGroup()->objectName() != "extraGroup") continue; QListWidgetItem* item = new QListWidgetItem(action->toolTip()); item->setIcon(action->icon()); item->setData(Qt::UserRole, QVariant::fromValue((QObject*)action)); listAllActions->addItem(item); } // Important to add special Separator listAllActions->addItem("Separator"); QList toolbars = parent->findChildren(); QToolBar* toolbar = NULL; int index = 0; foreach(toolbar, toolbars) { index = (int)(toolbar->iconSize().height()/10)-1; if (toolbar->objectName() != "keyToolBar") comboToolbars->addItem(toolbar->windowTitle(), QVariant::fromValue((QObject*)toolbar)); } comboToolbarsCurrentIndexChanged(0); QMainWindow *mwParent = qobject_cast(parent); comboButtonStyle->setCurrentIndex(int(mwParent->toolButtonStyle())); comboIconSize->setCurrentIndex(index); connect(buttonUp, SIGNAL(clicked()), this, SLOT(buttonUpClicked())); connect(buttonDown, SIGNAL(clicked()), this, SLOT(buttonDownClicked())); connect(buttonAdd, SIGNAL(clicked()), this, SLOT(buttonAddClicked())); connect(buttonRemove, SIGNAL(clicked()), this, SLOT(buttonRemoveClicked())); connect(comboToolbars, SIGNAL(currentIndexChanged(int)), this, SLOT(comboToolbarsCurrentIndexChanged(int))); connect(comboIconSize, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(comboIconSizeCurrentIndexChanged(const QString &))); connect(comboButtonStyle, SIGNAL(currentIndexChanged(int)),this, SLOT(comboButtonStyleCurrentIndexChanged(int))); connect(buttonDefault, SIGNAL(clicked()), this, SLOT(restoreDefaultToolbars())); restoreGeometry(Global::instance()->loadGeometry("Toolbar")); } ToolbarDialog::~ToolbarDialog() { Global::instance()->saveGeometry("Toolbar",saveGeometry()); } void ToolbarDialog::buttonAddClicked() { // get the target toolar QVariant v; v = comboToolbars->itemData(comboToolbars->currentIndex()); QToolBar *toolbar = qobject_cast(v.value()); // get the action to be added QListWidgetItem* itemSrc = listAllActions->currentItem(); if (itemSrc == NULL) return; v = itemSrc->data(Qt::UserRole); QAction *actionSrc = qobject_cast(v.value()); if (toolbar->actions().contains(actionSrc)) return; // get the position to be inserted QListWidgetItem* itemPos = listUsedActions->currentItem(); QAction *actionCurrent = 0; QListWidgetItem* itemNew = new QListWidgetItem(); if (itemPos != 0) { //get the currentItem data if have one v = itemPos->data(Qt::UserRole); actionCurrent = qobject_cast(v.value()); } if (itemSrc->text() == "Separator") { actionSrc = toolbar->insertSeparator(actionCurrent); itemNew->setText("Separator"); } else { toolbar->insertAction(actionCurrent, actionSrc); itemNew->setText(actionSrc->toolTip()); itemNew->setIcon(actionSrc->icon()); } itemNew->setData(Qt::UserRole, QVariant::fromValue((QObject*)actionSrc)); if (listUsedActions->currentRow() == -1) //append if nothing selected, consistent with QObject::insertAction(); listUsedActions->addItem(itemNew); else listUsedActions->insertItem(listUsedActions->currentRow(), itemNew); listUsedActions->setCurrentItem(itemNew); } void ToolbarDialog::buttonRemoveClicked() { // get the target toolar QVariant v; v = comboToolbars->itemData(comboToolbars->currentIndex()); QToolBar *toolbar = qobject_cast(v.value()); // get the action to be removed QListWidgetItem* itemPos = listUsedActions->currentItem(); if (itemPos != 0) { //get the currentItem data if have one v = itemPos->data(Qt::UserRole); QAction *actionCurrent = qobject_cast(v.value()); toolbar->removeAction(actionCurrent); delete itemPos; } } void ToolbarDialog::buttonUpClicked() { // get the target toolar QVariant v; v = comboToolbars->itemData(comboToolbars->currentIndex()); QToolBar *toolbar = qobject_cast(v.value()); int index = listUsedActions->currentRow(); if (index <= 0) // either the first or nothing selected return; // take out current action/item QListWidgetItem* itemCurrent = listUsedActions->takeItem(index); v = itemCurrent->data(Qt::UserRole); QAction *actionCurrent = qobject_cast(v.value()); toolbar->removeAction(actionCurrent); // insert it back QListWidgetItem* itemBefore = listUsedActions->item(index - 1); v = itemBefore->data(Qt::UserRole); QAction *actionBefore = qobject_cast(v.value()); toolbar->insertAction(actionBefore, actionCurrent); listUsedActions->insertItem(index - 1, itemCurrent); listUsedActions->setCurrentItem(itemCurrent); } void ToolbarDialog::buttonDownClicked() { // get the target toolar QVariant v; v = comboToolbars->itemData(comboToolbars->currentIndex()); QToolBar *toolbar = qobject_cast(v.value()); int index = listUsedActions->currentRow(); if (index < 0 || index == listUsedActions->count() - 1) // either the last or nothing selected return; // take out action/item behind QListWidgetItem* itemBehind = listUsedActions->takeItem(index + 1); v = itemBehind->data(Qt::UserRole); QAction *actionBehind = qobject_cast(v.value()); toolbar->removeAction(actionBehind); // insert it back QListWidgetItem* itemCurrent = listUsedActions->item(index); v = itemCurrent->data(Qt::UserRole); QAction *actionCurrent = qobject_cast(v.value()); toolbar->insertAction(actionCurrent, actionBehind); listUsedActions->insertItem(index, itemBehind); } void ToolbarDialog::comboButtonStyleCurrentIndexChanged(int index) { QMainWindow *parent = qobject_cast(parentWidget()); parent->setToolButtonStyle(Qt::ToolButtonStyle(index)); } void ToolbarDialog::comboIconSizeCurrentIndexChanged(const QString& item) { //QMainWindow *parent = qobject_cast(parentWidget()); QSize iconSize; if (item == "16x16") iconSize = QSize(16,16); else if (item == "22x22") iconSize = QSize(22,22); else if (item == "32x32") iconSize = QSize(32,32); else if (item == "48x48") iconSize = QSize(48,48); else iconSize = QSize(16,16); QList toolbars = parent()->findChildren(); QToolBar* toolbar; foreach(toolbar, toolbars) toolbar->setIconSize(iconSize); } void ToolbarDialog::comboToolbarsCurrentIndexChanged(int index) { listUsedActions->clear(); QToolBar *toolbar = qobject_cast(comboToolbars->itemData(index).value()); foreach(QAction *action, toolbar->actions()) { QListWidgetItem* item = new QListWidgetItem(); // another ugly hack for connectButton if (action->objectName() == "actionConnectButton") continue; else if (action->isSeparator()) item->setText("Separator"); else { item->setText(action->toolTip()); item->setIcon(action->icon()); } item->setData(Qt::UserRole, QVariant::fromValue((QObject*)action)); listUsedActions->addItem(item); } } void ToolbarDialog::createDefaultToolBars() { QStringList listActions; listActions << "actionQuickConnect"; m_defaultToolBars.insert("terminalToolBar", listActions); listActions.clear(); listActions << "actionDisconnect" << "Separator" << "actionCopy" << "actionPaste" << "actionRect" << "actionColorCopy" << "Separator" << "actionAppearance" << "actionRefresh" << "Separator" << "actionCurrentSession" << "Separator" << "actionCopyArticle" << "actionAntiIdle" << "actionAutoReply" << "actionViewMessage" << "actionMouse" << "actionBeep" << "actionReconnect"; m_defaultToolBars.insert("mainToolBar", listActions); } void ToolbarDialog::restoreDefaultToolbars() { QList toolbars = parent()->findChildren(); QToolBar* toolbar; // populate all available actions foreach(toolbar, toolbars) { if (m_defaultToolBars.contains(toolbar->objectName())){ QList actions = toolbar->actions(); QStringList listActions = m_defaultToolBars.value(toolbar->objectName()); // Ugly hack for connectButton foreach (QAction * act, actions) { if (toolbar->objectName() != "mainToolBar" && act->objectName() != "actionConnectButton") toolbar->removeAction(act); } foreach (QString action, listActions) { QAction * obj = parent()->findChild(action); if (obj != NULL) { toolbar->addAction(obj); } } } } comboToolbarsCurrentIndexChanged(comboToolbars->currentIndex()); } } // namespace QTerm #include qterm-0.7.3/src/toolbardialog.h000066400000000000000000000013011332762052600164340ustar00rootroot00000000000000#ifndef TOOLBARDIALOG_H #define TOOLBARDIALOG_H #include "ui_toolbardialog.h" namespace QTerm { class ToolbarDialog : public QDialog, public Ui_ToolbarDialog { Q_OBJECT public: ToolbarDialog(QWidget*); ~ToolbarDialog(); public slots: void buttonUpClicked(); void buttonDownClicked(); void buttonAddClicked(); void buttonRemoveClicked(); void comboToolbarsCurrentIndexChanged(int); void comboIconSizeCurrentIndexChanged(const QString&); void comboButtonStyleCurrentIndexChanged(int); void restoreDefaultToolbars(); private: void createDefaultToolBars(); QMap m_defaultToolBars; }; } // namespace QTerm #endif //TOOLBARDIALOG_H qterm-0.7.3/src/uaocodec.cpp000066400000000000000000037254271332762052600157600ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "uaocodec.h" QT_BEGIN_NAMESPACE #ifndef QT_NO_TEXTCODEC #define InRange(c, lower, upper) (((c) >= (lower)) && ((c) <= (upper))) #define IsLatin(c) ((c) < 0x80) #define IsFirstByte(c) (InRange((c), 0x81, 0xFE)) #define IsSecondByteRange1(c) (InRange((c), 0x40, 0x7E)) #define IsSecondByteRange2(c) (InRange((c), 0xA1, 0xFE)) #define IsSecondByte(c) (IsSecondByteRange1(c) || IsSecondByteRange2(c)) #define QValidChar(u) ((u) ? QChar((ushort)(u)) : QChar(QChar::ReplacementCharacter)) int UAOCodec::_mibEnum() { return 0; } QByteArray UAOCodec::_name() { return "UAO"; } /* * ucs4 to big5hkscs convert routing */ typedef struct { ushort index; /* index into big table */ ushort used; /* bitmask of used entries */ } Summary16; static const ushort big5_to_ucs[] = { 19991, 20002, 20012, 20053, 20066, 20106, 20144, 20203, 20205, 20220, 20252, 20362, 20479, 20546, 20560, 20600, 20696, 20702, 20724, 20758, 20810, 20817, 20836, 20842, 20869, 20880, 20893, 20902, 20904, 20905, 20935, 20950, 20955, 20972, 20988, 21003, 21012, 21013, 21024, 21035, 21049, 21071, 21105, 21136, 21138, 21140, 21148, 21167, 21173, 21200, 21248, 21255, 21284, 21318, 21343, 21395, 21424, 21469, 21539, 21584, 21585, 21642, 21661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21667, 21684, 21712, 21795, 21823, 21836, 21843, 21853, 21868, 21918, 21929, 21996, 22005, 22051, 22096, 22140, 22154, 22164, 22176, 22191, 22232, 22272, 22361, 22373, 22399, 22405, 22409, 22433, 22444, 22452, 22464, 22472, 22483, 22511, 22596, 22636, 22674, 22682, 22706, 22712, 22757, 22779, 22786, 22795, 22800, 22808, 22811, 29836, 29837, 29849, 29851, 29860, 29876, 29881, 29896, 29900, 29904, 29907, 30018, 30037, 30062, 30093, 30110, 30172, 30252, 30287, 30289, 30323, 30324, 30373, 30425, 30478, 30479, 30552, 30578, 30583, 30584, 30586, 30587, 30616, 30639, 30654, 30659, 30661, 30667, 30685, 30694, 30708, 30750, 30781, 30786, 30788, 30795, 30801, 21782, 22775, 38964, 33883, 28948, 33398, 35158, 40236, 40206, 36527, 24674, 26214, 34510, 25785, 37772, 22107, 28485, 35532, 29001, 24012, 34633, 39464, 31658, 36107, 39255, 23597, 32331, 38938, 20518, 25458, 40568, 30783, 40633, 40634, 36046, 35715, 61305, 33931, 37284, 31331, 25776, 24061, 24214, 32865, 26965, 31466, 28710, 26812, 31095, 28060, 36841, 31074, 22178, 34687, 21093, 31108, 28300, 37271, 31622, 38956, 26717, 20397, 34222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31725, 34635, 20534, 26893, 27542, 24910, 20855, 30495, 20516, 32622, 30452, 27097, 24803, 25334, 21599, 38788, 22092, 20677, 22040, 34398, 22834, 22875, 22877, 22883, 22892, 22939, 22999, 23019, 23066, 23210, 23248, 23281, 23350, 23497, 23539, 23571, 23580, 23582, 23635, 23705, 23708, 23738, 23739, 23745, 23797, 23802, 23829, 23832, 23870, 23891, 23900, 23917, 23923, 23924, 23948, 23952, 23993, 24016, 24019, 24135, 24164, 24271, 24272, 24298, 24304, 24329, 24332, 24337, 24353, 24372, 24385, 24389, 24401, 24412, 24422, 24451, 24560, 24650, 24672, 24715, 24742, 24798, 24849, 24864, 24865, 24892, 24893, 24984, 25015, 25076, 25107, 25117, 25118, 25143, 24186, 27664, 21454, 20267, 20302, 21556, 22257, 22766, 22841, 22918, 23596, 20915, 20914, 28798, 35265, 35282, 36125, 36710, 20122, 26469, 20177, 20004, 21327, 23626, 20872, 24213, 25269, 19996, 20105, 29366, 31868, 32416, 21351, 36711, 37048, 38271, 38376, 20384, 20387, 20822, 21017, 21170, 21364, 22850, 24069, 26594, 27769, 20026, 32419, 32418, 32426, 32427, 32421, 32422, 32417, 32989, 33486, 35745, 35746, 35747, 36126, 36127, 20891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36712, 38377, 38886, 39029, 39118, 39134, 20457, 20204, 20261, 20010, 20262, 20179, 20923, 21018, 21093, 21592, 23089, 23385, 23777, 23707, 23704, 24072, 24211, 24452, 25375, 26102, 26187, 20070, 27902, 27971, 20044, 29421, 29384, 20137, 30757, 31210, 32442, 32433, 32441, 32431, 32445, 32432, 32423, 32429, 32435, 32440, 32439, 32961, 33033, 21005, 35760, 35750, 35752, 35751, 35754, 35759, 35757, 35755, 23682, 36130, 36129, 36713, 36715, 38025, 38024, 38026, 38027, 38378, 38453, 38485, 38473, 39269, 39532, 39592, 20266, 20255, 20390, 20391, 21153, 21160, 21306, 21442, 21713, 38382, 34900, 22269, 22362, 22441, 25191, 22815, 23044, 22919, 19987, 23558, 23625, 23781, 23703, 24102, 24080, 24352, 24378, 20174, 24469, 20932, 24581, 25195, 25346, 25194, 25249, 25379, 36133, 21551, 26011, 26025, 26172, 21206, 24323, 26465, 26541, 26432, 27682, 20937, 27973, 28170, 27882, 27814, 20928, 29301, 29424, 29616, 20135, 27605, 24322, 20247, 32458, 32479, 32461, 32459, 32460, 32454, 32453, 32452, 32456, 32449, 32450, 38069, 20064, 33626, 33550, 33682, 24196, 33483, 22788, 26415, 34926, 35269, 35268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35775, 35766, 35776, 35767, 35768, 35774, 35772, 35769, 36137, 36131, 36143, 36135, 36138, 36139, 36717, 36719, 36825, 36830, 36851, 38039, 38035, 38031, 38034, 38381, 38472, 38470, 38452, 39030, 39031, 40060, 40479, 21348, 40614, 22791, 20263, 20254, 20975, 21056, 21019, 21171, 21195, 20007, 21333, 21727, 21796, 20052, 22260, 23591, 22330, 25253, 22490, 22774, 23090, 23547, 23706, 24103, 24079, 21397, 21417, 24694, 38391, 24812, 24699, 24700, 25315, 25381, 25442, 25196, 26531, 26635, 26632, 38054, 27531, 22771, 27695, 27689, 28044, 20945, 28270, 28065, 27748, 27979, 27985, 28067, 26080, 29369, 33487, 30011, 30153, 21457, 30423, 30746, 31174, 31383, 31508, 31499, 32478, 32467, 32466, 32477, 19997, 32476, 32473, 32474, 32470, 32475, 32899, 32958, 32960, 21326, 33713, 33484, 34394, 35270, 35780, 35789, 35777, 35778, 35791, 35781, 35784, 35787, 35785, 35786, 35779, 36142, 36148, 36144, 36155, 36146, 36153, 36154, 36149, 20080, 36140, 36152, 36151, 36722, 36724, 36726, 36827, 37038, 20065, 38046, 38062, 38041, 38048, 38055, 38045, 38052, 38051, 38389, 38384, 24320, 38386, 38388, 38387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38431, 38454, 38451, 38887, 39033, 39034, 39035, 39274, 39277, 39272, 39278, 39276, 20911, 39533, 20081, 20538, 20256, 20165, 20542, 20260, 20588, 38130, 21183, 31215, 27719, 21527, 21596, 21595, 22253, 22278, 28034, 22359, 22366, 22488, 33556, 22885, 22920, 29233, 24574, 24582, 24698, 25439, 25250, 25443, 26500, 26198, 26197, 26104, 20250, 19994, 26497, 26472, 26722, 26539, 23681, 27807, 28781, 28287, 28369, 27815, 28902, 28860, 28800, 28949, 29239, 29422, 29502, 29682, 24403, 30415, 30544, 30529, 38606, 30860, 33410, 31509, 31908, 32463, 32482, 32465, 32485, 32486, 20041, 32673, 22307, 32928, 33050, 32959, 33041, 33636, 33479, 21494, 33716, 34398, 34383, 21495, 34568, 34476, 34917, 35013, 35815, 35813, 35814, 35797, 35799, 35800, 35801, 35811, 35802, 35805, 35803, 35809, 35810, 35808, 35807, 36156, 36164, 36158, 36159, 36160, 36161, 36162, 36165, 36739, 36733, 36732, 36734, 20892, 36816, 36798, 36829, 36807, 37049, 38068, 38067, 38073, 38072, 38078, 38080, 38085, 38057, 38082, 38083, 38089, 38091, 38044, 38093, 38079, 38086, 38392, 38504, 38589, 30005, 39044, 39037, 39039, 39036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39041, 39042, 39282, 39284, 39281, 39280, 39536, 39534, 39535, 40480, 20389, 20392, 21294, 21388, 23581, 21589, 21497, 21949, 21863, 21716, 22242, 22270, 23576, 22443, 22545, 23551, 26790, 22842, 22849, 22954, 23454, 23517, 23545, 23649, 23853, 23702, 24065, 24124, 24443, 24577, 24815, 24696, 24813, 24808, 25602, 25524, 25530, 30021, 33635, 26538, 28378, 28173, 27721, 28385, 28382, 28176, 28072, 28063, 27818, 28180, 28183, 28068, 33639, 23572, 33638, 29425, 29712, 29595, 30111, 30113, 30127, 30186, 23613, 30417, 30805, 31087, 31096, 31181, 31216, 27964, 31389, 31546, 31581, 32509, 32510, 32508, 32496, 32491, 32511, 32039, 32512, 32434, 32494, 32504, 32501, 32438, 32500, 32490, 32513, 32502, 32602, 38395, 33669, 30422, 33642, 33485, 34432, 35829, 35821, 35820, 35748, 35819, 35823, 35828, 35824, 35826, 35825, 35827, 35822, 23486, 36168, 36170, 36213, 36214, 36741, 36740, 36731, 36828, 36874, 36882, 38128, 38134, 38108, 38125, 38114, 38124, 38120, 38133, 38115, 38402, 38394, 38397, 38401, 38400, 38469, 39047, 39046, 39122, 39290, 39292, 39285, 39287, 39539, 32942, 39600, 40483, 40482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20964, 40784, 20159, 20202, 20215, 20396, 20393, 20461, 21095, 21016, 21073, 21053, 21385, 21792, 22068, 21719, 22040, 21943, 21880, 21501, 22687, 22367, 22368, 22549, 23092, 23157, 22953, 23047, 23046, 23485, 23457, 20889, 23618, 23956, 24092, 24223, 21416, 24217, 21422, 24191, 24377, 24198, 34385, 24551, 24578, 24751, 24814, 24868, 24579, 25370, 25169, 25438, 25320, 25376, 25242, 25528, 25599, 25932, 25968, 26242, 26165, 26679, 26729, 26530, 26631, 27004, 26728, 20048, 26526, 27431, 27527, 27572, 27974, 27900, 27905, 27975, 28291, 28070, 28071, 27988, 28909, 22870, 33721, 30126, 30353, 30385, 30424, 30830, 30721, 31377, 31351, 32532, 32451, 32428, 32516, 32517, 32521, 32534, 32536, 32447, 32526, 32531, 32525, 32514, 32520, 32519, 39554, 32610, 33014, 32932, 33714, 33643, 33931, 34430, 34583, 21355, 35850, 35845, 35848, 35846, 35806, 35831, 35832, 35838, 35839, 35844, 35843, 35841, 35770, 35812, 35847, 35837, 35840, 31446, 36180, 36175, 36171, 36145, 36134, 36172, 36132, 21334, 36176, 36136, 36179, 36341, 36745, 36742, 36749, 36744, 36743, 36718, 36750, 36747, 36746, 36866, 36801, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37051, 37073, 37011, 38156, 38161, 38144, 38138, 38096, 38148, 38109, 38160, 38153, 38155, 38049, 38146, 38398, 38405, 24041, 39049, 39052, 20859, 39295, 39297, 39548, 39547, 39543, 39542, 39549, 39550, 39545, 39544, 39607, 38393, 40063, 40065, 40489, 40486, 40632, 40831, 20454, 20647, 20394, 24130, 21058, 21544, 21725, 22003, 22438, 22363, 22859, 34949, 23398, 23548, 23466, 20973, 24811, 25044, 24518, 25112, 25317, 25377, 25374, 25454, 25523, 25321, 25441, 25285, 25373, 21382, 26195, 26196, 26137, 26726, 27178, 26641, 26925, 26725, 26426, 26721, 28096, 27987, 27901, 27978, 27811, 28582, 28177, 28861, 28903, 28783, 28907, 28950, 29420, 29585, 29935, 30232, 21346, 30610, 30742, 30875, 31215, 39062, 31267, 31397, 31491, 31579, 32546, 32547, 33830, 32538, 21439, 32543, 32540, 32537, 32457, 33147, 20852, 33329, 33633, 33831, 33436, 34434, 33828, 35044, 20146, 35278, 35867, 35866, 35855, 35763, 35851, 35853, 35856, 35864, 35834, 35858, 35859, 35773, 35861, 35865, 35852, 35862, 36182, 36752, 36753, 36755, 36751, 21150, 36873, 36831, 36797, 36951, 37050, 38189, 38191, 38192, 38169, 38065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38050, 38177, 24405, 38126, 38181, 38182, 38175, 38178, 38193, 38414, 38543, 38505, 38745, 33148, 39050, 39048, 39057, 39060, 22836, 39059, 39056, 39302, 39279, 39300, 39301, 39559, 39560, 39558, 39608, 39612, 40077, 40501, 40490, 40495, 40493, 40499, 40857, 40863, 20248, 20607, 20648, 21169, 21659, 21523, 21387, 22489, 23156, 23252, 23351, 23604, 23654, 23679, 23896, 24110, 24357, 24212, 24691, 25103, 20987, 25380, 25319, 25311, 25601, 25947, 27609, 26279, 26723, 26816, 26727, 26633, 27183, 27539, 27617, 27870, 28392, 27982, 28059, 28389, 28073, 28493, 33829, 28799, 28891, 28905, 22681, 29406, 33719, 29615, 29815, 30184, 30103, 30699, 30970, 30710, 31699, 31914, 38214, 31937, 32553, 32489, 32554, 32533, 32551, 32503, 32541, 24635, 32437, 32555, 32420, 32549, 32358, 32550, 22768, 32874, 32852, 32824, 33043, 32966, 33080, 33037, 20020, 20030, 33392, 34103, 34015, 20111, 34684, 34632, 20149, 35099, 35274, 35868, 35876, 35878, 35762, 35854, 35875, 35874, 35466, 35879, 36186, 36187, 36141, 36185, 36235, 36758, 36759, 27586, 36757, 33286, 36824, 36808, 37213, 38208, 38209, 38170, 38190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38194, 38149, 38180, 38202, 38201, 38203, 38206, 38199, 38420, 38421, 38417, 38385, 38544, 38582, 34429, 38889, 39063, 39123, 39563, 39567, 40092, 40091, 40084, 40081, 40511, 40509, 28857, 25995, 19995, 22108, 22329, 22418, 23158, 25041, 25193, 25527, 25200, 25781, 25670, 25822, 25783, 26029, 27103, 26588, 27099, 26592, 27428, 24402, 27553, 27899, 28182, 28388, 28174, 28293, 27983, 28908, 28952, 29367, 29454, 29934, 30112, 30545, 30784, 31036, 31313, 31229, 31388, 31373, 31659, 31783, 31658, 31697, 31616, 31918, 32455, 32558, 32469, 32557, 32483, 32559, 32728, 32844, 32834, 33040, 33169, 26087, 33832, 34013, 33632, 34546, 34633, 35280, 35294, 35871, 35880, 35884, 35882, 36184, 36434, 36857, 36344, 36527, 36716, 36761, 36841, 21307, 37233, 38225, 38145, 38056, 38221, 38215, 38224, 38226, 38217, 38422, 38383, 38423, 38425, 26434, 21452, 38607, 40481, 39069, 39068, 39064, 39066, 39067, 39311, 39306, 39304, 39569, 39617, 40104, 40100, 40107, 40103, 40515, 40517, 40516, 22404, 22364, 23456, 24222, 24208, 24809, 24576, 25042, 25314, 26103, 27249, 26911, 27016, 27257, 28487, 28625, 27813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28626, 27896, 28865, 29261, 29322, 20861, 29549, 29626, 29756, 30068, 30250, 30861, 31095, 31283, 31614, 33575, 32462, 32499, 32472, 32599, 32564, 33211, 33402, 34222, 33647, 34433, 34631, 35014, 34948, 35889, 35782, 35885, 35890, 35749, 35887, 36192, 36190, 36343, 36762, 36735, 36766, 36793, 38236, 38237, 38238, 38142, 38231, 38232, 38230, 38233, 38197, 38210, 38143, 37694, 20851, 38471, 38590, 38654, 38892, 38901, 31867, 39072, 39125, 39314, 39313, 39579, 39575, 40120, 40115, 40109, 40119, 40529, 40521, 40522, 40524, 40527, 20029, 40628, 21149, 21657, 22052, 20005, 23453, 24748, 24527, 25318, 25600, 32999, 27015, 28572, 28491, 28809, 29649, 30719, 30778, 30718, 30782, 31398, 31454, 31609, 31726, 36779, 32548, 32487, 32578, 33002, 33328, 34108, 34106, 33446, 33529, 34164, 34461, 35124, 35273, 35302, 35758, 35793, 35893, 36194, 36193, 36280, 37322, 38047, 38105, 38152, 38416, 39128, 39286, 39269, 39582, 33150, 39578, 40131, 40133, 20826, 40835, 40836, 20458, 21995, 21869, 22179, 23646, 24807, 24913, 25668, 25658, 26003, 27185, 26639, 26818, 27516, 28866, 29306, 38262, 29838, 30302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32544, 32493, 20848, 34259, 34510, 35272, 35892, 25252, 35465, 36163, 36364, 36291, 36347, 36720, 36777, 38256, 38253, 38081, 38107, 38094, 38255, 38220, 21709, 39038, 39074, 39144, 39537, 39584, 34022, 39585, 39621, 40141, 40143, 33722, 40548, 40542, 40839, 40840, 21870, 20456, 20645, 21587, 23402, 24005, 23782, 24367, 25674, 26435, 27426, 28393, 29473, 21472, 30270, 30307, 31548, 31809, 32843, 33039, 34989, 34924, 35835, 36174, 36189, 36399, 36396, 36756, 37094, 38136, 37492, 38657, 38801, 32366, 39076, 39556, 39553, 40150, 40098, 40148, 40151, 40551, 40485, 40761, 40841, 40842, 40858, 24651, 25371, 25605, 29906, 31363, 32552, 33250, 33821, 34506, 21464, 36902, 36923, 38259, 38084, 38757, 26174, 39181, 24778, 39551, 39564, 39635, 39633, 40157, 40158, 40156, 40502, 22065, 22365, 25597, 30251, 30315, 32641, 34453, 35753, 35863, 35894, 33395, 36195, 37247, 38643, 28789, 38701, 39078, 39588, 39699, 39751, 40078, 40560, 40557, 30839, 30416, 40140, 40844, 40843, 21381, 27012, 28286, 31729, 31657, 34542, 35266, 36433, 34885, 38053, 39045, 39307, 39627, 40649, 28390, 30633, 38218, 38831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39540, 39589, 32518, 35872, 36495, 37245, 38075, 37550, 38179, 40132, 40072, 40681, 20991, 40550, 39562, 40563, 40510, 38074, 20162, 34381, 27538, 22439, 22395, 25099, 20451, 21037, 21389, 21593, 21370, 32424, 33543, 38023, 38022, 21591, 24362, 31059, 32446, 37071, 38028, 21072, 21286, 22261, 22445, 23045, 23741, 23811, 28062, 28172, 28867, 30502, 32448, 32464, 33003, 38030, 38032, 38037, 38029, 38379, 22955, 23899, 24701, 26720, 26536, 27817, 27976, 30066, 30743, 32471, 33757, 35271, 35765, 35790, 35794, 36150, 36147, 36730, 36725, 36728, 36911, 37075, 37124, 38059, 38060, 38043, 38063, 38061, 38058, 38390, 38503, 39032, 39275, 40697, 20251, 20603, 20325, 21794, 22450, 24047, 24493, 28828, 33557, 29426, 29614, 32488, 32480, 32481, 32671, 33645, 34545, 35795, 35798, 35817, 35796, 35804, 36241, 36738, 36737, 37036, 38090, 38088, 38064, 38066, 38070, 38157, 38092, 38077, 38076, 39043, 39040, 20971, 40702, 20606, 21787, 23901, 24123, 24747, 24749, 24580, 25132, 25111, 25247, 25248, 25532, 26724, 26473, 33637, 27986, 27812, 28829, 30386, 30720, 32507, 32498, 32495, 32506, 33715, 35275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35830, 36167, 38129, 38098, 38097, 38101, 38111, 38123, 38127, 38122, 38135, 38102, 38117, 39121, 21055, 21154, 21715, 21586, 23810, 23780, 24209, 24870, 25378, 26912, 27637, 39053, 28061, 28514, 28064, 28375, 29711, 29825, 30231, 32515, 32535, 32524, 32527, 32529, 33628, 33932, 33553, 33473, 35833, 35836, 35842, 36181, 37112, 38162, 38103, 38141, 38163, 38154, 38116, 38150, 38151, 38164, 38406, 38403, 38739, 39055, 39293, 39541, 39552, 40066, 40488, 21714, 21717, 21721, 23250, 23748, 24639, 27546, 27981, 28904, 29443, 29423, 30876, 31405, 32279, 32539, 33927, 33640, 33929, 33630, 33720, 33431, 34547, 35816, 35857, 35860, 35869, 37072, 38185, 38188, 38166, 38167, 38140, 38171, 38165, 38174, 38036, 38415, 38408, 38409, 38410, 38412, 38413, 40498, 40497, 21724, 24113, 24697, 25672, 58305, 27894, 29461, 29971, 30213, 30187, 30807, 31654, 31578, 31976, 32545, 32807, 33631, 33718, 34544, 35042, 35279, 35873, 35788, 35877, 36292, 38200, 38196, 38113, 38198, 38418, 39271, 40082, 40085, 40504, 40505, 40506, 40832, 24636, 25669, 25784, 27898, 30102, 32523, 32873, 33641, 34789, 34414, 35764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 36188, 36157, 36760, 37021, 38227, 38112, 38204, 38223, 34021, 38890, 39273, 39568, 39570, 39571, 38411, 40105, 40096, 40520, 40513, 40518, 21411, 21590, 22406, 27104, 26638, 27655, 27895, 28486, 31074, 32562, 32563, 32628, 33315, 34511, 34431, 35043, 35281, 35311, 35886, 38235, 38239, 38250, 38214, 38121, 38891, 39073, 39312, 39618, 40117, 40118, 40123, 40113, 40526, 40491, 40700, 21950, 25732, 26634, 26533, 26636, 32561, 32845, 33551, 33480, 34162, 34548, 34686, 38132, 38246, 38248, 38241, 38243, 38212, 38251, 38119, 38244, 38137, 38426, 39071, 39316, 39546, 39581, 39583, 39576, 40535, 40538, 40540, 40838, 40837, 20649, 23743, 30152, 25786, 27017, 28384, 30779, 31901, 32425, 32556, 34105, 36166, 38257, 38396, 39129, 39586, 39574, 39580, 40101, 40142, 40144, 40547, 40536, 40574, 20865, 23048, 28757, 25874, 30271, 31656, 31860, 33339, 35276, 36345, 36318, 36729, 38228, 38252, 39587, 39557, 40149, 40099, 40102, 40552, 40503, 40859, 26686, 26916, 34016, 38624, 36723, 40159, 40095, 40553, 40556, 40554, 40555, 40519, 28751, 31766, 35888, 39628, 31550, 31900, 32565, 33044, 36479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38247, 40090, 36273, 36508, 37246, 35891, 39070, 39079, 39591, 40492, 25094, 38404, 40097, 40514, 31160, 25300, 36299, 29648, 23467, 25296, 27585, 20943, 31108, 21525, 28508, 34972, 37095, 20857, 25144, 25243, 25383, 25531, 25566, 25594, 25745, 25792, 25825, 25846, 25861, 25909, 25934, 25963, 25992, 26073, 26142, 26171, 26175, 26180, 26199, 26217, 26227, 26243, 26300, 26303, 26305, 26357, 26362, 26363, 26382, 26390, 26423, 26468, 26470, 26534, 26535, 26537, 26619, 26621, 26624, 26625, 26629, 26654, 26698, 26706, 26709, 26713, 26765, 26809, 26831, 20616, 38184, 40087, 26914, 26918, 220, 58591, 58592, 252, 58594, 58595, 220, 252, 26934, 26977, 33477, 33482, 33496, 33560, 33562, 33571, 33606, 33627, 33634, 33644, 33646, 33692, 33695, 33717, 33724, 33783, 33834, 33864, 33884, 33890, 33924, 33928, 34012, 34019, 34104, 34138, 34199, 34219, 34241, 34323, 34326, 8715, 34581, 34672, 34685, 34699, 34728, 34759, 34768, 34823, 34830, 34855, 34990, 8712, 34997, 35007, 35045, 35061, 35100, 35101, 35191, 35303, 35383, 35500, 35546, 35675, 35697, 35883, 35898, 35964, 35982, 36014, 36114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36169, 36173, 36209, 36360, 36410, 36464, 36505, 36528, 36529, 36549, 36550, 36558, 36579, 36620, 36721, 36727, 36775, 36847, 36878, 36921, 36965, 37001, 37086, 37141, 37334, 37339, 37342, 37345, 37349, 37366, 37372, 37417, 37420, 65287, 37465, 37495, 37613, 37690, 58701, 58702, 29227, 20866, 20886, 20023, 20843, 20799, 58709, 58710, 26409, 27706, 21378, 30098, 32896, 34916, 19974, 58718, 58719, 58720, 11927, 21241, 21269, 8225, 58725, 13316, 58727, 58728, 58729, 58730, 58731, 20981, 58733, 23662, 58735, 22231, 20128, 20907, 11904, 27079, 58741, 9550, 9688, 9689, 9794, 9654, 9668, 8597, 8252, 182, 8704, 8616, 8596, 8962, 58755, 58756, 20124, 24746, 22311, 22258, 21307, 22769, 36920, 38560, 26628, 21942, 39365, 35585, 20870, 32257, 24540, 27431, 27572, 26716, 22885, 31311, 20206, 20385, 30011, 28784, 20250, 24724, 28023, 32117, 22730, 25040, 25313, 27579, 35226, 23398, 27005, 21917, 28167, 58794, 24059, 38501, 21223, 23515, 28450, 38306, 27475, 35251, 27671, 24112, 25135, 29344, 34384, 26087, 24613, 25312, 25369, 34394, 23777, 25375, 29421, 37111, 38911, 26241, 21220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35641, 21306, 39366, 21234, 58824, 24452, 33550, 24693, 25522, 28179, 32076, 34509, 36605, 32153, 40335, 25731, 30476, 20537, 21091, 38522, 22287, 26908, 27177, 38997, 39443, 21427, 21577, 23087, 35492, 24195, 28207, 37489, 21495, 22269, 40658, 31296, 30741, 28168, 25998, 27507, 21092, 38609, 21442, 26719, 24808, 36059, 27531, 27503, 20816, 36766, 28287, 23455, 20889, 33294, 25448, 37320, 23551, 21454, 34886, 24467, 28171, 29539, 32294, 31899, 20966, 23558, 31216, 28169, 28988, 22888, 26465, 29366, 20055, 27972, 21104, 30067, 32260, 22732, 23330, 35698, 37304, 35302, 22065, 23517, 23613, 22259, 31883, 37204, 31298, 38543, 39620, 26530, 25968, 25454, 28716, 22768, 25993, 38745, 31363, 25666, 32118, 23554, 27973, 25126, 36341, 37549, 28508, 36983, 36984, 32330, 31109, 30094, 22766, 20105, 33624, 25436, 25407, 24035, 31379, 35013, 20711, 23652, 32207, 39442, 22679, 24974, 34101, 36104, 33235, 23646, 32154, 22549, 23550, 24111, 28382, 28381, 25246, 27810, 28655, 21336, 22022, 22243, 26029, 24382, 36933, 26172, 37619, 24193, 24500, 32884, 25074, 22618, 36883, 37444, 28857, 36578, 20253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38651, 28783, 24403, 20826, 30423, 31282, 38360, 24499, 27602, 29420, 35501, 23626, 38627, 24336, 24745, 33075, 25309, 24259, 22770, 26757, 21338, 34180, 40614, 32283, 30330, 39658, 25244, 27996, 27996, 25935, 25975, 20398, 25173, 20175, 36794, 22793, 27497, 33303, 31807, 21253, 23453, 25265, 27873, 32990, 30770, 35914, 39165, 22696, 27598, 28288, 33032, 40665, 35379, 34220, 36493, 19982, 35465, 25671, 27096, 35617, 26332, 26469, 38972, 20081, 35239, 31452, 38534, 26053, 20001, 29471, 32209, 28057, 22593, 31036, 21169, 25147, 38666, 40802, 26278, 27508, 24651, 32244, 37676, 28809, 21172, 27004, 37682, 28286, 24357, 20096, 26365, 22985, 23437, 23947, 27179, 26907, 21936, 31874, 36796, 27018, 21682, 40235, 38635, 26905, 25539, 39364, 20967, 26626, 36795, 20685, 23776, 26627, 20970, 21250, 30834, 30033, 30048, 22138, 37618, 22592, 26622, 20451, 26466, 31870, 21249, 20452, 20453, 20969, 21498, 21720, 22222, 22310, 22327, 22328, 22408, 22451, 22442, 22448, 22486, 22640, 22713, 22743, 23670, 23740, 23749, 23742, 23926, 24342, 24634, 25525, 26433, 26467, 26529, 26810, 26917, 26920, 27258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26915, 26913, 27006, 27009, 27101, 27182, 27250, 27423, 27615, 28181, 29077, 29927, 29938, 29936, 29937, 29944, 29957, 30057, 30314, 30836, 31437, 31439, 31445, 31443, 31457, 31472, 31490, 31763, 31767, 31888, 31917, 31936, 31960, 32155, 32261, 32359, 32387, 32400, 33188, 33373, 33826, 34009, 34352, 34475, 34543, 34992, 35011, 35012, 35076, 59183, 36542, 36552, 36684, 36791, 36826, 36903, 36950, 37685, 37691, 37817, 38282, 38294, 38777, 38790, 38800, 39082, 39830, 39831, 39860, 39887, 39889, 39890, 39922, 39921, 39984, 40007, 40026, 40176, 40262, 40292, 40363, 20036, 21583, 25368, 39857, 40041, 40263, 40293, 39983, 40639, 20916, 21610, 26528, 39822, 37032, 20914, 13869, 25285, 21189, 26545, 21709, 24658, 21441, 28913, 22531, 21855, 37390, 30528, 29756, 29002, 28377, 21472, 29486, 35023, 30861, 32675, 32171, 36394, 37979, 25452, 24487, 23557, 32827, 23791, 14776, 29009, 36045, 38894, 22642, 23139, 32632, 23895, 24943, 27032, 32137, 31918, 32179, 28545, 23290, 22715, 29269, 30286, 36653, 37561, 40286, 40623, 32583, 40388, 36120, 20915, 34412, 21668, 21414, 21030, 26422, 20001, 21364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24313, 21177, 21647, 24312, 22956, 24625, 29248, 33047, 30267, 24333, 26187, 26280, 24932, 25423, 28895, 27940, 31911, 31945, 21465, 25933, 22338, 29647, 32966, 13649, 27445, 30849, 21452, 29483, 29482, 29641, 30026, 23033, 29124, 29966, 32220, 39393, 35241, 28662, 14935, 25834, 15341, 27809, 28284, 30055, 22633, 22633, 20996, 59338, 24967, 25658, 33263, 59342, 20917, 20945, 27769, 22815, 36857, 39153, 25911, 33033, 34996, 14890, 36525, 32663, 39440, 32037, 27336, 20876, 21031, 59360, 33050, 21408, 21410, 27738, 27703, 33304, 21894, 24315, 20937, 30897, 37474, 21357, 20931, 59374, 33905, 35207, 38765, 35728, 38563, 24316, 38583, 20814, 39952, 26160, 37461, 30728, 37701, 37491, 37737, 59390, 59391, 59392, 59393, 37343, 37338, 30804, 30822, 30856, 30902, 30919, 30930, 30935, 8491, 8651, 30948, 30958, 30960, 30961, 30965, 31026, 31027, 31030, 31064, 12307, 31065, 31089, 31102, 31107, 31110, 31111, 31121, 31129, 31135, 31141, 31202, 31217, 31220, 31274, 31290, 31301, 31333, 31420, 31426, 31433, 31451, 31465, 31486, 31500, 31527, 31529, 31554, 31555, 31573, 31599, 31666, 27102, 27129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37238, 33114, 33527, 21579, 33074, 32957, 33816, 37214, 37232, 37260, 33096, 59459, 17462, 33113, 32927, 59463, 21833, 21537, 21722, 21554, 21945, 21652, 59470, 30802, 30789, 30796, 59474, 33981, 33820, 33476, 59478, 33915, 35629, 59481, 22347, 59483, 59484, 22341, 34766, 22112, 21994, 22139, 32956, 59491, 30904, 27148, 21708, 31696, 31724, 31738, 31765, 31771, 31797, 31812, 31853, 31886, 31928, 31939, 31974, 31981, 31987, 31989, 31993, 59511, 31996, 32139, 32151, 32164, 32168, 32205, 32208, 32211, 32229, 32253, 27154, 27170, 27184, 27190, 27237, 59527, 59528, 59529, 59530, 59531, 59532, 59533, 59534, 27251, 27256, 59537, 59538, 27260, 27305, 27306, 9450, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 37700, 37805, 37830, 37861, 37914, 37921, 37950, 37953, 37971, 37978, 38042, 38071, 38104, 38110, 38131, 38147, 38158, 38159, 38168, 38173, 38186, 38187, 38207, 38213, 38222, 38242, 38245, 38249, 38258, 38279, 38297, 38304, 38322, 38502, 38557, 38575, 38578, 38707, 38715, 38733, 38735, 38737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38741, 38756, 38763, 38769, 38802, 38834, 38898, 38973, 38996, 39077, 39107, 39130, 39150, 39197, 39200, 39267, 39296, 39303, 39309, 39315, 39317, 39356, 39368, 39410, 39606, 39641, 39646, 39695, 39753, 39794, 39811, 39839, 39867, 39907, 39925, 39936, 39940, 39963, 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 174, 8482, 59697, 59698, 40054, 10102, 10103, 10104, 10105, 10106, 10107, 10108, 10109, 10110, 10111, 40069, 40070, 40071, 40075, 40080, 40094, 40110, 40112, 40114, 40116, 40122, 40124, 40125, 40134, 40135, 40138, 40139, 40147, 40152, 40153, 40162, 40171, 40172, 40234, 40264, 40272, 40314, 40390, 40523, 40533, 40539, 40561, 40618, 40637, 40644, 40674, 40682, 40712, 40715, 40717, 40737, 40772, 40785, 40861, 64014, 64015, 64017, 64019, 64020, 64024, 64031, 64032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64033, 64035, 64036, 64039, 64040, 64041, 19972, 20015, 20097, 20103, 20131, 20151, 20156, 20216, 20264, 20265, 20279, 20290, 20293, 20299, 20338, 20386, 20400, 20413, 20424, 20428, 20464, 20466, 20473, 20483, 20488, 20532, 20539, 20568, 20582, 20609, 20624, 20668, 20688, 20703, 20705, 20732, 20749, 20779, 20832, 20910, 20920, 20946, 20962, 20997, 21044, 21052, 21081, 21096, 21113, 21156, 21196, 21287, 21314, 21341, 21373, 21374, 21445, 21456, 21458, 21502, 21613, 21637, 21651, 21662, 21689, 21731, 21743, 21773, 21784, 21797, 21800, 21803, 21831, 21881, 21904, 21940, 21953, 21975, 21976, 22011, 20404, 22049, 8707, 22098, 59852, 9787, 59854, 59855, 22109, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 22113, 22153, 22155, 22174, 22177, 22193, 22201, 22207, 22230, 22255, 22293, 22301, 22322, 22333, 22335, 22339, 8660, 22398, 22410, 22413, 22416, 22428, 22459, 22462, 22468, 22494, 22526, 22546, 22562, 22599, 22620, 22623, 22643, 22695, 22698, 22704, 22709, 22710, 22731, 22736, 22752, 22789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22801, 22921, 22932, 22938, 22943, 22960, 22968, 22980, 23023, 23024, 23032, 23042, 23051, 23053, 23058, 23073, 23076, 23079, 23082, 23083, 23084, 23101, 23109, 23124, 23129, 23137, 23144, 23147, 23150, 23153, 23161, 23166, 23169, 23170, 23174, 23176, 23185, 23193, 23200, 23201, 23211, 23235, 23246, 23247, 23251, 23268, 23280, 23294, 23309, 23313, 23317, 23327, 23339, 23361, 23364, 23366, 23370, 23375, 23400, 23412, 23414, 23420, 23426, 23440, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 60009, 12850, 12849, 27307, 23446, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 23509, 23511, 23587, 23685, 23710, 23746, 23824, 23852, 23855, 23880, 23894, 23920, 23931, 23941, 23972, 23979, 23990, 24001, 24023, 24073, 24136, 24210, 24253, 24334, 24434, 24497, 24514, 24539, 24543, 24611, 24702, 24791, 24839, 24844, 24857, 24866, 24912, 24928, 24961, 24981, 25017, 25024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25039, 25043, 25050, 25232, 25393, 8835, 25399, 25465, 25483, 25537, 25570, 25574, 25595, 25598, 25607, 25650, 25656, 25659, 25690, 25713, 25724, 25741, 25775, 25780, 25782, 25821, 25829, 25866, 25873, 25887, 25951, 25965, 25990, 26037, 26046, 26065, 26068, 26083, 26111, 26136, 26147, 26211, 26219, 26237, 26245, 26258, 26266, 26276, 26285, 26291, 26294, 26317, 26318, 26370, 26380, 26393, 26436, 26475, 26511, 26532, 26559, 26582, 26583, 8834, 26637, 26640, 26651, 26678, 26695, 26710, 26756, 26760, 26813, 26819, 26821, 26882, 26883, 26889, 26904, 26947, 26950, 26980, 26983, 26994, 27013, 27039, 27042, 27089, 27093, 27094, 39457, 39462, 39471, 27329, 22975, 27105, 27139, 27162, 27164, 27180, 27181, 27187, 27203, 27205, 27212, 27219, 27223, 27235, 27252, 27266, 27274, 27279, 27289, 27303, 27313, 27317, 27326, 27337, 27348, 27352, 27382, 27479, 27514, 27612, 27676, 27697, 27736, 27758, 27765, 27775, 27823, 27851, 27871, 27903, 27906, 27909, 27910, 27942, 27991, 27995, 28017, 28033, 28047, 28069, 28081, 28158, 28162, 28164, 28175, 28184, 28202, 28240, 28249, 28314, 28341, 28344, 28379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28410, 28420, 28427, 28428, 28438, 28439, 28468, 28477, 28502, 28537, 28554, 28573, 28575, 28603, 28606, 28627, 28633, 28664, 28675, 28747, 28749, 28752, 28756, 28764, 28775, 28791, 28793, 28811, 28815, 28832, 28835, 28837, 28838, 28839, 28868, 28876, 28880, 28886, 618, 603, 230, 652, 593, 596, 650, 605, 601, 602, 604, 609, 7747, 7753, 330, 7739, 629, 240, 643, 658, 679, 676, 227, 60294, 60295, 623, 632, 647, 60299, 199, 339, 594, 65351, 715, 719, 65345, 65346, 65348, 65349, 65350, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65362, 65363, 65364, 65365, 65366, 65367, 65370, 28917, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 28926, 28933, 28957, 28969, 28971, 28972, 28979, 28981, 28987, 28990, 28992, 29007, 29035, 29045, 29047, 29052, 29054, 29068, 29070, 29073, 29078, 29090, 29091, 29101, 29108, 29111, 29114, 29137, 29149, 29163, 29184, 29193, 29198, 29199, 29206, 29207, 29220, 23204, 29230, 8838, 29271, 29276, 29332, 29444, 29456, 29505, 29556, 29580, 29583, 29592, 29596, 29598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29607, 29610, 29653, 29665, 29666, 29668, 29670, 29679, 29683, 8839, 29689, 29691, 29698, 29713, 29714, 29716, 29717, 29719, 29721, 29724, 29726, 29727, 29751, 29752, 29753, 29763, 29765, 29767, 29768, 29769, 29779, 29782, 29797, 29803, 29804, 29812, 29818, 29826, 21378, 24191, 20008, 24186, 20886, 23424, 21353, 11911, 60436, 21251, 9746, 33401, 17553, 11916, 11914, 20022, 60444, 21274, 60446, 60447, 11925, 60449, 60450, 9492, 20058, 36790, 24308, 20872, 20101, 60457, 20031, 60459, 60460, 20059, 21430, 36710, 32415, 35744, 36125, 40479, 38376, 38021, 38429, 25164, 27701, 20155, 24516, 28780, 11950, 21475, 27362, 39483, 39484, 39512, 39516, 39523, 9742, 8594, 8592, 8593, 8595, 8680, 8678, 8679, 8681, 8680, 8678, 8679, 8681, 9758, 9756, 9755, 9759, 12310, 12311, 9675, 10005, 10003, 22267, 9789, 22813, 26189, 29221, 10025, 10017, 9786, 9785, 60515, 60516, 60517, 60518, 60519, 23672, 9836, 9834, 23249, 23479, 23804, 60526, 9993, 9986, 60529, 60530, 60531, 60532, 23765, 26478, 29793, 29853, 32595, 34195, 10063, 60540, 60541, 23928, 24379, 60544, 9473, 9475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60547, 60548, 60549, 60550, 60551, 60552, 60553, 60554, 60555, 60556, 60557, 60558, 60559, 60560, 60561, 39602, 39648, 39700, 39732, 39737, 39744, 39760, 39807, 9788, 32149, 9729, 38708, 9730, 60575, 60576, 60577, 9992, 60579, 60580, 60581, 60582, 60583, 60584, 60585, 8507, 8481, 26343, 28247, 60590, 29015, 31178, 8470, 33132, 35577, 38998, 60597, 60598, 9760, 60600, 9828, 9824, 9831, 9827, 9826, 9830, 9825, 9829, 60609, 60610, 27364, 8478, 13250, 13272, 13217, 60616, 13221, 60618, 60619, 60620, 60621, 60622, 9745, 39809, 39819, 39821, 39901, 39913, 39917, 39924, 39967, 39968, 39974, 40019, 40029, 40059, 40204, 40214, 8626, 27397, 36073, 36082, 36099, 36113, 36124, 36218, 36265, 36288, 36353, 36366, 36422, 36456, 36465, 36478, 36480, 36534, 36537, 36540, 36547, 36580, 36589, 36594, 36656, 36673, 36682, 36773, 36787, 36792, 36810, 36815, 36872, 36915, 36919, 36964, 36972, 37289, 37302, 37316, 37370, 37384, 37395, 37409, 37416, 37419, 37429, 37436, 37441, 37464, 37469, 37471, 37483, 37486, 37505, 37508, 37513, 37519, 37553, 37562, 37567, 37588, 37595, 37603, 37605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37611, 37612, 37620, 37622, 37629, 37635, 37639, 37680, 37681, 37696, 37698, 37699, 37727, 37730, 37734, 37736, 37747, 37748, 37752, 37757, 37761, 37764, 37766, 37767, 37776, 37788, 37792, 37816, 37819, 37821, 37823, 37835, 37843, 37851, 37856, 37872, 37873, 37875, 37876, 37889, 37892, 37896, 37911, 37915, 37917, 37924, 37925, 37926, 37933, 37954, 37955, 37965, 37972, 37976, 37989, 37991, 37996, 38009, 38011, 38264, 38277, 38310, 38314, 38486, 38523, 38565, 38644, 38683, 38710, 38720, 38721, 38743, 38791, 38793, 38811, 38833, 38845, 38848, 38850, 38866, 38880, 38932, 38933, 38947, 38963, 39016, 39095, 39097, 39111, 39114, 39136, 39137, 39148, 39157, 40225, 40244, 40249, 40265, 40270, 40301, 8759, 40302, 40316, 40323, 40339, 40357, 8748, 40381, 27521, 27569, 40015, 40592, 40384, 60817, 60818, 9775, 9776, 9783, 9779, 9780, 9781, 9778, 9782, 9777, 40393, 40404, 40444, 40458, 40460, 40462, 40472, 40571, 40581, 40610, 40620, 40625, 40641, 40646, 40647, 40689, 40696, 40743, 39182, 39193, 39196, 39223, 39261, 39266, 39323, 39332, 39338, 39352, 39392, 39398, 39413, 39455, 32254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32263, 32347, 32357, 32364, 32567, 32576, 32577, 32585, 32594, 32655, 32659, 32692, 32733, 32743, 32762, 32770, 32776, 32814, 32815, 32828, 32935, 33036, 33066, 33076, 33090, 33110, 33156, 33189, 33252, 33364, 33381, 33403, 33415, 33471, 33506, 33518, 33528, 33532, 33535, 33547, 33565, 33597, 33623, 33681, 33708, 33741, 33773, 33797, 33812, 33814, 33825, 33838, 33854, 33866, 33875, 33877, 33880, 33892, 33906, 33919, 33920, 33938, 33939, 33942, 33955, 33982, 34014, 34017, 34018, 34020, 34040, 34051, 34053, 34064, 34099, 8208, 34114, 34124, 34130, 34143, 34159, 34160, 34163, 34262, 34272, 34286, 34300, 34317, 34319, 34324, 34344, 34370, 34373, 34418, 34972, 23405, 33079, 60958, 39224, 21874, 21867, 60962, 13774, 21873, 21946, 22001, 13778, 22000, 22021, 22050, 22061, 22083, 22046, 22162, 31949, 21530, 21523, 21655, 26353, 30004, 21581, 22180, 22175, 25811, 25390, 25592, 25886, 20088, 27626, 27698, 27709, 27746, 27826, 28152, 28201, 28278, 28290, 28294, 28347, 28383, 28386, 28433, 28452, 28532, 28561, 28597, 28659, 28661, 28859, 28864, 28943, 8706, 29013, 29043, 29050, 61016, 21027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61018, 13393, 61020, 36812, 61022, 61023, 192, 200, 204, 210, 217, 193, 205, 211, 218, 257, 275, 299, 333, 363, 470, 196, 203, 207, 214, 220, 198, 199, 209, 195, 213, 225, 233, 237, 243, 250, 472, 228, 235, 239, 246, 252, 230, 231, 241, 227, 245, 462, 283, 464, 466, 468, 474, 197, 201, 29064, 216, 208, 7922, 222, 223, 170, 161, 224, 232, 236, 242, 249, 476, 229, 29080, 29143, 248, 240, 7923, 254, 255, 186, 191, 226, 234, 238, 244, 251, 29173, 194, 202, 206, 212, 219, 184, 164, 61110, 402, 12288, 65292, 12289, 12290, 65294, 8231, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65105, 65106, 183, 65108, 65109, 65110, 65111, 65372, 8211, 65073, 8212, 65075, 9588, 65076, 65103, 65288, 65289, 65077, 65078, 65371, 65373, 65079, 65080, 12308, 12309, 65081, 65082, 12304, 12305, 65083, 65084, 12298, 12299, 65085, 65086, 12296, 12297, 65087, 65088, 12300, 12301, 65089, 65090, 12302, 12303, 65091, 65092, 65113, 65114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65115, 65116, 65117, 65118, 8216, 8217, 8220, 8221, 12317, 12318, 8245, 8242, 65283, 65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733, 9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 175, 65507, 65343, 717, 65097, 65098, 65101, 65102, 65099, 65100, 65119, 65120, 65121, 65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, 8806, 8807, 8800, 8734, 8786, 8801, 65122, 65123, 65124, 65125, 65126, 65374, 8745, 8746, 8869, 8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 8853, 8857, 8593, 8595, 8592, 8594, 8598, 8599, 8601, 8600, 8741, 8739, 65295, 65340, 8725, 65128, 65284, 65509, 12306, 65504, 65505, 65285, 65312, 8451, 8457, 65129, 65130, 65131, 13269, 13212, 13213, 13214, 13262, 13217, 13198, 13199, 13252, 176, 20825, 20827, 20830, 20829, 20833, 20835, 21991, 29929, 31950, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9615, 9614, 9613, 9612, 9611, 9610, 9609, 9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492, 9496, 9581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9582, 9584, 9583, 9552, 9566, 9578, 9569, 9698, 9699, 9701, 9700, 9585, 9586, 9587, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 21313, 21316, 21317, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 729, 713, 714, 711, 715, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9249, 8364, 63561, 63562, 63563, 63564, 63565, 63566, 63567, 63568, 63569, 63570, 63571, 63572, 63573, 63574, 63575, 63576, 63577, 63578, 63579, 63580, 63581, 63582, 63583, 63584, 63585, 63586, 63587, 63588, 63589, 19968, 20057, 19969, 19971, 20035, 20061, 20102, 20108, 20154, 20799, 20837, 20843, 20960, 20992, 20993, 21147, 21269, 21313, 21340, 21448, 19977, 19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062, 20110, 20129, 20800, 20995, 21242, 21315, 21449, 21475, 22303, 22763, 22805, 22823, 22899, 23376, 23377, 23379, 23544, 23567, 23586, 23608, 23665, 24029, 24037, 24049, 24050, 24051, 24062, 24178, 24318, 24331, 24339, 25165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113, 20117, 20114, 20116, 20130, 20161, 20160, 20163, 20166, 20167, 20173, 20170, 20171, 20164, 20803, 20801, 20839, 20845, 20846, 20844, 20887, 20982, 20998, 20999, 21000, 21243, 21246, 21247, 21270, 21305, 21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825, 22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187, 24319, 24340, 24341, 24515, 25096, 25142, 25163, 25166, 25903, 25991, 26007, 26020, 26041, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27595, 27604, 27611, 27663, 27700, 28779, 29226, 29238, 29243, 29255, 29273, 29275, 29356, 29579, 19993, 19990, 19989, 19988, 19992, 20027, 20045, 20047, 20046, 20197, 20184, 20180, 20181, 20182, 20183, 20195, 20196, 20185, 20190, 20805, 20804, 20873, 20874, 20908, 20985, 20986, 20984, 21002, 21152, 21151, 21253, 21254, 21271, 21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487, 21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483, 21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234, 22806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039, 24038, 24066, 24067, 24179, 24188, 24321, 24344, 24343, 24517, 25098, 25171, 25172, 25170, 25169, 26021, 26086, 26414, 26412, 26410, 26411, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712, 27710, 29359, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 29993, 30000, 30001, 30002, 30003, 30091, 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31166, 31348, 31435, 19998, 19999, 20050, 20051, 20073, 20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237, 20240, 20241, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225, 20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015, 21009, 21010, 21006, 21014, 21155, 21256, 21281, 21280, 21360, 21361, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508, 21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237, 22323, 22320, 22312, 22317, 22316, 22319, 22313, 22809, 22810, 22839, 22840, 22916, 22904, 22915, 22909, 22905, 22914, 22913, 23383, 23384, 23431, 23432, 23429, 23433, 23546, 23574, 23673, 24030, 24070, 24182, 24180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24335, 24347, 24537, 24534, 25102, 25100, 25101, 25104, 25187, 25179, 25176, 25910, 26089, 26088, 26092, 26093, 26354, 26355, 26377, 26429, 26420, 26417, 26421, 27425, 27492, 27515, 27670, 27741, 27735, 27737, 27743, 27744, 27728, 27733, 27745, 27739, 27725, 27726, 28784, 29279, 29277, 30334, 31481, 31859, 31992, 32566, 32650, 32701, 32769, 32771, 32780, 32786, 32819, 32895, 32905, 32907, 32908, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33406, 34411, 34880, 34892, 34915, 35199, 38433, 20018, 20136, 20301, 20303, 20295, 20311, 20318, 20276, 20315, 20309, 20272, 20304, 20305, 20285, 20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271, 20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853, 20918, 20919, 21029, 21028, 21033, 21034, 21032, 21163, 21161, 21162, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566, 21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545, 21578, 21561, 21563, 21560, 21550, 21557, 21558, 21536, 21564, 21568, 21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353, 22336, 22349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846, 22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931, 22922, 22949, 23389, 23388, 23386, 23387, 23436, 23435, 23439, 23596, 23616, 23617, 23615, 23614, 23696, 23697, 23700, 23692, 24043, 24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439, 24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106, 25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212, 25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233, 25222, 25913, 25915, 25912, 26097, 26356, 26463, 26446, 26447, 26448, 26449, 26460, 26454, 26462, 26441, 26438, 26464, 26451, 26455, 27493, 27599, 27714, 27742, 27801, 27777, 27784, 27785, 27781, 27803, 27754, 27770, 27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774, 27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, 28796, 28797, 28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995, 30007, 30008, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995, 32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33419, 33421, 35211, 35282, 35328, 35895, 35910, 35925, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36802, 36806, 36805, 36804, 24033, 37009, 37026, 37034, 37030, 37027, 37193, 37318, 37324, 38450, 38446, 38449, 38442, 38444, 20006, 20054, 20083, 20107, 20123, 20126, 20139, 20140, 20335, 20381, 20365, 20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360, 20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821, 20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050, 21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329, 21350, 21367, 21368, 21369, 21462, 21460, 21463, 21619, 21621, 21654, 21624, 21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617, 21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403, 22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857, 22855, 22856, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993, 22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981, 23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578, 23624, 23621, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23622, 23735, 23713, 23736, 23721, 23723, 23729, 23731, 24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220, 24213, 24214, 24310, 24358, 24359, 24361, 24448, 24449, 24447, 24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629, 24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109, 25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273, 25298, 25307, 25259, 25299, 25300, 25291, 25288, 25256, 25277, 25276, 25296, 25305, 25287, 25293, 25269, 25306, 25265, 25304, 25302, 25303, 25286, 25260, 25294, 25918, 26023, 26044, 26106, 26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122, 26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487, 26503, 26525, 26519, 26479, 26480, 26495, 26505, 26494, 26512, 26485, 26522, 26515, 26492, 26474, 26482, 27427, 27494, 27495, 27519, 27667, 27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, 27837, 27838, 27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822, 27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887, 27868, 27862, 27872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28821, 28814, 28818, 28810, 28825, 29228, 29229, 29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609, 29608, 29599, 29611, 29605, 30013, 30109, 30105, 30106, 30340, 30402, 30450, 30452, 30693, 30717, 31038, 31040, 31041, 31177, 31176, 31354, 31353, 31482, 31998, 32596, 32652, 32651, 32773, 32954, 32933, 32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278, 33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452, 33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021, 34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319, 37329, 38263, 38272, 38428, 38464, 38463, 38459, 38468, 38466, 38585, 38632, 38738, 38750, 20127, 20141, 20142, 20449, 20405, 20399, 20415, 20448, 20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398, 20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881, 20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193, 21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672, 21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271, 22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865, 22863, 22862, 22864, 23004, 23000, 23039, 23011, 23016, 23043, 23013, 23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458, 23461, 23553, 23630, 23631, 23629, 23627, 23769, 23762, 24055, 24093, 24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456, 24453, 24458, 24459, 24455, 24460, 24457, 24594, 24605, 24608, 24613, 24590, 24616, 24653, 24688, 24680, 24674, 24646, 24643, 24684, 24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345, 25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361, 25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151, 26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580, 26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548, 26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589, 26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915, 27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27963, 27965, 27966, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950, 27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856, 28846, 28836, 29232, 29298, 29295, 29300, 29417, 29408, 29409, 29623, 29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028, 30030, 30027, 30123, 30116, 30117, 30114, 30115, 30328, 30342, 30343, 30344, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473, 30475, 30462, 30460, 30471, 30684, 30722, 30740, 30732, 30733, 31046, 31049, 31048, 31047, 31161, 31162, 31185, 31186, 31179, 31359, 31361, 31487, 31485, 31869, 32002, 32005, 32000, 32009, 32007, 32004, 32006, 32568, 32654, 32703, 32772, 32784, 32781, 32785, 32822, 32982, 32997, 32986, 32963, 32964, 32972, 32993, 32987, 32974, 32990, 32996, 32989, 33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509, 33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502, 33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923, 35201, 35284, 35336, 35330, 35331, 35998, 36000, 36212, 36211, 36276, 36557, 36556, 36848, 36838, 36834, 36842, 36837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36845, 36843, 36836, 36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480, 38475, 38476, 38477, 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 20056, 20147, 20492, 20493, 20515, 20463, 20518, 20517, 20472, 20521, 20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500, 20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522, 20478, 20523, 20489, 20860, 20900, 20901, 20898, 20941, 20940, 20934, 20939, 21078, 21084, 21076, 21083, 21085, 21290, 21375, 21407, 21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766, 21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799, 21767, 21757, 21775, 22275, 22276, 22466, 22484, 22475, 22467, 22537, 22799, 22871, 22872, 22874, 23057, 23064, 23068, 23071, 23067, 23059, 23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472, 23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637, 23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796, 24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464, 24665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735, 24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343, 25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424, 25405, 25386, 25387, 25384, 25421, 25420, 25928, 25929, 26009, 26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177, 26360, 26388, 26389, 26391, 26657, 26680, 26696, 26694, 26707, 26681, 26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704, 26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529, 27575, 27683, 27687, 27688, 27686, 27684, 27888, 28010, 28053, 28040, 28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994, 28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888, 28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432, 29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045, 30044, 30042, 30041, 30142, 30149, 30151, 30130, 30131, 30141, 30140, 30137, 30146, 30136, 30347, 30384, 30410, 30413, 30414, 30505, 30495, 30496, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062, 31070, 31069, 31063, 31066, 31204, 31203, 31207, 31199, 31206, 31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023, 32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013, 32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32792, 32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005, 33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261, 33260, 33280, 33296, 33322, 33323, 33320, 33324, 33467, 33579, 33618, 33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593, 33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451, 34468, 34473, 34444, 34467, 34460, 34928, 34935, 34945, 34946, 34941, 34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350, 35343, 35345, 35912, 35962, 35961, 36001, 36002, 36215, 36524, 36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852, 36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197, 37196, 37336, 37341, 37335, 37340, 37337, 38275, 38498, 38499, 38497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38491, 38493, 38500, 38488, 38494, 38587, 39138, 39340, 39592, 39640, 39717, 39730, 39740, 20094, 20602, 20605, 20572, 20551, 20547, 20556, 20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559, 20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209, 21208, 21205, 21264, 21263, 21273, 21311, 21312, 21310, 21443, 26364, 21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846, 21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811, 21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496, 22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105, 23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408, 23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648, 23644, 23645, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849, 23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119, 24247, 24248, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425, 24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739, 24713, 24736, 24744, 24779, 24756, 24806, 24765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24773, 24763, 24757, 24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775, 25114, 25115, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463, 25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512, 25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449, 25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944, 25941, 25940, 26012, 26011, 26028, 26063, 26059, 26060, 26062, 26205, 26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799, 26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755, 26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754, 27442, 27578, 27627, 27628, 27691, 28046, 28092, 28147, 28121, 28082, 28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113, 28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085, 28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074, 28140, 28095, 28134, 28921, 28937, 28938, 28925, 28911, 29245, 29309, 29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699, 29702, 29694, 29709, 29920, 29942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29943, 29980, 29986, 30053, 30054, 30050, 30064, 30095, 30164, 30165, 30133, 30154, 30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520, 30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381, 31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895, 31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051, 32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718, 32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072, 33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656, 33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655, 33659, 33660, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500, 34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987, 34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365, 35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011, 36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889, 36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896, 36879, 36898, 36886, 36891, 36884, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37096, 37101, 37117, 37207, 37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517, 38515, 38520, 38512, 38516, 38518, 38519, 38508, 38592, 38634, 38633, 31456, 31455, 38914, 38915, 39770, 40165, 40565, 40575, 40613, 40635, 20642, 20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977, 21106, 21108, 21109, 21097, 21214, 21213, 21211, 21338, 21413, 21883, 21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908, 21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947, 21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580, 22564, 22576, 22577, 22561, 22557, 22560, 22777, 22778, 22880, 23159, 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506, 23500, 23507, 23504, 23562, 23563, 23601, 23884, 23888, 23860, 23879, 24061, 24133, 24125, 24128, 24131, 24190, 24266, 24257, 24258, 24260, 24380, 24429, 24489, 24490, 24488, 24785, 24801, 24754, 24758, 24800, 24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846, 24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536, 25577, 25545, 25542, 25549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25554, 25571, 25552, 25569, 25558, 25581, 25582, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950, 25958, 25954, 25955, 26001, 26000, 26031, 26222, 26224, 26228, 26230, 26223, 26257, 26234, 26238, 26231, 26366, 26367, 26399, 26397, 26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855, 26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825, 26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631, 27694, 27695, 27692, 28207, 28216, 28244, 28193, 28210, 28263, 28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270, 28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, 28189, 28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255, 28953, 28954, 28966, 28976, 28961, 28982, 29038, 28956, 29260, 29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730, 29733, 29749, 29750, 29748, 29743, 29723, 29734, 29736, 29989, 29990, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174, 30176, 30331, 30332, 30358, 30355, 30388, 30428, 30543, 30701, 30813, 30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31383, 31382, 31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563, 31567, 31569, 31903, 31909, 32094, 32080, 32104, 32085, 32043, 32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, 32724, 32725, 32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094, 33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805, 33760, 33733, 33803, 33729, 33775, 33777, 33780, 33879, 33802, 33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756, 33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532, 34512, 34526, 34903, 35009, 35010, 34993, 35203, 35222, 35387, 35424, 35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386, 35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027, 36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302, 36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604, 36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129, 37118, 37219, 37221, 37327, 37396, 37397, 37411, 37385, 37406, 37389, 37392, 37383, 37393, 38292, 38287, 38283, 38289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38291, 38290, 38286, 38538, 38542, 38539, 38525, 38533, 38534, 38541, 38514, 38532, 38593, 38597, 38596, 38598, 38599, 38639, 38642, 38860, 38917, 38918, 38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341, 40643, 40653, 40657, 20098, 20653, 20661, 20658, 20659, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119, 21111, 21117, 21215, 21222, 21220, 21218, 21219, 21295, 21983, 21992, 21971, 21990, 21966, 21980, 21959, 21969, 21987, 21988, 21999, 21978, 21985, 21957, 21958, 21989, 21961, 22290, 22291, 22622, 22609, 22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610, 22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234, 23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492, 24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840, 24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887, 25121, 25122, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615, 25628, 25620, 25613, 25654, 25622, 25623, 25606, 25964, 26015, 26032, 26263, 26249, 26247, 26248, 26262, 26244, 26264, 26253, 26371, 27028, 26989, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984, 26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506, 27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304, 28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310, 28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028, 29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032, 29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781, 29791, 29790, 29761, 29759, 29785, 29787, 29788, 30070, 30072, 30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195, 30430, 30431, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572, 30556, 30565, 30568, 30562, 30702, 30862, 30896, 30871, 30872, 30860, 30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165, 31260, 31258, 31264, 31252, 31263, 31262, 31391, 31392, 31607, 31680, 31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129, 32143, 32091, 32622, 32617, 32618, 32626, 32681, 32680, 32676, 32854, 32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33145, 33146, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909, 33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897, 33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560, 34558, 34555, 34562, 34563, 34566, 34570, 34905, 35039, 35028, 35033, 35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435, 35442, 35443, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441, 35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938, 35978, 35977, 36042, 36039, 36040, 36036, 36018, 36035, 36034, 36037, 36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530, 36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930, 36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926, 36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432, 37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453, 37445, 37433, 37439, 37466, 38296, 38552, 38548, 38549, 38605, 38603, 38601, 38602, 38647, 38651, 38649, 38646, 38742, 38772, 38774, 38928, 38929, 38931, 38922, 38930, 38924, 39164, 39156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39165, 39166, 39347, 39345, 39348, 39649, 40169, 40578, 40718, 40723, 40736, 20711, 20718, 20709, 20694, 20717, 20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123, 21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022, 22025, 22029, 22030, 22007, 22038, 22047, 22024, 22032, 22006, 22296, 22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781, 22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254, 23256, 23267, 23413, 23518, 23527, 23521, 23525, 23526, 23528, 23522, 23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151, 24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907, 24951, 24930, 24931, 24927, 24922, 24920, 24949, 25130, 25735, 25688, 25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723, 25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029, 27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088, 27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467, 28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418, 28450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459, 28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081, 29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796, 29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217, 30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887, 30899, 30889, 30883, 31118, 31119, 31117, 31278, 31281, 31402, 31401, 31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631, 31672, 31623, 31620, 31929, 31933, 31934, 32187, 32176, 32156, 32189, 32190, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191, 32181, 32184, 32173, 32210, 32199, 32172, 32624, 32736, 32737, 32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151, 33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990, 33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936, 33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584, 34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048, 35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980, 36051, 36049, 36050, 36203, 36249, 36245, 36348, 36628, 36626, 36629, 36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957, 36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521, 38305, 38312, 38313, 38307, 38309, 38308, 38553, 38556, 38555, 38604, 38610, 38656, 38780, 38789, 38902, 38935, 38936, 39087, 39089, 39171, 39173, 39180, 39177, 39361, 39599, 39600, 39654, 39745, 39746, 40180, 40182, 40179, 40636, 40763, 40778, 20740, 20736, 20731, 20725, 20729, 20738, 20744, 20745, 20741, 20956, 21127, 21128, 21129, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066, 22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, 22063, 22064, 22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305, 23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531, 23652, 23653, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287, 24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942, 24925, 24917, 24962, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24956, 24944, 24939, 24958, 24999, 24976, 25003, 24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721, 25758, 25778, 25736, 25744, 25776, 25765, 25747, 25749, 25769, 25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973, 25975, 25976, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137, 27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117, 27153, 27472, 27470, 27556, 27589, 27590, 28479, 28540, 28548, 28497, 28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528, 28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105, 29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824, 30079, 30240, 30249, 30239, 30244, 30246, 30241, 30242, 30362, 30394, 30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922, 30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291, 31407, 31406, 31661, 31665, 31684, 31668, 31686, 31687, 31681, 31648, 31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232, 32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631, 32687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32745, 32806, 33179, 33180, 33181, 33184, 33178, 33176, 34071, 34109, 34074, 34030, 34092, 34093, 34067, 34065, 34083, 34081, 34068, 34028, 34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664, 34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, 35090, 35091, 35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506, 35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916, 35918, 35948, 36064, 36062, 36070, 36068, 36076, 36077, 36066, 36067, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368, 36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635, 36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968, 36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251, 37573, 37563, 37559, 37610, 37548, 37604, 37569, 37555, 37564, 37586, 37575, 37616, 37554, 38317, 38321, 38660, 38662, 38663, 38665, 38752, 38797, 38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192, 39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607, 39662, 39663, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40195, 40617, 40638, 40654, 22696, 40786, 20754, 20760, 20756, 20752, 20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137, 22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114, 22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536, 23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034, 25032, 25136, 25797, 25793, 25803, 25787, 25788, 25818, 25796, 25799, 25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297, 26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193, 27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511, 27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608, 28601, 28598, 28582, 28576, 28596, 29118, 29129, 29136, 29138, 29128, 29141, 29113, 29134, 29145, 29148, 29123, 29124, 29544, 29852, 29859, 29848, 29855, 29854, 29922, 29964, 29965, 30260, 30264, 30266, 30439, 30437, 30624, 30622, 30623, 30629, 30952, 30938, 30956, 30951, 31142, 31309, 31310, 31302, 31308, 31307, 31418, 31705, 31761, 31689, 31716, 31707, 31713, 31721, 31718, 31957, 31958, 32266, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32273, 32264, 32283, 32291, 32286, 32285, 32265, 32272, 32633, 32690, 32752, 32753, 32750, 32808, 33203, 33193, 33192, 33275, 33288, 33368, 33369, 34122, 34137, 34120, 34152, 34153, 34115, 34121, 34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114, 35122, 35109, 35115, 35105, 35242, 35238, 35558, 35578, 35563, 35569, 35584, 35548, 35559, 35566, 35582, 35585, 35586, 35575, 35565, 35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404, 36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981, 36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624, 37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665, 37653, 37678, 37657, 38331, 38567, 38568, 38570, 38613, 38670, 38673, 38678, 38669, 38675, 38671, 38747, 38748, 38758, 38808, 38960, 38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195, 39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720, 39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660, 40845, 40860, 20778, 20767, 20769, 20786, 21237, 22158, 22144, 22160, 22149, 22151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22159, 22741, 22739, 22737, 22734, 23344, 23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171, 24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806, 25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837, 25986, 25987, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355, 27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632, 28657, 28639, 28640, 28635, 28644, 28651, 28655, 28544, 28652, 28641, 28649, 28629, 28654, 28656, 29159, 29151, 29166, 29158, 29157, 29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872, 29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636, 30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146, 31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964, 31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306, 32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309, 32319, 32303, 32580, 32755, 32764, 32881, 32882, 32880, 32879, 32883, 33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256, 33289, 33393, 34218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34180, 34174, 34204, 34193, 34196, 34223, 34203, 34183, 34216, 34186, 34407, 34752, 34769, 34739, 34770, 34758, 34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133, 35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600, 35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425, 36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989, 36996, 36993, 36994, 36992, 37177, 37283, 37278, 37276, 37709, 37762, 37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744, 37722, 37716, 38346, 38347, 38348, 38344, 38342, 38577, 38584, 38614, 38684, 38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851, 39850, 39853, 40251, 40255, 40587, 40655, 40670, 40668, 40669, 40667, 40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059, 25139, 25844, 25842, 25854, 25862, 25850, 25851, 25847, 26039, 26332, 26406, 27315, 27308, 27331, 27323, 27320, 27330, 27310, 27311, 27487, 27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687, 29179, 29180, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294, 30296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30290, 30653, 30655, 30651, 30652, 30990, 31150, 31329, 31330, 31328, 31428, 31429, 31787, 31783, 31786, 31774, 31779, 31777, 31975, 32340, 32341, 32350, 32346, 32353, 32338, 32345, 32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217, 34253, 34256, 34249, 34224, 34234, 34233, 34214, 34799, 34796, 34802, 34784, 35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441, 36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995, 37000, 37291, 37292, 37328, 37780, 37770, 37782, 37794, 37811, 37806, 37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626, 38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989, 38991, 38988, 38990, 38995, 39098, 39230, 39231, 39229, 39214, 39333, 39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933, 39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181, 22750, 22751, 22754, 23541, 40848, 24300, 25074, 25079, 25078, 25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699, 28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346, 29560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663, 31001, 31153, 31339, 31337, 31806, 31807, 31800, 31805, 31799, 31808, 32363, 32365, 32377, 32361, 32362, 32645, 32371, 32694, 32697, 32696, 33240, 34281, 34269, 34282, 34261, 34276, 34277, 34295, 34811, 34821, 34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672, 35657, 35674, 35662, 35663, 35654, 35673, 36104, 36106, 36476, 36466, 36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, 37002, 37003, 37297, 37294, 37857, 37841, 37855, 37827, 37832, 37852, 37853, 37846, 37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698, 38695, 38753, 38876, 38907, 39006, 39000, 39003, 39100, 39237, 39241, 39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306, 40298, 40300, 40594, 40599, 40595, 40628, 21240, 22184, 22199, 22198, 22196, 22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880, 25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563, 29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820, 31811, 31821, 31983, 31984, 36782, 32381, 32380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32386, 32588, 32768, 33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314, 34836, 34837, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679, 35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912, 37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472, 39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803, 40801, 20791, 20792, 22209, 22208, 22210, 22804, 23660, 24013, 25084, 25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748, 29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700, 34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261, 35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306, 37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, 38712, 38713, 38706, 38911, 39015, 39013, 39255, 39493, 39491, 39488, 39486, 39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605, 40687, 40729, 40796, 40806, 40807, 20796, 20795, 22216, 22218, 22217, 23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760, 29568, 29924, 30090, 30318, 30316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31155, 31840, 31839, 32894, 32893, 33247, 35186, 35183, 35324, 35712, 36118, 36119, 36497, 36499, 36705, 37192, 37956, 37969, 37970, 38717, 38718, 38851, 38849, 39019, 39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403, 40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899, 25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406, 32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984, 37988, 38760, 39023, 39260, 39514, 39515, 39511, 39635, 39636, 39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900, 28766, 30321, 30322, 30679, 32592, 32648, 34870, 34873, 34914, 35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724, 38854, 39024, 39519, 39714, 39768, 40031, 40441, 40442, 40572, 40573, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854, 34875, 35264, 36513, 37313, 38002, 38000, 39025, 39262, 39638, 39715, 40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740, 36522, 37317, 38013, 38014, 38012, 40055, 40056, 40695, 35924, 38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 20022, 20031, 20101, 20128, 20866, 20886, 20907, 21241, 21304, 21353, 21430, 22794, 23424, 24027, 24186, 24191, 24308, 24400, 24417, 25908, 26080, 30098, 30326, 36789, 38582, 168, 710, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 65339, 65341, 10045, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12449, 12450, 12451, 12452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8679, 8632, 8633, 12751, 63462, 20058, 63464, 20994, 17553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40880, 20872, 40881, 63470, 63471, 63472, 63473, 63474, 63475, 63476, 63477, 63478, 63479, 63480, 63481, 63482, 12443, 12444, 12436, 12535, 12536, 12537, 12538, 12539, 65377, 65378, 65379, 65380, 65381, 65382, 65383, 65384, 65385, 65386, 65387, 65388, 65389, 65390, 65391, 65392, 65393, 65394, 65395, 65396, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 65397, 65398, 65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406, 65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414, 65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422, 65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430, 65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438, 65439, 20034, 20060, 20981, 21274, 21378, 19975, 19980, 20039, 20109, 22231, 64012, 23662, 24435, 19983, 20871, 19982, 20014, 20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787, 22828, 23568, 24063, 26081, 27571, 27596, 27668, 29247, 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186, 21004, 21276, 21324, 22306, 22307, 22807, 22831, 23425, 23428, 23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168, 27669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27702, 27715, 27711, 27707, 29358, 29360, 29578, 31160, 32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215, 20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913, 21011, 21001, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239, 22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903, 22911, 23382, 23573, 23589, 23676, 23674, 23675, 23678, 24031, 24181, 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180, 25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419, 27672, 27718, 27730, 27740, 27727, 27722, 27732, 27723, 27724, 28785, 29278, 29364, 29365, 29582, 29994, 30335, 31349, 32593, 33400, 33404, 33408, 33405, 33407, 34381, 35198, 37017, 37015, 37016, 37019, 37012, 38434, 38436, 38432, 38435, 20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319, 20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022, 21025, 21165, 21166, 21257, 21347, 21362, 21390, 21391, 21552, 21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21565, 21583, 21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348, 22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926, 22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693, 23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032, 24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440, 24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548, 24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228, 25230, 25231, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224, 25207, 25213, 25202, 25204, 25911, 26096, 26100, 26099, 26098, 26101, 26437, 26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600, 27673, 27674, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759, 27753, 27802, 27757, 27783, 27797, 27804, 27750, 27763, 27749, 27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377, 29370, 29381, 29589, 29591, 29587, 29588, 29586, 30010, 30009, 30100, 30101, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924, 33424, 33423, 33413, 33422, 33425, 33427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33418, 33411, 33412, 35960, 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024, 38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352, 20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378, 20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373, 20331, 20334, 20894, 20924, 20926, 21045, 21042, 21043, 21062, 21041, 21180, 21258, 21259, 21308, 21394, 21396, 21639, 21631, 21633, 21649, 21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645, 21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383, 22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395, 22387, 22388, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991, 22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973, 22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623, 23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725, 23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084, 24089, 24360, 24354, 24355, 24356, 24404, 24450, 24446, 24445, 24542, 24549, 24621, 24614, 24601, 24626, 24587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24628, 24586, 24599, 24627, 24602, 24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585, 24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290, 25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043, 26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117, 26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486, 26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513, 26521, 26499, 26493, 26497, 26488, 26489, 26516, 27429, 27520, 27518, 27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821, 27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858, 27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847, 27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806, 28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400, 29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613, 29606, 29602, 29600, 29612, 29597, 29917, 29928, 30015, 30016, 30014, 30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713, 30715, 30714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861, 31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440, 33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438, 33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442, 34416, 34415, 34413, 34414, 35926, 36818, 36811, 36819, 36813, 36822, 36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460, 38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436, 20444, 20441, 20411, 20403, 20443, 20423, 20438, 20410, 20416, 20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398, 21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687, 21678, 21718, 21686, 21701, 21702, 21664, 21616, 21692, 21666, 21694, 21618, 21726, 21680, 22453, 22430, 22431, 22436, 22412, 22423, 22429, 22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797, 22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036, 23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038, 23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23774, 23770, 23753, 23751, 23754, 23766, 23763, 23764, 23759, 23752, 23750, 23758, 23775, 23800, 24057, 24097, 24098, 24099, 24096, 24100, 24240, 24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631, 24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652, 24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, 25154, 25155, 25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356, 25336, 25334, 25344, 25363, 25364, 25338, 25365, 25339, 25328, 25921, 25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146, 26163, 26155, 26170, 26141, 26164, 26169, 26158, 26383, 26384, 26561, 26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565, 26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595, 26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572, 26542, 26598, 26587, 26618, 26569, 26570, 26563, 26602, 26571, 27432, 27522, 27524, 27574, 27606, 27608, 27616, 27680, 27681, 27944, 27956, 27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929, 27962, 27930, 27921, 27904, 27933, 27970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27905, 27928, 27959, 27907, 27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855, 28831, 28862, 28849, 28848, 28833, 28852, 28853, 28841, 29249, 29257, 29258, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419, 29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625, 29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624, 29643, 29932, 29934, 29998, 30023, 30024, 30119, 30122, 30329, 30404, 30472, 30467, 30468, 30469, 30474, 30455, 30459, 30458, 30695, 30696, 30726, 30737, 30738, 30725, 30736, 30735, 30734, 30729, 30723, 30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190, 31182, 31360, 31358, 31441, 31488, 31489, 31866, 31864, 31865, 31871, 31872, 31873, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775, 32782, 32783, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962, 32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983, 32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512, 33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525, 33548, 33531, 33526, 33520, 33514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33508, 33504, 33530, 33523, 33517, 34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283, 35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055, 37077, 37061, 37054, 37063, 37067, 37064, 37332, 37331, 38484, 38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514, 20528, 20507, 20469, 20468, 20531, 20535, 20524, 20470, 20471, 20503, 20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883, 20938, 20932, 20933, 20936, 20942, 21089, 21082, 21074, 21086, 21087, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783, 21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777, 21765, 21745, 21770, 21755, 21751, 21752, 21728, 21774, 21763, 21771, 22273, 22274, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460, 22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065, 23062, 23085, 23086, 23061, 23055, 23063, 23050, 23070, 23091, 23404, 23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793, 23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371, 24368, 24423, 24669, 24666, 24679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24641, 24738, 24712, 24704, 24722, 24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113, 25158, 25330, 25360, 25430, 25388, 25412, 25413, 25398, 25411, 25572, 25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433, 25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930, 25926, 26054, 26051, 26052, 26050, 26186, 26207, 26183, 26193, 26386, 26387, 26655, 26650, 26697, 26674, 26675, 26683, 26699, 26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692, 26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661, 26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622, 27620, 27624, 27619, 27618, 27623, 27685, 28026, 28003, 28004, 28022, 27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143, 28031, 28038, 27998, 28007, 28000, 28055, 28016, 28028, 27999, 28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035, 28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569, 28898, 28887, 28882, 28894, 28896, 28884, 28877, 28869, 28870, 28871, 28890, 28878, 28897, 29250, 29304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29303, 29302, 29440, 29434, 29428, 29438, 29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671, 29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, 29655, 29656, 29672, 29918, 29919, 29940, 29941, 29985, 30043, 30047, 30128, 30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493, 30491, 30480, 30483, 30482, 30499, 30481, 30485, 30489, 30490, 30498, 30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753, 30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058, 31057, 31211, 31212, 31200, 31214, 31213, 31210, 31196, 31198, 31197, 31366, 31369, 31365, 31371, 31372, 31370, 31367, 31448, 31504, 31492, 31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889, 31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024, 32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608, 32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825, 33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317, 33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574, 33564, 33570, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558, 33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566, 33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445, 34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457, 34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, 34883, 34884, 34925, 34933, 34934, 34930, 34944, 34929, 34943, 34927, 34947, 34942, 34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216, 36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859, 36868, 36860, 36854, 37078, 37088, 37081, 37082, 37091, 37087, 37093, 37080, 37083, 37079, 37084, 37092, 37200, 37198, 37199, 37333, 37346, 37338, 38492, 38495, 38588, 39139, 39647, 39727, 20095, 20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552, 20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587, 20579, 20580, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099, 21101, 21100, 21102, 21206, 21203, 21293, 21404, 21877, 21878, 21820, 21837, 21840, 21812, 21802, 21841, 21858, 21814, 21813, 21808, 21842, 21829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21772, 21810, 21861, 21838, 21817, 21832, 21805, 21819, 21824, 21835, 22282, 22279, 22523, 22548, 22498, 22518, 22492, 22516, 22528, 22509, 22525, 22536, 22520, 22539, 22515, 22479, 22535, 22510, 22499, 22514, 22501, 22508, 22497, 22542, 22524, 22544, 22503, 22529, 22540, 22513, 22505, 22512, 22541, 22532, 22876, 23136, 23128, 23125, 23143, 23134, 23096, 23093, 23149, 23120, 23135, 23141, 23148, 23123, 23140, 23127, 23107, 23133, 23122, 23108, 23131, 23112, 23182, 23102, 23117, 23097, 23116, 23152, 23145, 23111, 23121, 23126, 23106, 23132, 23410, 23406, 23489, 23488, 23641, 23838, 23819, 23837, 23834, 23840, 23820, 23848, 23821, 23846, 23845, 23823, 23856, 23826, 23843, 23839, 23854, 24126, 24116, 24241, 24244, 24249, 24242, 24243, 24374, 24376, 24475, 24470, 24479, 24714, 24720, 24710, 24766, 24752, 24762, 24787, 24788, 24783, 24804, 24793, 24797, 24776, 24753, 24795, 24759, 24778, 24767, 24771, 24781, 24768, 25394, 25445, 25482, 25474, 25469, 25533, 25502, 25517, 25501, 25495, 25515, 25486, 25455, 25479, 25488, 25454, 25519, 25461, 25500, 25453, 25518, 25468, 25508, 25403, 25503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25464, 25477, 25473, 25489, 25485, 25456, 25939, 26061, 26213, 26209, 26203, 26201, 26204, 26210, 26392, 26745, 26759, 26768, 26780, 26733, 26734, 26798, 26795, 26966, 26735, 26787, 26796, 26793, 26741, 26740, 26802, 26767, 26743, 26770, 26748, 26731, 26738, 26794, 26752, 26737, 26750, 26779, 26774, 26763, 26784, 26761, 26788, 26744, 26747, 26769, 26764, 26762, 26749, 27446, 27443, 27447, 27448, 27537, 27535, 27533, 27534, 27532, 27690, 28096, 28075, 28084, 28083, 28276, 28076, 28137, 28130, 28087, 28150, 28116, 28160, 28104, 28128, 28127, 28118, 28094, 28133, 28124, 28125, 28123, 28148, 28106, 28093, 28141, 28144, 28090, 28117, 28098, 28111, 28105, 28112, 28146, 28115, 28157, 28119, 28109, 28131, 28091, 28922, 28941, 28919, 28951, 28916, 28940, 28912, 28932, 28915, 28944, 28924, 28927, 28934, 28947, 28928, 28920, 28918, 28939, 28930, 28942, 29310, 29307, 29308, 29311, 29469, 29463, 29447, 29457, 29464, 29450, 29448, 29439, 29455, 29470, 29576, 29686, 29688, 29685, 29700, 29697, 29693, 29703, 29696, 29690, 29692, 29695, 29708, 29707, 29684, 29704, 30052, 30051, 30158, 30162, 30159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30155, 30156, 30161, 30160, 30351, 30345, 30419, 30521, 30511, 30509, 30513, 30514, 30516, 30515, 30525, 30501, 30523, 30517, 30792, 30802, 30793, 30797, 30794, 30796, 30758, 30789, 30800, 31076, 31079, 31081, 31082, 31075, 31083, 31073, 31163, 31226, 31224, 31222, 31223, 31375, 31380, 31376, 31541, 31559, 31540, 31525, 31536, 31522, 31524, 31539, 31512, 31530, 31517, 31537, 31531, 31533, 31535, 31538, 31544, 31514, 31523, 31892, 31896, 31894, 31907, 32053, 32061, 32056, 32054, 32058, 32069, 32044, 32041, 32065, 32071, 32062, 32063, 32074, 32059, 32040, 32611, 32661, 32668, 32669, 32667, 32714, 32715, 32717, 32720, 32721, 32711, 32719, 32713, 32799, 32798, 32795, 32839, 32835, 32840, 33048, 33061, 33049, 33051, 33069, 33055, 33068, 33054, 33057, 33045, 33063, 33053, 33058, 33297, 33336, 33331, 33338, 33332, 33330, 33396, 33680, 33699, 33704, 33677, 33658, 33651, 33700, 33652, 33679, 33665, 33685, 33689, 33653, 33684, 33705, 33661, 33667, 33676, 33693, 33691, 33706, 33675, 33662, 33701, 33711, 33672, 33687, 33712, 33663, 33702, 33671, 33710, 33654, 33690, 34393, 34390, 34495, 34487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34498, 34497, 34501, 34490, 34480, 34504, 34489, 34483, 34488, 34508, 34484, 34491, 34492, 34499, 34493, 34494, 34898, 34953, 34965, 34984, 34978, 34986, 34970, 34961, 34977, 34975, 34968, 34983, 34969, 34971, 34967, 34980, 34988, 34956, 34963, 34958, 35202, 35286, 35289, 35285, 35376, 35367, 35372, 35358, 35897, 35899, 35932, 35933, 35965, 36005, 36221, 36219, 36217, 36284, 36290, 36281, 36287, 36289, 36568, 36574, 36573, 36572, 36567, 36576, 36577, 36900, 36875, 36881, 36892, 36876, 36897, 37103, 37098, 37104, 37108, 37106, 37107, 37076, 37099, 37100, 37097, 37206, 37208, 37210, 37203, 37205, 37356, 37364, 37361, 37363, 37368, 37348, 37369, 37354, 37355, 37367, 37352, 37358, 38266, 38278, 38280, 38524, 38509, 38507, 38513, 38511, 38591, 38762, 38916, 39141, 39319, 20635, 20629, 20628, 20638, 20619, 20643, 20611, 20620, 20622, 20637, 20584, 20636, 20626, 20610, 20615, 20831, 20948, 21266, 21265, 21412, 21415, 21905, 21928, 21925, 21933, 21879, 22085, 21922, 21907, 21896, 21903, 21941, 21889, 21923, 21906, 21924, 21885, 21900, 21926, 21887, 21909, 21921, 21902, 22284, 22569, 22583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22553, 22558, 22567, 22563, 22568, 22517, 22600, 22565, 22556, 22555, 22579, 22591, 22582, 22574, 22585, 22584, 22573, 22572, 22587, 22881, 23215, 23188, 23199, 23162, 23202, 23198, 23160, 23206, 23164, 23205, 23212, 23189, 23214, 23095, 23172, 23178, 23191, 23171, 23179, 23209, 23163, 23165, 23180, 23196, 23183, 23187, 23197, 23530, 23501, 23499, 23508, 23505, 23498, 23502, 23564, 23600, 23863, 23875, 23915, 23873, 23883, 23871, 23861, 23889, 23886, 23893, 23859, 23866, 23890, 23869, 23857, 23897, 23874, 23865, 23881, 23864, 23868, 23858, 23862, 23872, 23877, 24132, 24129, 24408, 24486, 24485, 24491, 24777, 24761, 24780, 24802, 24782, 24772, 24852, 24818, 24842, 24854, 24837, 24821, 24851, 24824, 24828, 24830, 24769, 24835, 24856, 24861, 24848, 24831, 24836, 24843, 25162, 25492, 25521, 25520, 25550, 25573, 25576, 25583, 25539, 25757, 25587, 25546, 25568, 25590, 25557, 25586, 25589, 25697, 25567, 25534, 25565, 25564, 25540, 25560, 25555, 25538, 25543, 25548, 25547, 25544, 25584, 25559, 25561, 25906, 25959, 25962, 25956, 25948, 25960, 25957, 25996, 26013, 26014, 26030, 26064, 26066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26236, 26220, 26235, 26240, 26225, 26233, 26218, 26226, 26369, 26892, 26835, 26884, 26844, 26922, 26860, 26858, 26865, 26895, 26838, 26871, 26859, 26852, 26870, 26899, 26896, 26867, 26849, 26887, 26828, 26888, 26992, 26804, 26897, 26863, 26822, 26900, 26872, 26832, 26877, 26876, 26856, 26891, 26890, 26903, 26830, 26824, 26845, 26846, 26854, 26868, 26833, 26886, 26836, 26857, 26901, 26917, 26823, 27449, 27451, 27455, 27452, 27540, 27543, 27545, 27541, 27581, 27632, 27634, 27635, 27696, 28156, 28230, 28231, 28191, 28233, 28296, 28220, 28221, 28229, 28258, 28203, 28223, 28225, 28253, 28275, 28188, 28211, 28235, 28224, 28241, 28219, 28163, 28206, 28254, 28264, 28252, 28257, 28209, 28200, 28256, 28273, 28267, 28217, 28194, 28208, 28243, 28261, 28199, 28280, 28260, 28279, 28245, 28281, 28242, 28262, 28213, 28214, 28250, 28960, 28958, 28975, 28923, 28974, 28977, 28963, 28965, 28962, 28978, 28959, 28968, 28986, 28955, 29259, 29274, 29320, 29321, 29318, 29317, 29323, 29458, 29451, 29488, 29474, 29489, 29491, 29479, 29490, 29485, 29478, 29475, 29493, 29452, 29742, 29740, 29744, 29739, 29718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29722, 29729, 29741, 29745, 29732, 29731, 29725, 29737, 29728, 29746, 29947, 29999, 30063, 30060, 30183, 30170, 30177, 30182, 30173, 30175, 30180, 30167, 30357, 30354, 30426, 30534, 30535, 30532, 30541, 30533, 30538, 30542, 30539, 30540, 30686, 30700, 30816, 30820, 30821, 30812, 30829, 30833, 30826, 30830, 30832, 30825, 30824, 30814, 30818, 31092, 31091, 31090, 31088, 31234, 31242, 31235, 31244, 31236, 31385, 31462, 31460, 31562, 31547, 31556, 31560, 31564, 31566, 31552, 31576, 31557, 31906, 31902, 31912, 31905, 32088, 32111, 32099, 32083, 32086, 32103, 32106, 32079, 32109, 32092, 32107, 32082, 32084, 32105, 32081, 32095, 32078, 32574, 32575, 32613, 32614, 32674, 32672, 32673, 32727, 32849, 32847, 32848, 33022, 32980, 33091, 33098, 33106, 33103, 33095, 33085, 33101, 33082, 33254, 33262, 33271, 33272, 33273, 33284, 33340, 33341, 33343, 33397, 33595, 33743, 33785, 33827, 33728, 33768, 33810, 33767, 33764, 33788, 33782, 33808, 33734, 33736, 33771, 33763, 33727, 33793, 33757, 33765, 33752, 33791, 33761, 33739, 33742, 33750, 33781, 33737, 33801, 33807, 33758, 33809, 33798, 33730, 33779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33749, 33786, 33735, 33745, 33770, 33811, 33731, 33772, 33774, 33732, 33787, 33751, 33762, 33819, 33755, 33790, 34520, 34530, 34534, 34515, 34531, 34522, 34538, 34525, 34539, 34524, 34540, 34537, 34519, 34536, 34513, 34888, 34902, 34901, 35002, 35031, 35001, 35000, 35008, 35006, 34998, 35004, 34999, 35005, 34994, 35073, 35017, 35221, 35224, 35223, 35293, 35290, 35291, 35406, 35405, 35385, 35417, 35392, 35415, 35416, 35396, 35397, 35410, 35400, 35409, 35402, 35404, 35407, 35935, 35969, 35968, 36026, 36030, 36016, 36025, 36021, 36228, 36224, 36233, 36312, 36307, 36301, 36295, 36310, 36316, 36303, 36309, 36313, 36296, 36311, 36293, 36591, 36599, 36602, 36601, 36582, 36590, 36581, 36597, 36583, 36584, 36598, 36587, 36593, 36588, 36596, 36585, 36909, 36916, 36911, 37126, 37164, 37124, 37119, 37116, 37128, 37113, 37115, 37121, 37120, 37127, 37125, 37123, 37217, 37220, 37215, 37218, 37216, 37377, 37386, 37413, 37379, 37402, 37414, 37391, 37388, 37376, 37394, 37375, 37373, 37382, 37380, 37415, 37378, 37404, 37412, 37401, 37399, 37381, 37398, 38267, 38285, 38284, 38288, 38535, 38526, 38536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38537, 38531, 38528, 38594, 38600, 38595, 38641, 38640, 38764, 38768, 38766, 38919, 39081, 39147, 40166, 40697, 20099, 20100, 20150, 20669, 20671, 20678, 20654, 20676, 20682, 20660, 20680, 20674, 20656, 20673, 20666, 20657, 20683, 20681, 20662, 20664, 20951, 21114, 21112, 21115, 21116, 21955, 21979, 21964, 21968, 21963, 21962, 21981, 21952, 21972, 21956, 21993, 21951, 21970, 21901, 21967, 21973, 21986, 21974, 21960, 22002, 21965, 21977, 21954, 22292, 22611, 22632, 22628, 22607, 22605, 22601, 22639, 22613, 22606, 22621, 22617, 22629, 22619, 22589, 22627, 22641, 22780, 23239, 23236, 23243, 23226, 23224, 23217, 23221, 23216, 23231, 23240, 23227, 23238, 23223, 23232, 23242, 23220, 23222, 23245, 23225, 23184, 23510, 23512, 23513, 23583, 23603, 23921, 23907, 23882, 23909, 23922, 23916, 23902, 23912, 23911, 23906, 24048, 24143, 24142, 24138, 24141, 24139, 24261, 24268, 24262, 24267, 24263, 24384, 24495, 24493, 24823, 24905, 24906, 24875, 24901, 24886, 24882, 24878, 24902, 24879, 24911, 24873, 24896, 25120, 37224, 25123, 25125, 25124, 25541, 25585, 25579, 25616, 25618, 25609, 25632, 25636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25651, 25667, 25631, 25621, 25624, 25657, 25655, 25634, 25635, 25612, 25638, 25648, 25640, 25665, 25653, 25647, 25610, 25626, 25664, 25637, 25639, 25611, 25575, 25627, 25646, 25633, 25614, 25967, 26002, 26067, 26246, 26252, 26261, 26256, 26251, 26250, 26265, 26260, 26232, 26400, 26982, 26975, 26936, 26958, 26978, 26993, 26943, 26949, 26986, 26937, 26946, 26967, 26969, 27002, 26952, 26953, 26933, 26988, 26931, 26941, 26981, 26864, 27000, 26932, 26985, 26944, 26991, 26948, 26998, 26968, 26945, 26996, 26956, 26939, 26955, 26935, 26972, 26959, 26961, 26930, 26962, 26927, 27003, 26940, 27462, 27461, 27459, 27458, 27464, 27457, 27547, 64013, 27643, 27644, 27641, 27639, 27640, 28315, 28374, 28360, 28303, 28352, 28319, 28307, 28308, 28320, 28337, 28345, 28358, 28370, 28349, 28353, 28318, 28361, 28343, 28336, 28365, 28326, 28367, 28338, 28350, 28355, 28380, 28376, 28313, 28306, 28302, 28301, 28324, 28321, 28351, 28339, 28368, 28362, 28311, 28334, 28323, 28999, 29012, 29010, 29027, 29024, 28993, 29021, 29026, 29042, 29048, 29034, 29025, 28994, 29016, 28995, 29003, 29040, 29023, 29008, 29011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28996, 29005, 29018, 29263, 29325, 29324, 29329, 29328, 29326, 29500, 29506, 29499, 29498, 29504, 29514, 29513, 29764, 29770, 29771, 29778, 29777, 29783, 29760, 29775, 29776, 29774, 29762, 29766, 29773, 29780, 29921, 29951, 29950, 29949, 29981, 30073, 30071, 27011, 30191, 30223, 30211, 30199, 30206, 30204, 30201, 30200, 30224, 30203, 30198, 30189, 30197, 30205, 30361, 30389, 30429, 30549, 30559, 30560, 30546, 30550, 30554, 30569, 30567, 30548, 30553, 30573, 30688, 30855, 30874, 30868, 30863, 30852, 30869, 30853, 30854, 30881, 30851, 30841, 30873, 30848, 30870, 30843, 31100, 31106, 31101, 31097, 31249, 31256, 31257, 31250, 31255, 31253, 31266, 31251, 31259, 31248, 31395, 31394, 31390, 31467, 31590, 31588, 31597, 31604, 31593, 31602, 31589, 31603, 31601, 31600, 31585, 31608, 31606, 31587, 31922, 31924, 31919, 32136, 32134, 32128, 32141, 32127, 32133, 32122, 32142, 32123, 32131, 32124, 32140, 32148, 32132, 32125, 32146, 32621, 32619, 32615, 32616, 32620, 32678, 32677, 32679, 32731, 32732, 32801, 33124, 33120, 33143, 33116, 33129, 33115, 33122, 33138, 26401, 33118, 33142, 33127, 33135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33092, 33121, 33309, 33353, 33348, 33344, 33346, 33349, 34033, 33855, 33878, 33910, 33913, 33935, 33933, 33893, 33873, 33856, 33926, 33895, 33840, 33869, 33917, 33882, 33881, 33908, 33907, 33885, 34055, 33886, 33847, 33850, 33844, 33914, 33859, 33912, 33842, 33861, 33833, 33753, 33867, 33839, 33858, 33837, 33887, 33904, 33849, 33870, 33868, 33874, 33903, 33989, 33934, 33851, 33863, 33846, 33843, 33896, 33918, 33860, 33835, 33888, 33876, 33902, 33872, 34571, 34564, 34551, 34572, 34554, 34518, 34549, 34637, 34552, 34574, 34569, 34561, 34550, 34573, 34565, 35030, 35019, 35021, 35022, 35038, 35035, 35034, 35020, 35024, 35205, 35227, 35295, 35301, 35300, 35297, 35296, 35298, 35292, 35302, 35446, 35462, 35455, 35425, 35391, 35447, 35458, 35460, 35445, 35459, 35457, 35444, 35450, 35900, 35915, 35914, 35941, 35940, 35942, 35974, 35972, 35973, 36044, 36200, 36201, 36241, 36236, 36238, 36239, 36237, 36243, 36244, 36240, 36242, 36336, 36320, 36332, 36337, 36334, 36304, 36329, 36323, 36322, 36327, 36338, 36331, 36340, 36614, 36607, 36609, 36608, 36613, 36615, 36616, 36610, 36619, 36946, 36927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36932, 36937, 36925, 37136, 37133, 37135, 37137, 37142, 37140, 37131, 37134, 37230, 37231, 37448, 37458, 37424, 37434, 37478, 37427, 37477, 37470, 37507, 37422, 37450, 37446, 37485, 37484, 37455, 37472, 37479, 37487, 37430, 37473, 37488, 37425, 37460, 37475, 37456, 37490, 37454, 37459, 37452, 37462, 37426, 38303, 38300, 38302, 38299, 38546, 38547, 38545, 38551, 38606, 38650, 38653, 38648, 38645, 38771, 38775, 38776, 38770, 38927, 38925, 38926, 39084, 39158, 39161, 39343, 39346, 39344, 39349, 39597, 39595, 39771, 40170, 40173, 40167, 40576, 40701, 20710, 20692, 20695, 20712, 20723, 20699, 20714, 20701, 20708, 20691, 20716, 20720, 20719, 20707, 20704, 20952, 21120, 21121, 21225, 21227, 21296, 21420, 22055, 22037, 22028, 22034, 22012, 22031, 22044, 22017, 22035, 22018, 22010, 22045, 22020, 22015, 22009, 22665, 22652, 22672, 22680, 22662, 22657, 22655, 22644, 22667, 22650, 22663, 22673, 22670, 22646, 22658, 22664, 22651, 22676, 22671, 22782, 22891, 23260, 23278, 23269, 23253, 23274, 23258, 23277, 23275, 23283, 23266, 23264, 23259, 23276, 23262, 23261, 23257, 23272, 23263, 23415, 23520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23523, 23651, 23938, 23936, 23933, 23942, 23930, 23937, 23927, 23946, 23945, 23944, 23934, 23932, 23949, 23929, 23935, 24152, 24153, 24147, 24280, 24273, 24279, 24270, 24284, 24277, 24281, 24274, 24276, 24388, 24387, 24431, 24502, 24876, 24872, 24897, 24926, 24945, 24947, 24914, 24915, 24946, 24940, 24960, 24948, 24916, 24954, 24923, 24933, 24891, 24938, 24929, 24918, 25129, 25127, 25131, 25643, 25677, 25691, 25693, 25716, 25718, 25714, 25715, 25725, 25717, 25702, 25766, 25678, 25730, 25694, 25692, 25675, 25683, 25696, 25680, 25727, 25663, 25708, 25707, 25689, 25701, 25719, 25971, 26016, 26273, 26272, 26271, 26373, 26372, 26402, 27057, 27062, 27081, 27040, 27086, 27030, 27056, 27052, 27068, 27025, 27033, 27022, 27047, 27021, 27049, 27070, 27055, 27071, 27076, 27069, 27044, 27092, 27065, 27082, 27034, 27087, 27059, 27027, 27050, 27041, 27038, 27097, 27031, 27024, 27074, 27061, 27045, 27078, 27466, 27469, 27467, 27550, 27551, 27552, 27587, 27588, 27646, 28366, 28405, 28401, 28419, 28453, 28408, 28471, 28411, 28462, 28425, 28494, 28441, 28442, 28455, 28440, 28475, 28434, 28397, 28426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28470, 28531, 28409, 28398, 28461, 28480, 28464, 28476, 28469, 28395, 28423, 28430, 28483, 28421, 28413, 28406, 28473, 28444, 28412, 28474, 28447, 28429, 28446, 28424, 28449, 29063, 29072, 29065, 29056, 29061, 29058, 29071, 29051, 29062, 29057, 29079, 29252, 29267, 29335, 29333, 29331, 29507, 29517, 29521, 29516, 29794, 29811, 29809, 29813, 29810, 29799, 29806, 29952, 29954, 29955, 30077, 30096, 30230, 30216, 30220, 30229, 30225, 30218, 30228, 30392, 30593, 30588, 30597, 30594, 30574, 30592, 30575, 30590, 30595, 30898, 30890, 30900, 30893, 30888, 30846, 30891, 30878, 30885, 30880, 30892, 30882, 30884, 31128, 31114, 31115, 31126, 31125, 31124, 31123, 31127, 31112, 31122, 31120, 31275, 31306, 31280, 31279, 31272, 31270, 31400, 31403, 31404, 31470, 31624, 31644, 31626, 31633, 31632, 31638, 31629, 31628, 31643, 31630, 31621, 31640, 21124, 31641, 31652, 31618, 31931, 31935, 31932, 31930, 32167, 32183, 32194, 32163, 32170, 32193, 32192, 32197, 32157, 32206, 32196, 32198, 32203, 32204, 32175, 32185, 32150, 32188, 32159, 32166, 32174, 32169, 32161, 32201, 32627, 32738, 32739, 32741, 32734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32804, 32861, 32860, 33161, 33158, 33155, 33159, 33165, 33164, 33163, 33301, 33943, 33956, 33953, 33951, 33978, 33998, 33986, 33964, 33966, 33963, 33977, 33972, 33985, 33997, 33962, 33946, 33969, 34000, 33949, 33959, 33979, 33954, 33940, 33991, 33996, 33947, 33961, 33967, 33960, 34006, 33944, 33974, 33999, 33952, 34007, 34004, 34002, 34011, 33968, 33937, 34401, 34611, 34595, 34600, 34667, 34624, 34606, 34590, 34593, 34585, 34587, 34627, 34604, 34625, 34622, 34630, 34592, 34610, 34602, 34605, 34620, 34578, 34618, 34609, 34613, 34626, 34598, 34599, 34616, 34596, 34586, 34608, 34577, 35063, 35047, 35057, 35058, 35066, 35070, 35054, 35068, 35062, 35067, 35056, 35052, 35051, 35229, 35233, 35231, 35230, 35305, 35307, 35304, 35499, 35481, 35467, 35474, 35471, 35478, 35901, 35944, 35945, 36053, 36047, 36055, 36246, 36361, 36354, 36351, 36365, 36349, 36362, 36355, 36359, 36358, 36357, 36350, 36352, 36356, 36624, 36625, 36622, 36621, 37155, 37148, 37152, 37154, 37151, 37149, 37146, 37156, 37153, 37147, 37242, 37234, 37241, 37235, 37541, 37540, 37494, 37531, 37498, 37536, 37524, 37546, 37517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37542, 37530, 37547, 37497, 37527, 37503, 37539, 37614, 37518, 37506, 37525, 37538, 37501, 37512, 37537, 37514, 37510, 37516, 37529, 37543, 37502, 37511, 37545, 37533, 37515, 37421, 38558, 38561, 38655, 38744, 38781, 38778, 38782, 38787, 38784, 38786, 38779, 38788, 38785, 38783, 38862, 38861, 38934, 39085, 39086, 39170, 39168, 39175, 39325, 39324, 39363, 39353, 39355, 39354, 39362, 39357, 39367, 39601, 39651, 39655, 39742, 39743, 39776, 39777, 39775, 40177, 40178, 40181, 40615, 20735, 20739, 20784, 20728, 20742, 20743, 20726, 20734, 20747, 20748, 20733, 20746, 21131, 21132, 21233, 21231, 22088, 22082, 22092, 22069, 22081, 22090, 22089, 22086, 22104, 22106, 22080, 22067, 22077, 22060, 22078, 22072, 22058, 22074, 22298, 22699, 22685, 22705, 22688, 22691, 22703, 22700, 22693, 22689, 22783, 23295, 23284, 23293, 23287, 23286, 23299, 23288, 23298, 23289, 23297, 23303, 23301, 23311, 23655, 23961, 23959, 23967, 23954, 23970, 23955, 23957, 23968, 23964, 23969, 23962, 23966, 24169, 24157, 24160, 24156, 32243, 24283, 24286, 24289, 24393, 24498, 24971, 24963, 24953, 25009, 25008, 24994, 24969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24987, 24979, 25007, 25005, 24991, 24978, 25002, 24993, 24973, 24934, 25011, 25133, 25710, 25712, 25750, 25760, 25733, 25751, 25756, 25743, 25739, 25738, 25740, 25763, 25759, 25704, 25777, 25752, 25974, 25978, 25977, 25979, 26034, 26035, 26293, 26288, 26281, 26290, 26295, 26282, 26287, 27136, 27142, 27159, 27109, 27128, 27157, 27121, 27108, 27168, 27135, 27116, 27106, 27163, 27165, 27134, 27175, 27122, 27118, 27156, 27127, 27111, 27200, 27144, 27110, 27131, 27149, 27132, 27115, 27145, 27140, 27160, 27173, 27151, 27126, 27174, 27143, 27124, 27158, 27473, 27557, 27555, 27554, 27558, 27649, 27648, 27647, 27650, 28481, 28454, 28542, 28551, 28614, 28562, 28557, 28553, 28556, 28514, 28495, 28549, 28506, 28566, 28534, 28524, 28546, 28501, 28530, 28498, 28496, 28503, 28564, 28563, 28509, 28416, 28513, 28523, 28541, 28519, 28560, 28499, 28555, 28521, 28543, 28565, 28515, 28535, 28522, 28539, 29106, 29103, 29083, 29104, 29088, 29082, 29097, 29109, 29085, 29093, 29086, 29092, 29089, 29098, 29084, 29095, 29107, 29336, 29338, 29528, 29522, 29534, 29535, 29536, 29533, 29531, 29537, 29530, 29529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29538, 29831, 29833, 29834, 29830, 29825, 29821, 29829, 29832, 29820, 29817, 29960, 29959, 30078, 30245, 30238, 30233, 30237, 30236, 30243, 30234, 30248, 30235, 30364, 30365, 30366, 30363, 30605, 30607, 30601, 30600, 30925, 30907, 30927, 30924, 30929, 30926, 30932, 30920, 30915, 30916, 30921, 31130, 31137, 31136, 31132, 31138, 31131, 27510, 31289, 31410, 31412, 31411, 31671, 31691, 31678, 31660, 31694, 31663, 31673, 31690, 31669, 31941, 31944, 31948, 31947, 32247, 32219, 32234, 32231, 32215, 32225, 32259, 32250, 32230, 32246, 32241, 32240, 32238, 32223, 32630, 32684, 32688, 32685, 32749, 32747, 32746, 32748, 32742, 32744, 32868, 32871, 33187, 33183, 33182, 33173, 33186, 33177, 33175, 33302, 33359, 33363, 33362, 33360, 33358, 33361, 34084, 34107, 34063, 34048, 34089, 34062, 34057, 34061, 34079, 34058, 34087, 34076, 34043, 34091, 34042, 34056, 34060, 34036, 34090, 34034, 34069, 34039, 34027, 34035, 34044, 34066, 34026, 34025, 34070, 34046, 34088, 34077, 34094, 34050, 34045, 34078, 34038, 34097, 34086, 34023, 34024, 34032, 34031, 34041, 34072, 34080, 34096, 34059, 34073, 34095, 34402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34646, 34659, 34660, 34679, 34785, 34675, 34648, 34644, 34651, 34642, 34657, 34650, 34641, 34654, 34669, 34666, 34640, 34638, 34655, 34653, 34671, 34668, 34682, 34670, 34652, 34661, 34639, 34683, 34677, 34658, 34663, 34665, 34906, 35077, 35084, 35092, 35083, 35095, 35096, 35097, 35078, 35094, 35089, 35086, 35081, 35234, 35236, 35235, 35309, 35312, 35308, 35535, 35526, 35512, 35539, 35537, 35540, 35541, 35515, 35543, 35518, 35520, 35525, 35544, 35523, 35514, 35517, 35545, 35902, 35917, 35983, 36069, 36063, 36057, 36072, 36058, 36061, 36071, 36256, 36252, 36257, 36251, 36384, 36387, 36389, 36388, 36398, 36373, 36379, 36374, 36369, 36377, 36390, 36391, 36372, 36370, 36376, 36371, 36380, 36375, 36378, 36652, 36644, 36632, 36634, 36640, 36643, 36630, 36631, 36979, 36976, 36975, 36967, 36971, 37167, 37163, 37161, 37162, 37170, 37158, 37166, 37253, 37254, 37258, 37249, 37250, 37252, 37248, 37584, 37571, 37572, 37568, 37593, 37558, 37583, 37617, 37599, 37592, 37609, 37591, 37597, 37580, 37615, 37570, 37608, 37578, 37576, 37582, 37606, 37581, 37589, 37577, 37600, 37598, 37607, 37585, 37587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37557, 37601, 37574, 37556, 38268, 38316, 38315, 38318, 38320, 38564, 38562, 38611, 38661, 38664, 38658, 38746, 38794, 38798, 38792, 38864, 38863, 38942, 38941, 38950, 38953, 38952, 38944, 38939, 38951, 39090, 39176, 39162, 39185, 39188, 39190, 39191, 39189, 39388, 39373, 39375, 39379, 39380, 39374, 39369, 39382, 39384, 39371, 39383, 39372, 39603, 39660, 39659, 39667, 39666, 39665, 39750, 39747, 39783, 39796, 39793, 39782, 39798, 39797, 39792, 39784, 39780, 39788, 40188, 40186, 40189, 40191, 40183, 40199, 40192, 40185, 40187, 40200, 40197, 40196, 40579, 40659, 40719, 40720, 20764, 20755, 20759, 20762, 20753, 20958, 21300, 21473, 22128, 22112, 22126, 22131, 22118, 22115, 22125, 22130, 22110, 22135, 22300, 22299, 22728, 22717, 22729, 22719, 22714, 22722, 22716, 22726, 23319, 23321, 23323, 23329, 23316, 23315, 23312, 23318, 23336, 23322, 23328, 23326, 23535, 23980, 23985, 23977, 23975, 23989, 23984, 23982, 23978, 23976, 23986, 23981, 23983, 23988, 24167, 24168, 24166, 24175, 24297, 24295, 24294, 24296, 24293, 24395, 24508, 24989, 25000, 24982, 25029, 25012, 25030, 25025, 25036, 25018, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25023, 25016, 24972, 25815, 25814, 25808, 25807, 25801, 25789, 25737, 25795, 25819, 25843, 25817, 25907, 25983, 25980, 26018, 26312, 26302, 26304, 26314, 26315, 26319, 26301, 26299, 26298, 26316, 26403, 27188, 27238, 27209, 27239, 27186, 27240, 27198, 27229, 27245, 27254, 27227, 27217, 27176, 27226, 27195, 27199, 27201, 27242, 27236, 27216, 27215, 27220, 27247, 27241, 27232, 27196, 27230, 27222, 27221, 27213, 27214, 27206, 27477, 27476, 27478, 27559, 27562, 27563, 27592, 27591, 27652, 27651, 27654, 28589, 28619, 28579, 28615, 28604, 28622, 28616, 28510, 28612, 28605, 28574, 28618, 28584, 28676, 28581, 28590, 28602, 28588, 28586, 28623, 28607, 28600, 28578, 28617, 28587, 28621, 28591, 28594, 28592, 29125, 29122, 29119, 29112, 29142, 29120, 29121, 29131, 29140, 29130, 29127, 29135, 29117, 29144, 29116, 29126, 29146, 29147, 29341, 29342, 29545, 29542, 29543, 29548, 29541, 29547, 29546, 29823, 29850, 29856, 29844, 29842, 29845, 29857, 29963, 30080, 30255, 30253, 30257, 30269, 30259, 30268, 30261, 30258, 30256, 30395, 30438, 30618, 30621, 30625, 30620, 30619, 30626, 30627, 30613, 30617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30615, 30941, 30953, 30949, 30954, 30942, 30947, 30939, 30945, 30946, 30957, 30943, 30944, 31140, 31300, 31304, 31303, 31414, 31416, 31413, 31409, 31415, 31710, 31715, 31719, 31709, 31701, 31717, 31706, 31720, 31737, 31700, 31722, 31714, 31708, 31723, 31704, 31711, 31954, 31956, 31959, 31952, 31953, 32274, 32289, 32279, 32268, 32287, 32288, 32275, 32270, 32284, 32277, 32282, 32290, 32267, 32271, 32278, 32269, 32276, 32293, 32292, 32579, 32635, 32636, 32634, 32689, 32751, 32810, 32809, 32876, 33201, 33190, 33198, 33209, 33205, 33195, 33200, 33196, 33204, 33202, 33207, 33191, 33266, 33365, 33366, 33367, 34134, 34117, 34155, 34125, 34131, 34145, 34136, 34112, 34118, 34148, 34113, 34146, 34116, 34129, 34119, 34147, 34110, 34139, 34161, 34126, 34158, 34165, 34133, 34151, 34144, 34188, 34150, 34141, 34132, 34149, 34156, 34403, 34405, 34404, 34715, 34703, 34711, 34707, 34706, 34696, 34689, 34710, 34712, 34681, 34695, 34723, 34693, 34704, 34705, 34717, 34692, 34708, 34716, 34714, 34697, 35102, 35110, 35120, 35117, 35118, 35111, 35121, 35106, 35113, 35107, 35119, 35116, 35103, 35313, 35552, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35554, 35570, 35572, 35573, 35549, 35604, 35556, 35551, 35568, 35528, 35550, 35553, 35560, 35583, 35567, 35579, 35985, 35986, 35984, 36085, 36078, 36081, 36080, 36083, 36204, 36206, 36261, 36263, 36403, 36414, 36408, 36416, 36421, 36406, 36412, 36413, 36417, 36400, 36415, 36541, 36662, 36654, 36661, 36658, 36665, 36663, 36660, 36982, 36985, 36987, 36998, 37114, 37171, 37173, 37174, 37267, 37264, 37265, 37261, 37263, 37671, 37662, 37640, 37663, 37638, 37647, 37754, 37688, 37692, 37659, 37667, 37650, 37633, 37702, 37677, 37646, 37645, 37579, 37661, 37626, 37669, 37651, 37625, 37623, 37684, 37634, 37668, 37631, 37673, 37689, 37685, 37674, 37652, 37644, 37643, 37630, 37641, 37632, 37627, 37654, 38332, 38349, 38334, 38329, 38330, 38326, 38335, 38325, 38333, 38569, 38612, 38667, 38674, 38672, 38809, 38807, 38804, 38896, 38904, 38965, 38959, 38962, 39204, 39199, 39207, 39209, 39326, 39406, 39404, 39397, 39396, 39408, 39395, 39402, 39401, 39399, 39609, 39615, 39604, 39611, 39670, 39674, 39673, 39671, 39731, 39808, 39813, 39815, 39804, 39806, 39803, 39810, 39827, 39826, 39824, 39802, 39829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39805, 39816, 40229, 40215, 40224, 40222, 40212, 40233, 40221, 40216, 40226, 40208, 40217, 40223, 40584, 40582, 40583, 40622, 40621, 40661, 40662, 40698, 40722, 40765, 20774, 20773, 20770, 20772, 20768, 20777, 21236, 22163, 22156, 22157, 22150, 22148, 22147, 22142, 22146, 22143, 22145, 22742, 22740, 22735, 22738, 23341, 23333, 23346, 23331, 23340, 23335, 23334, 23343, 23342, 23419, 23537, 23538, 23991, 24172, 24170, 24510, 24507, 25027, 25013, 25020, 25063, 25056, 25061, 25060, 25064, 25054, 25839, 25833, 25827, 25835, 25828, 25832, 25985, 25984, 26038, 26074, 26322, 27277, 27286, 27265, 27301, 27273, 27295, 27291, 27297, 27294, 27271, 27283, 27278, 27285, 27267, 27304, 27300, 27281, 27263, 27302, 27290, 27269, 27276, 27282, 27483, 27565, 27657, 28620, 28585, 28660, 28628, 28643, 28636, 28653, 28647, 28646, 28638, 28658, 28637, 28642, 28648, 29153, 29169, 29160, 29170, 29156, 29168, 29154, 29555, 29550, 29551, 29847, 29874, 29867, 29840, 29866, 29869, 29873, 29861, 29871, 29968, 29969, 29970, 29967, 30084, 30275, 30280, 30281, 30279, 30372, 30441, 30645, 30635, 30642, 30647, 30646, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30644, 30641, 30632, 30704, 30963, 30973, 30978, 30971, 30972, 30962, 30981, 30969, 30974, 30980, 31147, 31144, 31324, 31323, 31318, 31320, 31316, 31322, 31422, 31424, 31425, 31749, 31759, 31730, 31744, 31743, 31739, 31758, 31732, 31755, 31731, 31746, 31753, 31747, 31745, 31736, 31741, 31750, 31728, 31729, 31760, 31754, 31976, 32301, 32316, 32322, 32307, 38984, 32312, 32298, 32329, 32320, 32327, 32297, 32332, 32304, 32315, 32310, 32324, 32314, 32581, 32639, 32638, 32637, 32756, 32754, 32812, 33211, 33220, 33228, 33226, 33221, 33223, 33212, 33257, 33371, 33370, 33372, 34179, 34176, 34191, 34215, 34197, 34208, 34187, 34211, 34171, 34212, 34202, 34206, 34167, 34172, 34185, 34209, 34170, 34168, 34135, 34190, 34198, 34182, 34189, 34201, 34205, 34177, 34210, 34178, 34184, 34181, 34169, 34166, 34200, 34192, 34207, 34408, 34750, 34730, 34733, 34757, 34736, 34732, 34745, 34741, 34748, 34734, 34761, 34755, 34754, 34764, 34743, 34735, 34756, 34762, 34740, 34742, 34751, 34744, 34749, 34782, 34738, 35125, 35123, 35132, 35134, 35137, 35154, 35127, 35138, 35245, 35247, 35246, 35314, 35315, 35614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35608, 35606, 35601, 35589, 35595, 35618, 35599, 35602, 35605, 35591, 35597, 35592, 35590, 35612, 35603, 35610, 35919, 35952, 35954, 35953, 35951, 35989, 35988, 36089, 36207, 36430, 36429, 36435, 36432, 36428, 36423, 36675, 36672, 36997, 36990, 37176, 37274, 37282, 37275, 37273, 37279, 37281, 37277, 37280, 37793, 37763, 37807, 37732, 37718, 37703, 37756, 37720, 37724, 37750, 37705, 37712, 37713, 37728, 37741, 37775, 37708, 37738, 37753, 37719, 37717, 37714, 37711, 37745, 37751, 37755, 37729, 37726, 37731, 37735, 37760, 37710, 37721, 38343, 38336, 38345, 38339, 38341, 38327, 38574, 38576, 38572, 38688, 38687, 38680, 38685, 38681, 38810, 38817, 38812, 38814, 38813, 38869, 38868, 38897, 38977, 38980, 38986, 38985, 38981, 38979, 39205, 39211, 39212, 39210, 39219, 39218, 39215, 39213, 39217, 39216, 39320, 39331, 39329, 39426, 39418, 39412, 39415, 39417, 39416, 39414, 39419, 39421, 39422, 39420, 39427, 39614, 39678, 39677, 39681, 39676, 39752, 39834, 39848, 39838, 39835, 39846, 39841, 39845, 39844, 39814, 39842, 39840, 39855, 40243, 40257, 40295, 40246, 40238, 40239, 40241, 40248, 40240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40261, 40258, 40259, 40254, 40247, 40256, 40253, 32757, 40237, 40586, 40585, 40589, 40624, 40648, 40666, 40699, 40703, 40740, 40739, 40738, 40788, 40864, 20785, 20781, 20782, 22168, 22172, 22167, 22170, 22173, 22169, 22896, 23356, 23657, 23658, 24000, 24173, 24174, 25048, 25055, 25069, 25070, 25073, 25066, 25072, 25067, 25046, 25065, 25855, 25860, 25853, 25848, 25857, 25859, 25852, 26004, 26075, 26330, 26331, 26328, 27333, 27321, 27325, 27361, 27334, 27322, 27318, 27319, 27335, 27316, 27309, 27486, 27593, 27659, 28679, 28684, 28685, 28673, 28677, 28692, 28686, 28671, 28672, 28667, 28710, 28668, 28663, 28682, 29185, 29183, 29177, 29187, 29181, 29558, 29880, 29888, 29877, 29889, 29886, 29878, 29883, 29890, 29972, 29971, 30300, 30308, 30297, 30288, 30291, 30295, 30298, 30374, 30397, 30444, 30658, 30650, 30975, 30988, 30995, 30996, 30985, 30992, 30994, 30993, 31149, 31148, 31327, 31772, 31785, 31769, 31776, 31775, 31789, 31773, 31782, 31784, 31778, 31781, 31792, 32348, 32336, 32342, 32355, 32344, 32354, 32351, 32337, 32352, 32343, 32339, 32693, 32691, 32759, 32760, 32885, 33233, 33234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33232, 33375, 33374, 34228, 34246, 34240, 34243, 34242, 34227, 34229, 34237, 34247, 34244, 34239, 34251, 34254, 34248, 34245, 34225, 34230, 34258, 34340, 34232, 34231, 34238, 34409, 34791, 34790, 34786, 34779, 34795, 34794, 34789, 34783, 34803, 34788, 34772, 34780, 34771, 34797, 34776, 34787, 34724, 34775, 34777, 34817, 34804, 34792, 34781, 35155, 35147, 35151, 35148, 35142, 35152, 35153, 35145, 35626, 35623, 35619, 35635, 35632, 35637, 35655, 35631, 35644, 35646, 35633, 35621, 35639, 35622, 35638, 35630, 35620, 35643, 35645, 35642, 35906, 35957, 35993, 35992, 35991, 36094, 36100, 36098, 36096, 36444, 36450, 36448, 36439, 36438, 36446, 36453, 36455, 36443, 36442, 36449, 36445, 36457, 36436, 36678, 36679, 36680, 36683, 37160, 37178, 37179, 37182, 37288, 37285, 37287, 37295, 37290, 37813, 37772, 37778, 37815, 37787, 37789, 37769, 37799, 37774, 37802, 37790, 37798, 37781, 37768, 37785, 37791, 37773, 37809, 37777, 37810, 37796, 37800, 37812, 37795, 37797, 38354, 38355, 38353, 38579, 38615, 38618, 24002, 38623, 38616, 38621, 38691, 38690, 38693, 38828, 38830, 38824, 38827, 38820, 38826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38818, 38821, 38871, 38873, 38870, 38872, 38906, 38992, 38993, 38994, 39096, 39233, 39228, 39226, 39439, 39435, 39433, 39437, 39428, 39441, 39434, 39429, 39431, 39430, 39616, 39644, 39688, 39684, 39685, 39721, 39733, 39754, 39756, 39755, 39879, 39878, 39875, 39871, 39873, 39861, 39864, 39891, 39862, 39876, 39865, 39869, 40284, 40275, 40271, 40266, 40283, 40267, 40281, 40278, 40268, 40279, 40274, 40276, 40287, 40280, 40282, 40590, 40588, 40671, 40705, 40704, 40726, 40741, 40747, 40746, 40745, 40744, 40780, 40789, 20788, 20789, 21142, 21239, 21428, 22187, 22189, 22182, 22183, 22186, 22188, 22746, 22749, 22747, 22802, 23357, 23358, 23359, 24003, 24176, 24511, 25083, 25863, 25872, 25869, 25865, 25868, 25870, 25988, 26078, 26077, 26334, 27367, 27360, 27340, 27345, 27353, 27339, 27359, 27356, 27344, 27371, 27343, 27341, 27358, 27488, 27568, 27660, 28697, 28711, 28704, 28694, 28715, 28705, 28706, 28707, 28713, 28695, 28708, 28700, 28714, 29196, 29194, 29191, 29186, 29189, 29349, 29350, 29348, 29347, 29345, 29899, 29893, 29879, 29891, 29974, 30304, 30665, 30666, 30660, 30705, 31005, 31003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31009, 31004, 30999, 31006, 31152, 31335, 31336, 31795, 31804, 31801, 31788, 31803, 31980, 31978, 32374, 32373, 32376, 32368, 32375, 32367, 32378, 32370, 32372, 32360, 32587, 32586, 32643, 32646, 32695, 32765, 32766, 32888, 33239, 33237, 33380, 33377, 33379, 34283, 34289, 34285, 34265, 34273, 34280, 34266, 34263, 34284, 34290, 34296, 34264, 34271, 34275, 34268, 34257, 34288, 34278, 34287, 34270, 34274, 34816, 34810, 34819, 34806, 34807, 34825, 34828, 34827, 34822, 34812, 34824, 34815, 34826, 34818, 35170, 35162, 35163, 35159, 35169, 35164, 35160, 35165, 35161, 35208, 35255, 35254, 35318, 35664, 35656, 35658, 35648, 35667, 35670, 35668, 35659, 35669, 35665, 35650, 35666, 35671, 35907, 35959, 35958, 35994, 36102, 36103, 36105, 36268, 36266, 36269, 36267, 36461, 36472, 36467, 36458, 36463, 36475, 36546, 36690, 36689, 36687, 36688, 36691, 36788, 37184, 37183, 37296, 37293, 37854, 37831, 37839, 37826, 37850, 37840, 37881, 37868, 37836, 37849, 37801, 37862, 37834, 37844, 37870, 37859, 37845, 37828, 37838, 37824, 37842, 37863, 38269, 38362, 38363, 38625, 38697, 38699, 38700, 38696, 38694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38835, 38839, 38838, 38877, 38878, 38879, 39004, 39001, 39005, 38999, 39103, 39101, 39099, 39102, 39240, 39239, 39235, 39334, 39335, 39450, 39445, 39461, 39453, 39460, 39451, 39458, 39456, 39463, 39459, 39454, 39452, 39444, 39618, 39691, 39690, 39694, 39692, 39735, 39914, 39915, 39904, 39902, 39908, 39910, 39906, 39920, 39892, 39895, 39916, 39900, 39897, 39909, 39893, 39905, 39898, 40311, 40321, 40330, 40324, 40328, 40305, 40320, 40312, 40326, 40331, 40332, 40317, 40299, 40308, 40309, 40304, 40297, 40325, 40307, 40315, 40322, 40303, 40313, 40319, 40327, 40296, 40596, 40593, 40640, 40700, 40749, 40768, 40769, 40781, 40790, 40791, 40792, 21303, 22194, 22197, 22195, 22755, 23365, 24006, 24007, 24302, 24303, 24512, 24513, 25081, 25879, 25878, 25877, 25875, 26079, 26344, 26339, 26340, 27379, 27376, 27370, 27368, 27385, 27377, 27374, 27375, 28732, 28725, 28719, 28727, 28724, 28721, 28738, 28728, 28735, 28730, 28729, 28736, 28731, 28723, 28737, 29203, 29204, 29352, 29565, 29564, 29882, 30379, 30378, 30398, 30445, 30668, 30670, 30671, 30669, 30706, 31013, 31011, 31015, 31016, 31012, 31017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31154, 31342, 31340, 31341, 31479, 31817, 31816, 31818, 31815, 31813, 31982, 32379, 32382, 32385, 32384, 32698, 32767, 32889, 33243, 33241, 33291, 33384, 33385, 34338, 34303, 34305, 34302, 34331, 34304, 34294, 34308, 34313, 34309, 34316, 34301, 34841, 34832, 34833, 34839, 34835, 34838, 35171, 35174, 35257, 35319, 35680, 35690, 35677, 35688, 35683, 35685, 35687, 35693, 36270, 36486, 36488, 36484, 36697, 36694, 36695, 36693, 36696, 36698, 37005, 37187, 37185, 37303, 37301, 37298, 37299, 37899, 37907, 37883, 37920, 37903, 37908, 37886, 37909, 37904, 37928, 37913, 37901, 37877, 37888, 37879, 37895, 37902, 37910, 37906, 37882, 37897, 37880, 37898, 37887, 37884, 37900, 37878, 37905, 37894, 38366, 38368, 38367, 38702, 38703, 38841, 38843, 38909, 38910, 39008, 39010, 39011, 39007, 39105, 39106, 39248, 39246, 39257, 39244, 39243, 39251, 39474, 39476, 39473, 39468, 39466, 39478, 39465, 39470, 39480, 39469, 39623, 39626, 39622, 39696, 39698, 39697, 39947, 39944, 39927, 39941, 39954, 39928, 40000, 39943, 39950, 39942, 39959, 39956, 39945, 40351, 40345, 40356, 40349, 40338, 40344, 40336, 40347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40352, 40340, 40348, 40362, 40343, 40353, 40346, 40354, 40360, 40350, 40355, 40383, 40361, 40342, 40358, 40359, 40601, 40603, 40602, 40677, 40676, 40679, 40678, 40752, 40750, 40795, 40800, 40798, 40797, 40793, 40849, 20794, 20793, 21144, 21143, 22211, 22205, 22206, 23368, 23367, 24011, 24015, 24305, 25085, 25883, 27394, 27388, 27395, 27384, 27392, 28739, 28740, 28746, 28744, 28745, 28741, 28742, 29213, 29210, 29209, 29566, 29975, 30314, 30672, 31021, 31025, 31023, 31828, 31827, 31986, 32394, 32391, 32392, 32395, 32390, 32397, 32589, 32699, 32816, 33245, 34328, 34346, 34342, 34335, 34339, 34332, 34329, 34343, 34350, 34337, 34336, 34345, 34334, 34341, 34857, 34845, 34843, 34848, 34852, 34844, 34859, 34890, 35181, 35177, 35182, 35179, 35322, 35705, 35704, 35653, 35706, 35707, 36112, 36116, 36271, 36494, 36492, 36702, 36699, 36701, 37190, 37188, 37189, 37305, 37951, 37947, 37942, 37929, 37949, 37948, 37936, 37945, 37930, 37943, 37932, 37952, 37937, 38373, 38372, 38371, 38709, 38714, 38847, 38881, 39012, 39113, 39110, 39104, 39256, 39254, 39481, 39485, 39494, 39492, 39490, 39489, 39482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39487, 39629, 39701, 39703, 39704, 39702, 39738, 39762, 39979, 39965, 39964, 39980, 39971, 39976, 39977, 39972, 39969, 40375, 40374, 40380, 40385, 40391, 40394, 40399, 40382, 40389, 40387, 40379, 40373, 40398, 40377, 40378, 40364, 40392, 40369, 40365, 40396, 40371, 40397, 40370, 40570, 40604, 40683, 40686, 40685, 40731, 40728, 40730, 40753, 40782, 40805, 40804, 40850, 20153, 22214, 22213, 22219, 22897, 23371, 23372, 24021, 24017, 24306, 25889, 25888, 25894, 25890, 27403, 27400, 27401, 27661, 28757, 28758, 28759, 28754, 29214, 29215, 29353, 29567, 29912, 29909, 29913, 29911, 30317, 30381, 31029, 31156, 31344, 31345, 31831, 31836, 31833, 31835, 31834, 31988, 31985, 32401, 32591, 32647, 33246, 33387, 34356, 34357, 34355, 34348, 34354, 34358, 34860, 34856, 34854, 34858, 34853, 35185, 35263, 35262, 35323, 35710, 35716, 35714, 35718, 35717, 35711, 36117, 36501, 36500, 36506, 36498, 36496, 36502, 36503, 36704, 36706, 37191, 37964, 37968, 37962, 37963, 37967, 37959, 37957, 37960, 37961, 37958, 38719, 38883, 39018, 39017, 39115, 39252, 39259, 39502, 39507, 39508, 39500, 39503, 39496, 39498, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39497, 39506, 39504, 39632, 39705, 39723, 39739, 39766, 39765, 40006, 40008, 39999, 40004, 39993, 39987, 40001, 39996, 39991, 39988, 39986, 39997, 39990, 40411, 40402, 40414, 40410, 40395, 40400, 40412, 40401, 40415, 40425, 40409, 40408, 40406, 40437, 40405, 40413, 40630, 40688, 40757, 40755, 40754, 40770, 40811, 40853, 40866, 20797, 21145, 22760, 22759, 22898, 23373, 24024, 34863, 24399, 25089, 25091, 25092, 25897, 25893, 26006, 26347, 27409, 27410, 27407, 27594, 28763, 28762, 29218, 29570, 29569, 29571, 30320, 30676, 31847, 31846, 32405, 33388, 34362, 34368, 34361, 34364, 34353, 34363, 34366, 34864, 34866, 34862, 34867, 35190, 35188, 35187, 35326, 35724, 35726, 35723, 35720, 35909, 36121, 36504, 36708, 36707, 37308, 37986, 37973, 37981, 37975, 37982, 38852, 38853, 38912, 39510, 39513, 39710, 39711, 39712, 40018, 40024, 40016, 40010, 40013, 40011, 40021, 40025, 40012, 40014, 40443, 40439, 40431, 40419, 40427, 40440, 40420, 40438, 40417, 40430, 40422, 40434, 40432, 40418, 40428, 40436, 40435, 40424, 40429, 40642, 40656, 40690, 40691, 40710, 40732, 40760, 40759, 40758, 40771, 40783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40817, 40816, 40814, 40815, 22227, 22221, 23374, 23661, 25901, 26349, 26350, 27411, 28767, 28769, 28765, 28768, 29219, 29915, 29925, 30677, 31032, 31159, 31158, 31850, 32407, 32649, 33389, 34371, 34872, 34871, 34869, 34891, 35732, 35733, 36510, 36511, 36512, 36509, 37310, 37309, 37314, 37995, 37992, 37993, 38629, 38726, 38723, 38727, 38855, 38885, 39518, 39637, 39769, 40035, 40039, 40038, 40034, 40030, 40032, 40450, 40446, 40455, 40451, 40454, 40453, 40448, 40449, 40457, 40447, 40445, 40452, 40608, 40734, 40774, 40820, 40821, 40822, 22228, 25902, 26040, 27416, 27417, 27415, 27418, 28770, 29222, 29354, 30680, 30681, 31033, 31849, 31851, 31990, 32410, 32408, 32411, 32409, 33248, 33249, 34374, 34375, 34376, 35193, 35194, 35196, 35195, 35327, 35736, 35737, 36517, 36516, 36515, 37998, 37997, 37999, 38001, 38003, 38729, 39026, 39263, 40040, 40046, 40045, 40459, 40461, 40464, 40463, 40466, 40465, 40609, 40693, 40713, 40775, 40824, 40827, 40826, 40825, 22302, 28774, 31855, 34876, 36274, 36518, 37315, 38004, 38008, 38006, 38005, 39520, 40052, 40051, 40049, 40053, 40468, 40467, 40694, 40714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40868, 28776, 28773, 31991, 34410, 34878, 34877, 34879, 35742, 35996, 36521, 36553, 38731, 39027, 39028, 39116, 39265, 39339, 39524, 39526, 39527, 39716, 40469, 40471, 40776, 25095, 27422, 29223, 34380, 36520, 38018, 38016, 38017, 39529, 39528, 39726, 40473, 29225, 34379, 35743, 38019, 40057, 40631, 30325, 39531, 40058, 40477, 28777, 28778, 40612, 40830, 40777, 40856, 30849, 37561, 35023, 22715, 24658, 31911, 23290, 9556, 9574, 9559, 9568, 9580, 9571, 9562, 9577, 9565, 9554, 9572, 9557, 9566, 9578, 9569, 9560, 9575, 9563, 9555, 9573, 9558, 9567, 9579, 9570, 9561, 9576, 9564, 9553, 9552, 9581, 9582, 9584, 9583, 9619, 57344, 57345, 57346, 57347, 57348, 57349, 57350, 57351, 57352, 57353, 57354, 57355, 57356, 57357, 57358, 57359, 57360, 57361, 57362, 57363, 57364, 57365, 57366, 57367, 57368, 57369, 57370, 57371, 57372, 57373, 57374, 57375, 57376, 57377, 57378, 57379, 29234, 29244, 29286, 29314, 29327, 29343, 29357, 29361, 29368, 29374, 29389, 29403, 29476, 29487, 29496, 29497, 29629, 29646, 29681, 29814, 29858, 29953, 29977, 29987, 30012, 30020, 30025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30029, 30061, 30082, 30083, 30089, 30124, 30166, 30185, 30272, 30285, 30292, 30312, 30336, 30339, 30352, 30391, 30393, 30477, 30494, 30531, 30744, 30748, 30777, 30780, 30791, 30806, 30842, 30901, 30905, 30918, 30937, 30983, 31024, 31028, 31035, 31104, 31133, 31171, 31201, 31238, 31246, 31299, 31312, 31427, 31442, 31458, 31463, 31480, 31542, 31586, 31596, 31610, 31611, 31642, 31646, 31647, 31650, 31655, 31734, 31762, 31764, 31823, 31830, 31832, 31915, 31994, 32072, 32075, 32119, 32212, 32213, 32214, 32228, 32333, 32349, 32383, 32393, 32398, 32402, 32468, 32497, 32530, 32560, 32625, 32642, 32686, 32710, 32800, 32802, 32805, 32817, 32863, 32872, 32940, 32951, 20890, 21526, 21524, 13535, 19581, 25283, 57508, 57509, 57510, 21707, 57512, 21948, 32950, 20903, 57516, 57517, 57518, 21779, 33318, 57521, 21790, 21982, 25529, 26776, 57526, 21762, 21865, 30132, 25596, 40580, 37418, 57533, 57534, 57535, 35015, 24734, 22053, 28997, 23282, 57541, 21135, 22095, 30611, 34694, 36397, 33206, 13822, 29174, 57550, 34820, 37765, 57553, 57554, 30310, 57556, 40050, 57558, 25294, 57560, 40598, 18825, 31955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36570, 40619, 25831, 57567, 33450, 26471, 28018, 30982, 31172, 32590, 34798, 57575, 33726, 34351, 35237, 17935, 57580, 39112, 39232, 39245, 39436, 39639, 40600, 40742, 57588, 20227, 57590, 20281, 20274, 20395, 20566, 57595, 20526, 20646, 20697, 20750, 20717, 20737, 20980, 21023, 21088, 21079, 21146, 21201, 21216, 21217, 20947, 20959, 30022, 20990, 21298, 21292, 21299, 21419, 21418, 40846, 21609, 21660, 21466, 27338, 21875, 57625, 13782, 57627, 22033, 22093, 57630, 22100, 13811, 57633, 22342, 22394, 22375, 22586, 22502, 22493, 22592, 57641, 22566, 22748, 22967, 23001, 23584, 57647, 23761, 23785, 23878, 23950, 57652, 24053, 24075, 24082, 24110, 24158, 57658, 24397, 31357, 23491, 31419, 57663, 57664, 24484, 24506, 24508, 57668, 24695, 24740, 24755, 24829, 24880, 57674, 24988, 24921, 24957, 24924, 25471, 25058, 28885, 25145, 25192, 25221, 25218, 25254, 25301, 25444, 25397, 25744, 14940, 26184, 26215, 26398, 26627, 26540, 26617, 26806, 26924, 26881, 26880, 26826, 26995, 27008, 26942, 57706, 27058, 27072, 27018, 27130, 27113, 27314, 27218, 27293, 27421, 27474, 27642, 15569, 27854, 28239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28089, 28484, 57723, 28634, 28801, 31180, 28980, 15820, 29046, 57730, 57731, 29205, 29264, 29319, 29484, 29362, 29410, 29442, 29512, 29480, 29519, 29553, 25989, 57744, 29789, 29800, 29982, 30035, 30074, 30369, 30412, 30500, 30507, 16485, 30803, 30931, 30936, 40318, 30895, 57760, 24898, 31145, 39994, 31188, 57765, 31277, 31294, 31305, 31453, 31450, 30147, 30215, 30210, 57774, 30311, 30319, 22048, 35431, 40727, 31519, 31634, 31651, 31695, 57784, 31740, 31810, 31825, 31837, 31856, 31870, 31878, 31875, 31916, 31943, 31938, 57796, 31962, 57798, 32077, 32090, 32245, 32295, 32366, 40597, 21107, 32797, 32866, 32867, 32870, 32859, 32934, 33027, 40577, 33224, 57815, 36768, 33270, 33306, 57819, 34673, 34729, 34700, 40606, 34753, 40476, 57826, 34774, 34805, 34831, 34840, 34861, 34882, 34885, 39989, 34926, 34986, 34976, 25245, 35139, 35149, 29042, 34910, 57843, 33533, 17591, 33488, 33669, 40194, 40809, 33824, 57851, 34010, 33965, 17659, 34123, 57856, 34306, 34320, 25553, 35209, 35210, 35220, 40005, 35260, 35454, 35401, 35596, 35651, 35713, 35660, 57871, 36013, 36075, 36087, 36108, 36226, 36262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36308, 36392, 36431, 36471, 36469, 36519, 36633, 57885, 36700, 40260, 37060, 37201, 57890, 37212, 37209, 37223, 37244, 37262, 37307, 40616, 36950, 36940, 37374, 37474, 37566, 37739, 37742, 37818, 37927, 38295, 38311, 57909, 38456, 57911, 38531, 38550, 38529, 38589, 38659, 38689, 38705, 38751, 38815, 38836, 38840, 38842, 38846, 38856, 40639, 38943, 38958, 40869, 38983, 38987, 39014, 39020, 39092, 40794, 39132, 39142, 39234, 39225, 39227, 40787, 39242, 40773, 19326, 39386, 31432, 39610, 39613, 40706, 39722, 57951, 39725, 39650, 39682, 39679, 19463, 39689, 19460, 19515, 39823, 39837, 39856, 39948, 39957, 39946, 39935, 39982, 33000, 33001, 33004, 33038, 27705, 20074, 38465, 22770, 31074, 26658, 57978, 57979, 33031, 22487, 17642, 25653, 34100, 16607, 57986, 26906, 39938, 30129, 33747, 29041, 27147, 57993, 27258, 39668, 57996, 57997, 30649, 25904, 28054, 22071, 26405, 27179, 32093, 36961, 20120, 31910, 31545, 58009, 22901, 14023, 28799, 58013, 28299, 58015, 58016, 38749, 37584, 22356, 58020, 16089, 58022, 58023, 24985, 29792, 28991, 31022, 23190, 37704, 26254, 20477, 37697, 13908, 23925, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28702, 25979, 28813, 24269, 58039, 24743, 31408, 24419, 58043, 29687, 58045, 29800, 30132, 58048, 39785, 189, 8531, 8532, 188, 190, 8533, 8534, 8535, 8536, 8537, 8538, 34450, 34464, 34477, 34482, 34725, 34737, 8539, 8540, 8541, 8542, 34778, 34895, 34912, 34951, 34959, 34960, 35046, 35071, 35072, 35108, 35143, 35156, 35173, 35200, 35217, 35356, 35369, 35371, 35384, 35389, 8978, 35472, 35476, 35484, 35497, 35503, 35508, 35562, 35615, 8240, 35647, 35661, 35678, 35682, 35689, 35739, 35921, 35995, 35999, 36052, 36054, 33042, 33073, 33078, 33119, 33133, 33149, 33171, 33194, 33208, 33217, 33321, 33325, 33326, 33342, 33378, 33386, 33416 }; static const uchar ucs_to_big5[][2] = { {0x00,0x00},{0x00,0x01},{0x00,0x02},{0x00,0x03},{0x00,0x04}, {0x00,0x05},{0x00,0x06},{0x00,0x07},{0x00,0x08},{0x00,0x09}, {0x00,0x0a},{0x00,0x0b},{0x00,0x0c},{0x00,0x0d},{0x00,0x0e}, {0x00,0x0f},{0x00,0x10},{0x00,0x11},{0x00,0x12},{0x00,0x13}, {0x00,0x14},{0x00,0x15},{0x00,0x16},{0x00,0x17},{0x00,0x18}, {0x00,0x19},{0x00,0x1a},{0x00,0x1b},{0x00,0x1c},{0x00,0x1d}, {0x00,0x1e},{0x00,0x1f},{0x00,0x20},{0x00,0x21},{0x00,0x22}, {0x00,0x23},{0x00,0x24},{0x00,0x25},{0x00,0x26},{0x00,0x27}, {0x00,0x28},{0x00,0x29},{0x00,0x2a},{0x00,0x2b},{0x00,0x2c}, {0x00,0x2d},{0x00,0x2e},{0x00,0x2f},{0x00,0x30},{0x00,0x31}, {0x00,0x32},{0x00,0x33},{0x00,0x34},{0x00,0x35},{0x00,0x36}, {0x00,0x37},{0x00,0x38},{0x00,0x39},{0x00,0x3a},{0x00,0x3b}, {0x00,0x3c},{0x00,0x3d},{0x00,0x3e},{0x00,0x3f},{0x00,0x40}, {0x00,0x41},{0x00,0x42},{0x00,0x43},{0x00,0x44},{0x00,0x45}, {0x00,0x46},{0x00,0x47},{0x00,0x48},{0x00,0x49},{0x00,0x4a}, {0x00,0x4b},{0x00,0x4c},{0x00,0x4d},{0x00,0x4e},{0x00,0x4f}, {0x00,0x50},{0x00,0x51},{0x00,0x52},{0x00,0x53},{0x00,0x54}, {0x00,0x55},{0x00,0x56},{0x00,0x57},{0x00,0x58},{0x00,0x59}, {0x00,0x5a},{0x00,0x5b},{0x00,0x5c},{0x00,0x5d},{0x00,0x5e}, {0x00,0x5f},{0x00,0x60},{0x00,0x61},{0x00,0x62},{0x00,0x63}, {0x00,0x64},{0x00,0x65},{0x00,0x66},{0x00,0x67},{0x00,0x68}, {0x00,0x69},{0x00,0x6a},{0x00,0x6b},{0x00,0x6c},{0x00,0x6d}, {0x00,0x6e},{0x00,0x6f},{0x00,0x70},{0x00,0x71},{0x00,0x72}, {0x00,0x73},{0x00,0x74},{0x00,0x75},{0x00,0x76},{0x00,0x77}, {0x00,0x78},{0x00,0x79},{0x00,0x7a},{0x00,0x7b},{0x00,0x7c}, {0x00,0x7d},{0x00,0x7e},{0x00,0x7f},{0x00,0x80},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa0,0xdf},{0xa2,0x46},{0xa2,0x47},{0xa0,0xfc}, {0xa2,0x44},{0x7c,0x20},{0xa1,0xb1},{0xc6,0xd8},{0x63,0x20}, {0xa0,0xde},{0x00,0x00},{0x00,0x00},{0x2d,0x20},{0x97,0xfb}, {0xa1,0xc2},{0xa2,0x58},{0xa1,0xd3},{0x32,0x20},{0x33,0x20}, {0xa1,0xac},{0xa3,0x67},{0x91,0xf8},{0xa1,0x50},{0xa0,0xfb}, {0x31,0x20},{0xa0,0xee},{0x00,0x00},{0xfe,0xb3},{0xfe,0xb0}, {0xfe,0xb4},{0xa0,0xef},{0xa0,0xa7},{0xa0,0xac},{0xa0,0xf6}, {0xa0,0xbe},{0xa0,0xb6},{0xa0,0xd6},{0xa0,0xbb},{0xa0,0xbc}, {0xa0,0xa8},{0xa0,0xd7},{0xa0,0xf7},{0xa0,0xb7},{0xa0,0xa9}, {0xa0,0xad},{0xa0,0xf8},{0xa0,0xb8},{0xa0,0xda},{0xa0,0xbd}, {0xa0,0xaa},{0xa0,0xae},{0xa0,0xf9},{0xa0,0xbf},{0xa0,0xb9}, {0xa1,0xd1},{0xa0,0xd9},{0xa0,0xab},{0xa0,0xaf},{0xa0,0xfa}, {0xa0,0xba},{0x59,0x20},{0xa0,0xdc},{0xa0,0xdd},{0xa0,0xe0}, {0xa0,0xc0},{0xa0,0xf0},{0xa0,0xce},{0xa0,0xc6},{0xa0,0xe6}, {0xa0,0xcb},{0xa0,0xcc},{0xa0,0xe1},{0xa0,0xc1},{0xa0,0xf1}, {0xa0,0xc7},{0xa0,0xe2},{0xa0,0xc2},{0xa0,0xf2},{0xa0,0xc8}, {0xa0,0xea},{0xa0,0xcd},{0xa0,0xe3},{0xa0,0xc3},{0xa0,0xf3}, {0xa0,0xcf},{0xa0,0xc9},{0xa1,0xd2},{0xa0,0xe9},{0xa0,0xe4}, {0xa0,0xc4},{0xa0,0xf4},{0xa0,0xca},{0x79,0x20},{0xa0,0xec}, {0xa0,0xed},{0x00,0x00},{0xa0,0xb0},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa0,0xb1},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0xd1},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0xb2}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9b,0xd5},{0x00,0x00},{0x00,0x00},{0xa0,0xb3},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xe5}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0xb4},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa0,0xfe},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa0,0xd0},{0x00,0x00},{0xa0,0xd2}, {0x00,0x00},{0xa0,0xd3},{0x00,0x00},{0xa0,0xd4},{0x00,0x00}, {0xa0,0xb5},{0x00,0x00},{0xa0,0xc5},{0x00,0x00},{0xa0,0xd5}, {0x00,0x00},{0xa0,0xe5},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xcb},{0x9b,0xe6}, {0x00,0x00},{0x9b,0xcc},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9b,0xcf},{0x9b,0xd0},{0x9b,0xc8},{0x9b,0xd1}, {0x9b,0xce},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xd2}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xc7},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xe0},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xd7}, {0x00,0x00},{0x00,0x00},{0x9b,0xe1},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xd9},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9b,0xe2},{0x00,0x00},{0x00,0x00}, {0x9b,0xcd},{0x00,0x00},{0x9b,0xca},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xda},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9b,0xdc},{0x00,0x00},{0x00,0x00},{0x9b,0xdb}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc6,0xd9},{0xa3,0xbe},{0x00,0x00},{0xa3,0xbc},{0xa3,0xbd}, {0xa3,0xbf},{0x00,0x00},{0xa1,0xc5},{0x00,0x00},{0x9b,0xe9}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa3,0xbb}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa3,0x44},{0xa3,0x45}, {0xa3,0x46},{0xa3,0x47},{0xa3,0x48},{0xa3,0x49},{0xa3,0x4a}, {0xa3,0x4b},{0xa3,0x4c},{0xa3,0x4d},{0xa3,0x4e},{0xa3,0x4f}, {0xa3,0x50},{0xa3,0x51},{0xa3,0x52},{0xa3,0x53},{0xa3,0x54}, {0x00,0x00},{0xa3,0x55},{0xa3,0x56},{0xa3,0x57},{0xa3,0x58}, {0xa3,0x59},{0xa3,0x5a},{0xa3,0x5b},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa3,0x5c},{0xa3,0x5d},{0xa3,0x5e},{0xa3,0x5f},{0xa3,0x60}, {0xa3,0x61},{0xa3,0x62},{0xa3,0x63},{0xa3,0x64},{0xa3,0x65}, {0xa3,0x66},{0xa3,0x67},{0xa3,0x68},{0xa3,0x69},{0xa3,0x6a}, {0xa3,0x6b},{0xa3,0x6c},{0x00,0x00},{0xa3,0x6d},{0xa3,0x6e}, {0xa3,0x6f},{0xa3,0x70},{0xa3,0x71},{0xa3,0x72},{0xa3,0x73}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc7,0xf9},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc7,0xf3},{0xc7,0xf4},{0xc7,0xf5},{0xc7,0xf6},{0xc7,0xf7}, {0xc7,0xf8},{0xc7,0xfa},{0xc7,0xfb},{0xc7,0xfc},{0xc7,0xfd}, {0xc7,0xfe},{0xc8,0x40},{0xc8,0x41},{0xc8,0x42},{0xc8,0x43}, {0xc8,0x44},{0xc8,0x45},{0xc8,0x46},{0xc8,0x47},{0xc8,0x48}, {0xc8,0x49},{0xc8,0x4a},{0xc8,0x4b},{0xc8,0x4c},{0xc8,0x4d}, {0xc8,0x4e},{0xc8,0x4f},{0xc8,0x50},{0xc8,0x51},{0xc8,0x52}, {0xc8,0x53},{0xc8,0x54},{0xc8,0x55},{0xc8,0x56},{0xc8,0x57}, {0xc8,0x58},{0xc8,0x59},{0xc8,0x5a},{0xc8,0x5c},{0xc8,0x5d}, {0xc8,0x5e},{0xc8,0x5f},{0xc8,0x60},{0xc8,0x61},{0xc8,0x62}, {0xc8,0x63},{0xc8,0x64},{0xc8,0x65},{0xc8,0x66},{0xc8,0x67}, {0xc8,0x68},{0xc8,0x69},{0xc8,0x6a},{0xc8,0x6b},{0xc8,0x6c}, {0xc8,0x6d},{0xc8,0x6e},{0xc8,0x6f},{0xc8,0x70},{0xc8,0x71}, {0xc8,0x72},{0xc8,0x73},{0xc8,0x74},{0xc8,0x75},{0x00,0x00}, {0xc8,0x5b},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xd6}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9b,0xd3},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9b,0xd4},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa0,0xdb},{0xa0,0xeb},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9f,0xec},{0x00,0x00}, {0x00,0x00},{0xa1,0x56},{0xa1,0x58},{0xa2,0x77},{0xa1,0xfc}, {0x00,0x00},{0xa1,0xa5},{0xa1,0xa6},{0x00,0x00},{0x00,0x00}, {0xa1,0xa7},{0xa1,0xa8},{0x00,0x00},{0x00,0x00},{0xa1,0xcf}, {0x91,0xde},{0xa1,0x45},{0x00,0x00},{0xa3,0xbb},{0xa1,0x4c}, {0xa1,0x4b},{0xa1,0x45},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfe,0xe2},{0x00,0x00},{0xa1,0xac},{0xa1,0xb2},{0x00,0x00}, {0xa1,0xab},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xb0},{0x91,0xf7},{0x00,0x00},{0xa1,0xc3}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa3,0xe1}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa2,0x4a},{0x00,0x00},{0xa1,0xc1},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa2,0x4b},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9d,0xcf},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0xe2},{0x00,0x00}, {0x00,0x00},{0x9d,0xc9},{0x97,0xfc},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x96,0x52},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9d,0xc8},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xfe,0xb1},{0xfe,0xb2},{0xfe,0xb5},{0xfe,0xb6}, {0xfe,0xb7},{0xfe,0xb8},{0xfe,0xb9},{0xfe,0xba},{0xfe,0xc1}, {0xfe,0xc2},{0xfe,0xc3},{0xfe,0xc4},{0x00,0x00},{0xa2,0xb9}, {0xa2,0xba},{0xa2,0xbb},{0xa2,0xbc},{0xa2,0xbd},{0xa2,0xbe}, {0xa2,0xbf},{0xa2,0xc0},{0xa2,0xc1},{0xa2,0xc2},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc6,0xb5},{0xc6,0xb6},{0xc6,0xb7},{0xc6,0xb8},{0xc6,0xb9}, {0xc6,0xba},{0xc6,0xbb},{0xc6,0xbc},{0xc6,0xbd},{0xc6,0xbe}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0xf6},{0xa1,0xf4},{0xa1,0xf7}, {0xa1,0xf5},{0x91,0xfb},{0x91,0xf6},{0xa1,0xf8},{0xa1,0xf9}, {0xa1,0xfb},{0xa1,0xfa},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x91,0xfa},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9d,0xfd},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xc8,0x77},{0xc8,0x78},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x96,0x53},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x99,0x65},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0x4a},{0xc8,0x76}, {0x9d,0x49},{0x9d,0x4c},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x91,0xf9}, {0x00,0x00},{0xa0,0x79},{0x98,0xf9},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xbe},{0x91,0x6b},{0x00,0x00},{0x00,0x00}, {0x91,0x5f},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa3,0x53}, {0x00,0x00},{0xa3,0x55},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa2,0x41},{0xa2,0x42},{0x00,0x00},{0xa2,0x58},{0x00,0x00}, {0xa1,0xd4},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa1,0xdb}, {0xa1,0xe8},{0xa1,0xe7},{0x00,0x00},{0x00,0x00},{0xa1,0xfd}, {0x00,0x00},{0xa1,0xfc},{0x00,0x00},{0xa3,0x4e},{0xa2,0xe4}, {0xa1,0xe4},{0xa1,0xe5},{0xa1,0xec},{0x9f,0x4c},{0x00,0x00}, {0xa1,0xed},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xef},{0xa1,0xee},{0xa1,0x47},{0x9f,0x46}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xdc},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa1,0xda},{0xa1,0xdd},{0x00,0x00},{0xa1,0xdd},{0x00,0x00}, {0x00,0x00},{0xa1,0xd8},{0xa1,0xd9},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9a,0xe0}, {0x9a,0xa6},{0x00,0x00},{0x00,0x00},{0x9c,0x72},{0x9c,0xaa}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa1,0xf2},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0xf3},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa1,0xe6}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa1,0xe9},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x91,0xfc},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0x5b},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfe,0xd9},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa3,0xc0},{0xa3,0xc1},{0xa3,0xc2},{0xa3,0xc3}, {0xa3,0xc4},{0xa3,0xc5},{0xa3,0xc6},{0xa3,0xc7},{0xa3,0xc8}, {0xa3,0xc9},{0xa3,0xca},{0xa3,0xcb},{0xa3,0xcc},{0xa3,0xcd}, {0xa3,0xce},{0xa3,0xcf},{0xa3,0xd0},{0xa3,0xd1},{0xa3,0xd2}, {0xa3,0xd3},{0xa3,0xd4},{0xa3,0xd5},{0xa3,0xd6},{0xa3,0xd7}, {0xa3,0xd8},{0xa3,0xd9},{0xa3,0xda},{0xa3,0xdb},{0xa3,0xdc}, {0xa3,0xdd},{0xa3,0xde},{0xa3,0xdf},{0x00,0x00},{0xa3,0xe0}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xc6,0xa1},{0xc6,0xa2},{0xc6,0xa3}, {0xc6,0xa4},{0xc6,0xa5},{0xc6,0xa6},{0xc6,0xa7},{0xc6,0xa8}, {0xc6,0xa9},{0xc6,0xaa},{0x97,0x4b},{0x97,0x4c},{0x97,0x4d}, {0x97,0x4e},{0x97,0x4f},{0x97,0x50},{0x97,0x51},{0x97,0x52}, {0x97,0x53},{0x97,0x54},{0xc6,0xab},{0xc6,0xac},{0xc6,0xad}, {0xc6,0xae},{0xc6,0xaf},{0xc6,0xb0},{0xc6,0xb1},{0xc6,0xb2}, {0xc6,0xb3},{0xc6,0xb4},{0x99,0x4b},{0x99,0x4c},{0x99,0x4d}, {0x99,0x4e},{0x99,0x4f},{0x99,0x50},{0x99,0x51},{0x99,0x52}, {0x99,0x53},{0x99,0x54},{0x9a,0x41},{0x9a,0x42},{0x9a,0x43}, {0x9a,0x44},{0x9a,0x45},{0x9a,0x46},{0x9a,0x47},{0x9a,0x48}, {0x9a,0x49},{0x9a,0x4a},{0x9a,0x4b},{0x9a,0x4c},{0x9a,0x4d}, {0x9a,0x4e},{0x9a,0x4f},{0x9a,0x50},{0x9a,0x51},{0x9a,0x52}, {0x9a,0x53},{0x9a,0x54},{0x99,0xe1},{0x99,0xe2},{0x99,0xe3}, {0x99,0xe4},{0x99,0xe5},{0x99,0xe6},{0x99,0xe7},{0x99,0xe8}, {0x99,0xe9},{0x99,0xea},{0x99,0xeb},{0x99,0xec},{0x99,0xed}, {0x99,0xee},{0x99,0xef},{0x99,0xf0},{0x99,0xf1},{0x99,0xf2}, {0x99,0xf3},{0x99,0xf4},{0x99,0xf5},{0x99,0xf6},{0x99,0xf7}, {0x99,0xf8},{0x99,0xf9},{0x99,0xfa},{0x97,0xc7},{0x97,0xc8}, {0x97,0xc9},{0x97,0xca},{0x97,0xcb},{0x97,0xcc},{0x97,0xcd}, {0x97,0xce},{0x97,0xcf},{0x97,0xd0},{0x97,0xd1},{0x97,0xd2}, {0x97,0xd3},{0x97,0xd4},{0x97,0xd5},{0x97,0xd6},{0x97,0xd7}, {0x97,0xd8},{0x97,0xd9},{0x97,0xda},{0x97,0xdb},{0x97,0xdc}, {0x97,0xdd},{0x97,0xde},{0x97,0xdf},{0x97,0xe0},{0x97,0xe1}, {0x97,0xe2},{0x97,0xe3},{0x97,0xe4},{0x97,0xe5},{0x97,0xe6}, {0x97,0xe7},{0x97,0xe8},{0x97,0xe9},{0x97,0xea},{0x97,0xeb}, {0x97,0xec},{0x97,0xed},{0x97,0xee},{0x97,0xef},{0x97,0xf0}, {0x97,0xf1},{0x97,0xf2},{0x97,0xf3},{0x97,0xf4},{0x97,0xf5}, {0x97,0xf6},{0x97,0xf7},{0x97,0xf8},{0x97,0xf9},{0x97,0xfa}, {0x97,0x40},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa2,0x77},{0x9d,0x7d},{0xa2,0x78}, {0x9d,0x7e},{0xa1,0x4c},{0xa1,0x4c},{0xa1,0x4a},{0xa1,0x4a}, {0xa1,0x4b},{0xa1,0x4b},{0xa1,0x55},{0xa1,0x55},{0xa2,0x7a}, {0xa2,0x7a},{0xa2,0x7a},{0xa2,0x7a},{0xa2,0x7b},{0xa2,0x7b}, {0xa2,0x7b},{0xa2,0x7b},{0xa2,0x7c},{0xa2,0x7c},{0xa2,0x7c}, {0xa2,0x7c},{0xa2,0x7d},{0xa2,0x7d},{0xa2,0x7d},{0xa2,0x7d}, {0xa2,0x75},{0xa2,0x75},{0xa2,0x75},{0xa2,0x75},{0xa2,0x75}, {0xa2,0x75},{0xa2,0x75},{0xa2,0x75},{0xa2,0x74},{0xa2,0x74}, {0xa2,0x74},{0xa2,0x74},{0xa2,0x74},{0xa2,0x74},{0xa2,0x74}, {0xa2,0x74},{0xa2,0x73},{0xa2,0x73},{0xa2,0x73},{0xa2,0x73}, {0xa2,0x73},{0xa2,0x73},{0xa2,0x73},{0xa2,0x73},{0xa2,0x72}, {0xa2,0x72},{0xa2,0x72},{0xa2,0x72},{0xa2,0x72},{0xa2,0x72}, {0xa2,0x72},{0xa2,0x72},{0xa2,0x71},{0xa2,0x71},{0xa2,0x71}, {0xa2,0x71},{0xa2,0x71},{0xa2,0x71},{0xa2,0x71},{0xa2,0x71}, {0xa2,0x71},{0xa2,0x71},{0xa2,0x71},{0xa2,0x71},{0xa2,0x71}, {0xa2,0x71},{0xa2,0x71},{0xa2,0x71},{0x00,0x00},{0x00,0x00}, {0x91,0xf0},{0x00,0x00},{0xf9,0xf9},{0xf9,0xf8},{0xf9,0xe6}, {0xf9,0xef},{0xf9,0xdd},{0xf9,0xe8},{0xf9,0xf1},{0xf9,0xdf}, {0xf9,0xec},{0xf9,0xf5},{0xf9,0xe3},{0xf9,0xee},{0xf9,0xf7}, {0xf9,0xe5},{0xf9,0xe9},{0xf9,0xf2},{0xf9,0xe0},{0xf9,0xeb}, {0xf9,0xf4},{0xf9,0xe2},{0xf9,0xe7},{0xf9,0xf0},{0xf9,0xde}, {0xf9,0xed},{0xf9,0xf6},{0xf9,0xe4},{0xf9,0xea},{0xf9,0xf3}, {0xf9,0xe1},{0xa2,0x7e},{0xa2,0xa1},{0xa2,0xa3},{0xa2,0xa2}, {0xa2,0xac},{0xa2,0xad},{0xa2,0xae},{0xa1,0x5a},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa2,0x62},{0xa2,0x63},{0xa2,0x64},{0xa2,0x65}, {0xa2,0x66},{0xa2,0x67},{0xa2,0x68},{0xa2,0x69},{0xa2,0x70}, {0xa2,0x6f},{0xa2,0x6e},{0xa2,0x6d},{0xa2,0x6c},{0xa2,0x6b}, {0xa2,0x6a},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xf9,0xfe}, {0xa2,0x76},{0xa2,0x79},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0xbd},{0xa1,0xbc},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa1,0xb6},{0xa1,0xb5},{0x00,0x00},{0x00,0x00},{0x91,0xf4}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa1,0xbf},{0xa1,0xbe},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x91,0xf5},{0x00,0x00}, {0xa1,0xbb},{0xa1,0xba},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa1,0xb3},{0x00,0x00},{0x00,0x00},{0xa1,0xb7},{0xa1,0xb4}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x91,0xf1},{0x91,0xf2}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa2,0xa8},{0xa2,0xa9}, {0xa2,0xab},{0xa2,0xaa},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xb3},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0xba}, {0x9d,0xbc},{0x00,0x00},{0x00,0x00},{0xa1,0xb9},{0xa1,0xb8}, {0x00,0x00},{0x00,0x00},{0xa1,0xf3},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9d,0x40},{0x00,0x00},{0x00,0x00}, {0x9d,0xed},{0x9c,0xd1},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9d,0x4f},{0x9d,0x4e},{0x00,0x00},{0x9d,0x4d},{0x9d,0x50}, {0x9d,0xd5},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9f,0x55},{0x9f,0x56},{0x9f,0x5d},{0x9f,0x5b},{0x9f,0x58}, {0x9f,0x59},{0x9f,0x5a},{0x9f,0x5c},{0x9f,0x57},{0x00,0x00}, {0x9d,0x5e},{0x9d,0x5d},{0x98,0xfc},{0x9d,0xb8},{0x9d,0x57}, {0x00,0x00},{0x00,0x00},{0xa1,0xf0},{0xa1,0xf2},{0xa1,0xf1}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0xd8}, {0x9d,0xdd},{0x9d,0xdb},{0x9d,0xda},{0x9d,0xd7},{0x9d,0xde}, {0x9d,0xdc},{0x9d,0xd9},{0x00,0x00},{0x00,0x00},{0x9d,0x66}, {0x00,0x00},{0x9d,0x65},{0xa2,0xea},{0x00,0x00},{0xa1,0xad}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9d,0x6c},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9d,0xc0},{0x9d,0x6b},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0x55},{0x00,0x00}, {0x9d,0x54},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9d,0x5c},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9d,0x5b},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc6,0xe6},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9d,0x77},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x98,0x41},{0x98,0x42},{0x98,0x43}, {0x98,0x44},{0x98,0x45},{0x98,0x46},{0x98,0x47},{0x98,0x48}, {0x98,0x49},{0x98,0x4a},{0xc6,0xa1},{0xc6,0xa2},{0xc6,0xa3}, {0xc6,0xa4},{0xc6,0xa5},{0xc6,0xa6},{0xc6,0xa7},{0xc6,0xa8}, {0xc6,0xa9},{0xc6,0xaa},{0x98,0x41},{0x98,0x42},{0x98,0x43}, {0x98,0x44},{0x98,0x45},{0x98,0x46},{0x98,0x47},{0x98,0x48}, {0x98,0x49},{0x98,0x4a},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x91,0xed}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9c,0xce},{0x00,0x00},{0x00,0x00},{0x9c,0xd5}, {0x00,0x00},{0x9c,0xd4},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9c,0xdb},{0x00,0x00},{0x91,0xdb},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x91,0xc9},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9c,0xf7},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xbf}, {0xc6,0xc0},{0x00,0x00},{0xc6,0xc1},{0x00,0x00},{0xc6,0xc2}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xc3}, {0xc6,0xc4},{0xc6,0xc5},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xc6,0xc6},{0x00,0x00},{0x00,0x00},{0xc6,0xc7}, {0x00,0x00},{0x00,0x00},{0xc6,0xc8},{0x00,0x00},{0xc6,0xc9}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xc6,0xca},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xc6,0xcb},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xcc},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xcd},{0xc6,0xce}, {0xc6,0xcf},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xd0}, {0xc6,0xd1},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xc6,0xd2},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xc6,0xd3},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc6,0xd4},{0xc6,0xd5},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xd6},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xc6,0xd7},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa1,0x40},{0xa1,0x42}, {0xa1,0x43},{0xa1,0xb2},{0x00,0x00},{0xc6,0xe0},{0xc6,0xe1}, {0xc6,0xe2},{0xa1,0x71},{0xa1,0x72},{0xa1,0x6d},{0xa1,0x6e}, {0xa1,0x75},{0xa1,0x76},{0xa1,0x79},{0xa1,0x7a},{0xa1,0x69}, {0xa1,0x6a},{0xa2,0x45},{0x96,0x5d},{0xa1,0x65},{0xa1,0x66}, {0x9d,0x51},{0x9d,0x52},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xe3},{0xa1,0xa9},{0xa1,0xaa},{0x00,0x00}, {0x00,0x00},{0xa2,0xc3},{0xa2,0xc4},{0xa2,0xc5},{0xa2,0xc6}, {0xa2,0xc7},{0xa2,0xc8},{0xa2,0xc9},{0xa2,0xca},{0xa2,0xcb}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0xca},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa2,0xcc}, {0xa2,0xcd},{0xa2,0xce},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc6,0xe7},{0xc6,0xe8}, {0xc6,0xe9},{0xc6,0xea},{0xc6,0xeb},{0xc6,0xec},{0xc6,0xed}, {0xc6,0xee},{0xc6,0xef},{0xc6,0xf0},{0xc6,0xf1},{0xc6,0xf2}, {0xc6,0xf3},{0xc6,0xf4},{0xc6,0xf5},{0xc6,0xf6},{0xc6,0xf7}, {0xc6,0xf8},{0xc6,0xf9},{0xc6,0xfa},{0xc6,0xfb},{0xc6,0xfc}, {0xc6,0xfd},{0xc6,0xfe},{0xc7,0x40},{0xc7,0x41},{0xc7,0x42}, {0xc7,0x43},{0xc7,0x44},{0xc7,0x45},{0xc7,0x46},{0xc7,0x47}, {0xc7,0x48},{0xc7,0x49},{0xc7,0x4a},{0xc7,0x4b},{0xc7,0x4c}, {0xc7,0x4d},{0xc7,0x4e},{0xc7,0x4f},{0xc7,0x50},{0xc7,0x51}, {0xc7,0x52},{0xc7,0x53},{0xc7,0x54},{0xc7,0x55},{0xc7,0x56}, {0xc7,0x57},{0xc7,0x58},{0xc7,0x59},{0xc7,0x5a},{0xc7,0x5b}, {0xc7,0x5c},{0xc7,0x5d},{0xc7,0x5e},{0xc7,0x5f},{0xc7,0x60}, {0xc7,0x61},{0xc7,0x62},{0xc7,0x63},{0xc7,0x64},{0xc7,0x65}, {0xc7,0x66},{0xc7,0x67},{0xc7,0x68},{0xc7,0x69},{0xc7,0x6a}, {0xc7,0x6b},{0xc7,0x6c},{0xc7,0x6d},{0xc7,0x6e},{0xc7,0x6f}, {0xc7,0x70},{0xc7,0x71},{0xc7,0x72},{0xc7,0x73},{0xc7,0x74}, {0xc7,0x75},{0xc7,0x76},{0xc7,0x77},{0xc7,0x78},{0xc7,0x79}, {0xc7,0x7a},{0xc8,0xb3},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc8,0xb1},{0xc8,0xb2}, {0xc6,0xdc},{0xc6,0xdd},{0x00,0x00},{0x00,0x00},{0xc7,0x7b}, {0xc7,0x7c},{0xc7,0x7d},{0xc7,0x7e},{0xc7,0xa1},{0xc7,0xa2}, {0xc7,0xa3},{0xc7,0xa4},{0xc7,0xa5},{0xc7,0xa6},{0xc7,0xa7}, {0xc7,0xa8},{0xc7,0xa9},{0xc7,0xaa},{0xc7,0xab},{0xc7,0xac}, {0xc7,0xad},{0xc7,0xae},{0xc7,0xaf},{0xc7,0xb0},{0xc7,0xb1}, {0xc7,0xb2},{0xc7,0xb3},{0xc7,0xb4},{0xc7,0xb5},{0xc7,0xb6}, {0xc7,0xb7},{0xc7,0xb8},{0xc7,0xb9},{0xc7,0xba},{0xc7,0xbb}, {0xc7,0xbc},{0xc7,0xbd},{0xc7,0xbe},{0xc7,0xbf},{0xc7,0xc0}, {0xc7,0xc1},{0xc7,0xc2},{0xc7,0xc3},{0xc7,0xc4},{0xc7,0xc5}, {0xc7,0xc6},{0xc7,0xc7},{0xc7,0xc8},{0xc7,0xc9},{0xc7,0xca}, {0xc7,0xcb},{0xc7,0xcc},{0xc7,0xcd},{0xc7,0xce},{0xc7,0xcf}, {0xc7,0xd0},{0xc7,0xd1},{0xc7,0xd2},{0xc7,0xd3},{0xc7,0xd4}, {0xc7,0xd5},{0xc7,0xd6},{0xc7,0xd7},{0xc7,0xd8},{0xc7,0xd9}, {0xc7,0xda},{0xc7,0xdb},{0xc7,0xdc},{0xc7,0xdd},{0xc7,0xde}, {0xc7,0xdf},{0xc7,0xe0},{0xc7,0xe1},{0xc7,0xe2},{0xc7,0xe3}, {0xc7,0xe4},{0xc7,0xe5},{0xc7,0xe6},{0xc7,0xe7},{0xc7,0xe8}, {0xc7,0xe9},{0xc7,0xea},{0xc7,0xeb},{0xc7,0xec},{0xc7,0xed}, {0xc7,0xee},{0xc7,0xef},{0xc7,0xf0},{0xc7,0xf1},{0xc7,0xf2}, {0xc8,0xb4},{0xc8,0xb5},{0xc8,0xb6},{0xc8,0xb7},{0xc8,0xb8}, {0xc6,0xe3},{0xc6,0xda},{0xc6,0xdb},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa3,0x74}, {0xa3,0x75},{0xa3,0x76},{0xa3,0x77},{0xa3,0x78},{0xa3,0x79}, {0xa3,0x7a},{0xa3,0x7b},{0xa3,0x7c},{0xa3,0x7d},{0xa3,0x7e}, {0xa3,0xa1},{0xa3,0xa2},{0xa3,0xa3},{0xa3,0xa4},{0xa3,0xa5}, {0xa3,0xa6},{0xa3,0xa7},{0xa3,0xa8},{0xa3,0xa9},{0xa3,0xaa}, {0xa3,0xab},{0xa3,0xac},{0xa3,0xad},{0xa3,0xae},{0xa3,0xaf}, {0xa3,0xb0},{0xa3,0xb1},{0xa3,0xb2},{0xa3,0xb3},{0xa3,0xb4}, {0xa3,0xb5},{0xa3,0xb6},{0xa3,0xb7},{0xa3,0xb8},{0xa3,0xb9}, {0xa3,0xba},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xa4,0x40},{0xa4,0x47},{0xa4,0x54},{0xa5,0x7c},{0xa4,0x57}, {0xa4,0xa4},{0xa4,0x55},{0xa5,0xd2},{0xa4,0x41},{0xa4,0xfe}, {0xa4,0x42},{0xa4,0xd1},{0xa6,0x61},{0xa4,0x48},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xc8,0x79},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9c,0x41},{0x9c,0x42},{0x9c,0x43}, {0x9c,0x44},{0x9c,0x45},{0x9c,0x46},{0x9c,0x47},{0x9c,0x48}, {0x9c,0x49},{0x9c,0x4a},{0xa4,0xeb},{0xa4,0xf5},{0xa4,0xf4}, {0xa4,0xec},{0xaa,0xf7},{0xa4,0x67},{0xa4,0xe9},{0x99,0xfd}, {0x99,0xfc},{0xaa,0xc0},{0xa6,0x57},{0xaf,0x53},{0xb0,0x5d}, {0xaf,0xac},{0xb3,0xd2},{0xa5,0x4e},{0xa9,0x49},{0xbe,0xc7}, {0xba,0xca},{0xa5,0xf8},{0xb8,0xea},{0xa8,0xf3},{0xb2,0xbd}, {0xa5,0xf0},{0xa6,0xdb},{0xa6,0xdc},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa4,0x40},{0xa4,0x47}, {0xa4,0x54},{0xa5,0x7c},{0xa4,0xad},{0xa4,0xbb},{0xa4,0x43}, {0xa4,0x4b},{0xa4,0x45},{0xa4,0x51},{0xa4,0xeb},{0xa4,0xf5}, {0xa4,0xf4},{0xa4,0xec},{0xaa,0xf7},{0xa4,0x67},{0xa4,0xe9}, {0xae,0xe8},{0xa6,0xb3},{0xaa,0xc0},{0xa6,0x57},{0xaf,0x53}, {0xb0,0x5d},{0xaf,0xac},{0xb3,0xd2},{0xaf,0xb5},{0xa8,0x6b}, {0xa4,0x6b},{0xbe,0x41},{0xc0,0x75},{0xa6,0x4c},{0xaa,0x60}, {0xb6,0xb5},{0xa5,0xf0},{0xbc,0x67},{0xa1,0xc0},{0xa4,0x57}, {0xa4,0xa4},{0xa4,0x55},{0xa5,0xaa},{0xa5,0x6b},{0xc2,0xe5}, {0xa9,0x76},{0xbe,0xc7},{0xba,0xca},{0xa5,0xf8},{0xb8,0xea}, {0xa8,0xf3},{0xa9,0x5d},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x48,0x67}, {0x00,0x00},{0x65,0x56},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x64,0x61},{0x41,0x55},{0x00,0x00},{0x6f,0x56},{0x70,0x63}, {0x64,0x6d},{0x00,0x00},{0x00,0x00},{0x49,0x55},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x70,0x41}, {0x6e,0x41},{0x00,0x00},{0x6d,0x41},{0x6b,0x41},{0x4b,0x42}, {0x4d,0x42},{0x47,0x42},{0x00,0x00},{0x00,0x00},{0x70,0x46}, {0x6e,0x46},{0x00,0x00},{0x00,0x00},{0xa2,0x55},{0xa2,0x56}, {0x48,0x7a},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x66,0x6d}, {0x6e,0x6d},{0x00,0x00},{0xa2,0x50},{0xa2,0x51},{0xa2,0x52}, {0x00,0x00},{0x00,0x00},{0xa2,0x54},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x9d,0xe7},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x50,0x61},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x70,0x73},{0x6e,0x73},{0x00,0x00}, {0x6d,0x73},{0x70,0x56},{0x6e,0x56},{0x00,0x00},{0x6d,0x56}, {0x6b,0x56},{0x4d,0x56},{0x70,0x57},{0x6e,0x57},{0x00,0x00}, {0x6d,0x57},{0x6b,0x57},{0x4d,0x57},{0x00,0x00},{0x00,0x00}, {0x9d,0xe3},{0x42,0x71},{0xa2,0x57},{0x63,0x64},{0x00,0x00}, {0x00,0x00},{0x64,0x42},{0x47,0x79},{0x68,0x61},{0x48,0x50}, {0x69,0x6e},{0x4b,0x4b},{0xa2,0x53},{0x6b,0x74},{0x6c,0x6d}, {0xa1,0xeb},{0xa1,0xea},{0x6c,0x78},{0x6d,0x62},{0xa2,0x4f}, {0x00,0x00},{0x50,0x48},{0x9d,0xe4},{0x00,0x00},{0x50,0x52}, {0x73,0x72},{0x53,0x76},{0x57,0x62},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x91,0xe0},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0xa2},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfb,0x44},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x95,0xb8}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0x48}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0x4c},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xfb,0xdf},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xfb,0xe5},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xfb,0x6f},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x95,0x42}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfe,0x7d},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfe,0x67},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x95,0x5e},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x95,0xde},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x95,0xc7},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfc,0x61},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x95,0xc9},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfc,0x7c}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfc,0xa8},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfe,0x71}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfc,0xc2},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xfe,0x4d},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x96,0xad},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9c,0xd3},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xfd,0x5e},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xfe,0x4a},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfd,0x67}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfb,0xb0},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfb,0x7d},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xfd,0xe3},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfd,0xf1},{0x00,0x00},{0x00,0x00},{0xfd,0xef},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xfd,0xf2},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xfb,0x45},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa4,0x40},{0xa4,0x42}, {0x00,0x00},{0xa4,0x43},{0x98,0xa7},{0x00,0x00},{0x91,0xd7}, {0xc9,0x45},{0xa4,0x56},{0xa4,0x54},{0xa4,0x57},{0xa4,0x55}, {0xc9,0x46},{0xa4,0xa3},{0xc9,0x4f},{0xc9,0x4d},{0xa4,0xa2}, {0xa4,0xa1},{0x00,0x00},{0x83,0xfd},{0xa5,0x42},{0xa5,0x41}, {0xa5,0x40},{0x81,0x40},{0xa5,0x43},{0xa4,0xfe},{0x85,0xd2}, {0x8a,0xbd},{0x83,0x5b},{0x85,0x46},{0xa5,0xe0},{0xa5,0xe1}, {0x00,0x00},{0x93,0xe5},{0x81,0x41},{0x00,0x00},{0x83,0x55}, {0x8b,0xf2},{0xa8,0xc3},{0x84,0xca},{0x9c,0xc9},{0x00,0x00}, {0x83,0xaa},{0xa4,0x58},{0x81,0x42},{0xa4,0xa4},{0xc9,0x50}, {0x98,0xa8},{0xa4,0xa5},{0xc9,0x63},{0xa6,0xea},{0xcb,0xb1}, {0x8a,0x5a},{0x00,0x00},{0xc6,0xbf},{0x91,0xcc},{0xa4,0x59}, {0xa4,0xa6},{0x83,0x6f},{0xa5,0x44},{0xc9,0x64},{0x8b,0xed}, {0x8a,0x5b},{0xc6,0xc0},{0x00,0x00},{0x00,0x00},{0xc9,0x40}, {0xa4,0x44},{0x94,0xf2},{0xa4,0x5b},{0x00,0x00},{0xc9,0x47}, {0xa4,0x5c},{0x85,0xf3},{0x00,0x00},{0xa4,0xa7},{0x83,0xbf}, {0xa5,0x45},{0xa5,0x47},{0xa5,0x46},{0x87,0xe4},{0x00,0x00}, {0xa5,0xe2},{0xa5,0xe3},{0x84,0xce},{0x81,0x43},{0xa8,0xc4}, {0x92,0xe9},{0xad,0xbc},{0xa4,0x41},{0x9c,0xdf},{0x9c,0xe8}, {0xc9,0x41},{0xa4,0x45},{0xa4,0x5e},{0xa4,0x5d},{0x84,0x74}, {0x85,0x70},{0x81,0x44},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x83,0xbc},{0x00,0x00},{0x00,0x00},{0xa5,0xe4},{0xfe,0x41}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x85,0x67},{0x85,0xaf},{0x00,0x00},{0xa8,0xc5},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa0,0x61},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xb0,0xae}, {0xd4,0x4b},{0x93,0xfa},{0x98,0xa9},{0xb6,0xc3},{0xdc,0xb1}, {0xdc,0xb2},{0xc6,0xc1},{0xa4,0x46},{0x98,0xaa},{0xa4,0xa9}, {0x83,0x5c},{0x81,0x45},{0xa8,0xc6},{0xa4,0x47},{0xc9,0x48}, {0xa4,0x5f},{0x8a,0x5f},{0x00,0x00},{0xa4,0xaa},{0xa4,0xac}, {0xc9,0x51},{0xa4,0xad},{0xa4,0xab},{0x00,0x00},{0x00,0x00}, {0xfe,0x62},{0xa5,0xe5},{0x83,0x52},{0xa8,0xc7},{0x92,0x40}, {0x00,0x00},{0xa8,0xc8},{0xab,0x45},{0xc6,0xc2},{0xa4,0x60}, {0xa4,0xae},{0x98,0xab},{0xa5,0xe6},{0xa5,0xe8},{0xa5,0xe7}, {0x84,0x64},{0xa6,0xeb},{0x83,0xc2},{0x00,0x00},{0xa8,0xc9}, {0xa8,0xca},{0xab,0x46},{0xab,0x47},{0x00,0x00},{0x81,0x46}, {0x00,0x00},{0x89,0x5d},{0xad,0xbd},{0x00,0x00},{0x8a,0x62}, {0xdc,0xb3},{0x98,0xac},{0x00,0x00},{0xf6,0xd6},{0xa4,0x48}, {0x9c,0xf4},{0x98,0xad},{0x00,0x00},{0x00,0x00},{0x87,0xa3}, {0xa4,0xb0},{0xa4,0xaf},{0xc9,0x52},{0xa4,0xb1},{0xa4,0xb7}, {0x85,0xb2},{0xa4,0xb2},{0xa4,0xb3},{0xc9,0x54},{0xc9,0x53}, {0xa4,0xb5},{0xa4,0xb6},{0x00,0x00},{0xa4,0xb4},{0x84,0x47}, {0x93,0xc2},{0x00,0x00},{0x83,0x54},{0x00,0x00},{0x83,0xac}, {0xa5,0x4a},{0xa5,0x4b},{0xa5,0x4c},{0xa5,0x4d},{0xa5,0x49}, {0xa5,0x50},{0xc9,0x6a},{0x00,0x00},{0xc9,0x66},{0xc9,0x69}, {0xa5,0x51},{0xa5,0x61},{0x00,0x00},{0xc9,0x68},{0x00,0x00}, {0xa5,0x4e},{0xa5,0x4f},{0xa5,0x48},{0x00,0x00},{0x00,0x00}, {0xc9,0x65},{0xc9,0x67},{0x87,0xa4},{0x81,0x47},{0x83,0xa8}, {0x81,0x48},{0x92,0x54},{0x00,0x00},{0xa5,0xf5},{0xc9,0xb0}, {0xa5,0xf2},{0xa5,0xf6},{0xc9,0xba},{0xc9,0xae},{0xa5,0xf3}, {0xc9,0xb2},{0x98,0xae},{0x00,0x00},{0x00,0x00},{0xa5,0xf4}, {0x81,0x49},{0xa5,0xf7},{0x00,0x00},{0xa5,0xe9},{0xc9,0xb1}, {0xa5,0xf8},{0xc9,0xb5},{0xfb,0xba},{0xc9,0xb9},{0xc9,0xb6}, {0x00,0x00},{0x00,0x00},{0xc9,0xb3},{0xa5,0xea},{0xa5,0xec}, {0xa5,0xf9},{0x00,0x00},{0xa5,0xee},{0xc9,0xab},{0xa5,0xf1}, {0xa5,0xef},{0xa5,0xf0},{0xc9,0xbb},{0xc9,0xb8},{0xc9,0xaf}, {0xa5,0xed},{0x00,0x00},{0x84,0x67},{0xc9,0xac},{0xa5,0xeb}, {0x85,0xd1},{0x8d,0xfd},{0x81,0x4a},{0xc9,0xb4},{0x84,0xc4}, {0x83,0xec},{0x85,0xb1},{0x00,0x00},{0xc9,0xb7},{0x00,0x00}, {0x85,0xb4},{0x83,0xa9},{0x83,0xab},{0x84,0xc3},{0x98,0xaf}, {0x98,0xb0},{0x83,0xeb},{0x83,0x43},{0xc9,0xad},{0xca,0x66}, {0x00,0x00},{0xa7,0x42},{0xa6,0xf4},{0x00,0x00},{0xfb,0xbd}, {0xca,0x67},{0xa6,0xf1},{0x00,0x00},{0xa7,0x44},{0x98,0xb1}, {0xa6,0xf9},{0xfb,0xbc},{0xa6,0xf8},{0xca,0x5b},{0xa6,0xfc}, {0xa6,0xf7},{0xca,0x60},{0xca,0x68},{0x00,0x00},{0xca,0x64}, {0x98,0xb2},{0xa6,0xfa},{0x00,0x00},{0x98,0xb3},{0xa6,0xfd}, {0xa6,0xee},{0xa7,0x47},{0xca,0x5d},{0x00,0x00},{0x98,0xb4}, {0xcb,0xbd},{0xa6,0xec},{0xa7,0x43},{0xa6,0xed},{0xa6,0xf5}, {0xa6,0xf6},{0xca,0x62},{0xca,0x5e},{0xa6,0xfb},{0xa6,0xf3}, {0xca,0x5a},{0xa6,0xef},{0xca,0x65},{0xa7,0x45},{0xa7,0x48}, {0xa6,0xf2},{0xa7,0x40},{0xa7,0x46},{0xa6,0xf0},{0xca,0x63}, {0xa7,0x41},{0xca,0x69},{0xca,0x5c},{0xa6,0xfe},{0xca,0x5f}, {0x8e,0x40},{0x00,0x00},{0xca,0x61},{0x00,0x00},{0xa8,0xd8}, {0xcb,0xbf},{0xcb,0xcb},{0xa8,0xd0},{0x00,0x00},{0xcb,0xcc}, {0xa8,0xcb},{0xa8,0xd5},{0x00,0x00},{0x98,0xb5},{0xa8,0xce}, {0xcb,0xb9},{0xa8,0xd6},{0xcb,0xb8},{0xcb,0xbc},{0xcb,0xc3}, {0xcb,0xc1},{0xa8,0xde},{0xa8,0xd9},{0xcb,0xb3},{0xcb,0xb5}, {0xa8,0xdb},{0xa8,0xcf},{0xcb,0xb6},{0xcb,0xc2},{0xcb,0xc9}, {0xa8,0xd4},{0xcb,0xbb},{0xcb,0xb4},{0xa8,0xd3},{0xcb,0xb7}, {0xa8,0xd7},{0xcb,0xba},{0x81,0x4b},{0xa8,0xd2},{0x00,0x00}, {0xa8,0xcd},{0x00,0x00},{0xa8,0xdc},{0xcb,0xc4},{0xa8,0xdd}, {0xcb,0xc8},{0x00,0x00},{0xcb,0xc6},{0xcb,0xca},{0xa8,0xda}, {0xcb,0xbe},{0xcb,0xb2},{0x00,0x00},{0xcb,0xc0},{0xa8,0xd1}, {0xcb,0xc5},{0xa8,0xcc},{0xcb,0xc7},{0x00,0x00},{0x83,0x65}, {0x92,0x55},{0x98,0xb6},{0x83,0x66},{0x00,0x00},{0x86,0xab}, {0x83,0xed},{0x83,0xee},{0x86,0xac},{0x87,0xa7},{0x88,0xca}, {0xfb,0xbe},{0x87,0xa6},{0x82,0x7d},{0xab,0x56},{0xab,0x4a}, {0x98,0xb7},{0x00,0x00},{0xcd,0xe0},{0xcd,0xe8},{0x98,0xf7}, {0xab,0x49},{0xab,0x51},{0xab,0x5d},{0x00,0x00},{0xcd,0xee}, {0xcd,0xec},{0xcd,0xe7},{0x00,0x00},{0x98,0xb8},{0x00,0x00}, {0xab,0x4b},{0xcd,0xed},{0xcd,0xe3},{0xab,0x59},{0xab,0x50}, {0xab,0x58},{0xcd,0xde},{0x00,0x00},{0xcd,0xea},{0x98,0xb9}, {0xcd,0xe1},{0xab,0x54},{0xcd,0xe2},{0x98,0xba},{0xcd,0xdd}, {0xab,0x5b},{0xab,0x4e},{0xab,0x57},{0xab,0x4d},{0x00,0x00}, {0xcd,0xdf},{0xcd,0xe4},{0x00,0x00},{0xcd,0xeb},{0xab,0x55}, {0xab,0x52},{0xcd,0xe6},{0xab,0x5a},{0xcd,0xe9},{0xcd,0xe5}, {0xab,0x4f},{0xab,0x5c},{0xab,0x53},{0xab,0x4c},{0xab,0x48}, {0x00,0x00},{0x8d,0xb9},{0x94,0x5f},{0x94,0x60},{0x88,0xc8}, {0x00,0x00},{0x8c,0xc8},{0x83,0xa7},{0x8c,0x6c},{0x00,0x00}, {0xcd,0xef},{0x87,0xa8},{0xad,0xd7},{0xad,0xc1},{0x98,0xbb}, {0xad,0xd1},{0x98,0xbc},{0xad,0xd6},{0xd0,0xd0},{0xd0,0xcf}, {0xd0,0xd4},{0xd0,0xd5},{0xad,0xc4},{0x98,0xbd},{0xad,0xcd}, {0x00,0x00},{0x00,0x00},{0xfe,0x7b},{0xad,0xda},{0x81,0x4c}, {0xad,0xce},{0x00,0x00},{0x00,0x00},{0x98,0xbe},{0x00,0x00}, {0xd0,0xc9},{0xad,0xc7},{0xd0,0xca},{0x98,0xbf},{0xad,0xdc}, {0x00,0x00},{0xad,0xd3},{0xad,0xbe},{0xad,0xbf},{0xd0,0xdd}, {0xb0,0xbf},{0x00,0x00},{0xad,0xcc},{0xad,0xcb},{0xd0,0xcb}, {0xad,0xcf},{0xd4,0x5b},{0xad,0xc6},{0xd0,0xd6},{0xad,0xd5}, {0xad,0xd4},{0xad,0xca},{0xd0,0xce},{0xd0,0xd7},{0x00,0x00}, {0xd0,0xc8},{0xad,0xc9},{0xd0,0xd8},{0xad,0xd2},{0xd0,0xcc}, {0xad,0xc0},{0x82,0xa9},{0xad,0xc3},{0xad,0xc2},{0xd0,0xd9}, {0xad,0xd0},{0xad,0xc5},{0xad,0xd9},{0xad,0xdb},{0xd0,0xd3}, {0xad,0xd8},{0xfb,0xc1},{0xd0,0xdb},{0xd0,0xcd},{0xd0,0xdc}, {0x00,0x00},{0xd0,0xd1},{0x98,0xc0},{0xd0,0xda},{0x82,0xa3}, {0xd0,0xd2},{0x00,0x00},{0x92,0xb2},{0x85,0xb0},{0x98,0xc1}, {0xad,0xc8},{0x00,0x00},{0x85,0xb3},{0x00,0x00},{0xd4,0x63}, {0xd4,0x57},{0x81,0x4d},{0xb0,0xb3},{0x00,0x00},{0xd4,0x5c}, {0xd4,0x62},{0xb0,0xb2},{0xd4,0x55},{0xb0,0xb6},{0xd4,0x59}, {0xd4,0x52},{0xb0,0xb4},{0xd4,0x56},{0xb0,0xb9},{0xb0,0xbe}, {0x81,0x4e},{0xd4,0x67},{0x00,0x00},{0xd4,0x51},{0x00,0x00}, {0xb0,0xba},{0xfb,0xbf},{0xd4,0x66},{0x98,0xc2},{0x00,0x00}, {0xb0,0xb5},{0xd4,0x58},{0xb0,0xb1},{0xd4,0x53},{0xd4,0x4f}, {0xd4,0x5d},{0xd4,0x50},{0xd4,0x4e},{0xd4,0x5a},{0xd4,0x60}, {0xd4,0x61},{0xb0,0xb7},{0x98,0xc3},{0x00,0x00},{0xd8,0x5b}, {0xd4,0x5e},{0xd4,0x4d},{0xd4,0x5f},{0x85,0xb5},{0xb0,0xc1}, {0xd4,0x64},{0xb0,0xc0},{0xd4,0x4c},{0x00,0x00},{0xd4,0x54}, {0xd4,0x65},{0xb0,0xbc},{0xb0,0xbb},{0xb0,0xb8},{0xb0,0xbd}, {0x81,0x4f},{0x00,0x00},{0xb0,0xaf},{0x8d,0xfe},{0x00,0x00}, {0xb0,0xb0},{0x8e,0x65},{0x89,0xc8},{0xb3,0xc8},{0x98,0xc4}, {0xd8,0x5e},{0xd8,0x57},{0x00,0x00},{0xb3,0xc5},{0x00,0x00}, {0xd8,0x5f},{0x90,0xf0},{0x00,0x00},{0x00,0x00},{0xd8,0x55}, {0xd8,0x58},{0xb3,0xc4},{0xd8,0x59},{0x00,0x00},{0x98,0xc5}, {0xb3,0xc7},{0xd8,0x5d},{0x00,0x00},{0xd8,0x53},{0xd8,0x52}, {0xb3,0xc9},{0x00,0x00},{0xb3,0xca},{0xb3,0xc6},{0xb3,0xcb}, {0xd8,0x51},{0xd8,0x5c},{0xd8,0x5a},{0xd8,0x54},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xb3,0xc3},{0xd8,0x56},{0x00,0x00}, {0x8c,0xc9},{0xfb,0xc2},{0x88,0xc9},{0x89,0xc9},{0x8f,0xfb}, {0x00,0x00},{0x00,0x00},{0xb6,0xca},{0xb6,0xc4},{0xdc,0xb7}, {0xb6,0xcd},{0xdc,0xbd},{0xdc,0xc0},{0xb6,0xc6},{0xb6,0xc7}, {0xdc,0xba},{0xb6,0xc5},{0xdc,0xc3},{0xb6,0xcb},{0xdc,0xc4}, {0x00,0x00},{0xdc,0xbf},{0xb6,0xcc},{0x98,0xc6},{0xdc,0xb4}, {0xb6,0xc9},{0xdc,0xb5},{0x00,0x00},{0xdc,0xbe},{0xdc,0xbc}, {0x00,0x00},{0xdc,0xb8},{0xb6,0xc8},{0xdc,0xb6},{0xb6,0xce}, {0xdc,0xbb},{0xdc,0xc2},{0xdc,0xb9},{0xdc,0xc1},{0x00,0x00}, {0x94,0x4f},{0xb9,0xb6},{0xb9,0xb3},{0x98,0xc7},{0xb9,0xb4}, {0x00,0x00},{0xe0,0xf9},{0xe0,0xf1},{0xb9,0xb2},{0xb9,0xaf}, {0xe0,0xf2},{0x81,0x50},{0xfb,0xc3},{0xb9,0xb1},{0xe0,0xf5}, {0x00,0x00},{0xe0,0xf7},{0x81,0x51},{0x98,0xc8},{0xe0,0xfe}, {0x98,0xc9},{0x00,0x00},{0xe0,0xfd},{0xe0,0xf8},{0xb9,0xae}, {0xe0,0xf0},{0xb9,0xac},{0xe0,0xf3},{0xb9,0xb7},{0xe0,0xf6}, {0x00,0x00},{0xe0,0xfa},{0xb9,0xb0},{0xb9,0xad},{0xe0,0xfc}, {0xe0,0xfb},{0xb9,0xb5},{0x00,0x00},{0xe0,0xf4},{0x81,0x52}, {0xbb,0xf8},{0xe4,0xec},{0x00,0x00},{0xe4,0xe9},{0xbb,0xf9}, {0x00,0x00},{0xbb,0xf7},{0x98,0xca},{0xe4,0xf0},{0xe4,0xed}, {0xe4,0xe6},{0xbb,0xf6},{0xfb,0xc6},{0xbb,0xfa},{0xe4,0xe7}, {0xbb,0xf5},{0xbb,0xfd},{0xe4,0xea},{0xe4,0xeb},{0xbb,0xfb}, {0xbb,0xfc},{0xe4,0xf1},{0xe4,0xee},{0xe4,0xef},{0x98,0xcb}, {0xfb,0xc4},{0x00,0x00},{0xbe,0xaa},{0xe8,0xf8},{0xbe,0xa7}, {0xe8,0xf5},{0xbe,0xa9},{0xbe,0xab},{0x81,0x53},{0xe8,0xf6}, {0xbe,0xa8},{0x00,0x00},{0xe8,0xf7},{0x00,0x00},{0xe8,0xf4}, {0x00,0x00},{0x00,0x00},{0xc0,0x76},{0xec,0xbd},{0xc0,0x77}, {0xec,0xbb},{0x00,0x00},{0xec,0xbc},{0xec,0xba},{0xec,0xb9}, {0x00,0x00},{0x00,0x00},{0xec,0xbe},{0xc0,0x75},{0x98,0xcc}, {0x00,0x00},{0xef,0xb8},{0xef,0xb9},{0x00,0x00},{0xe4,0xe8}, {0xef,0xb7},{0xc0,0x78},{0xc3,0x5f},{0xf1,0xeb},{0xf1,0xec}, {0x00,0x00},{0xc4,0xd7},{0xc4,0xd8},{0xf5,0xc1},{0xf5,0xc0}, {0xc5,0x6c},{0xc5,0x6b},{0xf7,0xd0},{0x00,0x00},{0xa4,0x49}, {0xa4,0x61},{0xa4,0xb9},{0x00,0x00},{0xa4,0xb8},{0xa5,0x53}, {0xa5,0x52},{0xa5,0xfc},{0xa5,0xfb},{0xa5,0xfd},{0xa5,0xfa}, {0x81,0x54},{0xa7,0x4a},{0xa7,0x49},{0xa7,0x4b},{0x95,0xfc}, {0x00,0x00},{0x92,0xd1},{0x81,0x55},{0xa8,0xe0},{0x00,0x00}, {0xa8,0xdf},{0xa8,0xe1},{0x83,0x67},{0xab,0x5e},{0x00,0x00}, {0xa2,0x59},{0xd0,0xde},{0xa2,0x5a},{0xb0,0xc2},{0xa2,0x5c}, {0xa2,0x5b},{0xd8,0x60},{0x98,0xcd},{0xa2,0x5d},{0xb9,0xb8}, {0xa2,0x5e},{0x81,0x56},{0xa4,0x4a},{0x00,0x00},{0xa4,0xba}, {0xa5,0xfe},{0xa8,0xe2},{0x81,0x57},{0xa4,0x4b},{0xa4,0xbd}, {0xa4,0xbb},{0xa4,0xbc},{0x00,0x00},{0x8c,0xa3},{0xa6,0x40}, {0x00,0x00},{0x8b,0xd7},{0x89,0x55},{0xa7,0x4c},{0xa8,0xe4}, {0xa8,0xe3},{0xa8,0xe5},{0x90,0xbc},{0x00,0x00},{0x88,0xb5}, {0xad,0xdd},{0x8b,0xa6},{0x00,0x00},{0x00,0x00},{0xbe,0xac}, {0x90,0x54},{0xc6,0xc3},{0x00,0x00},{0x00,0x00},{0x81,0x58}, {0x92,0x4c},{0xc9,0x4e},{0x83,0x58},{0xa5,0x54},{0xa5,0x55}, {0x00,0x00},{0x95,0xe4},{0xa6,0x41},{0x00,0x00},{0xca,0x6a}, {0x81,0x59},{0xab,0x60},{0xab,0x5f},{0xd0,0xe0},{0xd0,0xdf}, {0xb0,0xc3},{0xc6,0xc4},{0xa4,0xbe},{0xc9,0x55},{0x87,0xc0}, {0xfb,0x41},{0x83,0x7e},{0x86,0x61},{0x81,0x5a},{0xcb,0xcd}, {0x00,0x00},{0xab,0x61},{0x00,0x00},{0xad,0xe0},{0x00,0x00}, {0xad,0xde},{0xad,0xdf},{0x81,0x5b},{0xfb,0x4e},{0x81,0x5c}, {0x81,0x5d},{0xbe,0xad},{0xc6,0xc5},{0xa5,0x56},{0x00,0x00}, {0x98,0xce},{0x85,0xad},{0xa6,0x42},{0xc9,0xbc},{0x83,0x4c}, {0x83,0x4b},{0x94,0xfb},{0x95,0xd5},{0xa7,0x4d},{0xa7,0x4e}, {0x98,0xcf},{0xca,0x6b},{0x00,0x00},{0x83,0xad},{0xcb,0xce}, {0xa8,0xe6},{0xcb,0xcf},{0x00,0x00},{0x84,0x60},{0x00,0x00}, {0x00,0x00},{0x95,0xf3},{0xd0,0xe2},{0xd0,0xe3},{0xad,0xe3}, {0x81,0x5e},{0xd0,0xe4},{0x84,0x5b},{0xd0,0xe1},{0xad,0xe4}, {0xad,0xe2},{0xad,0xe1},{0xd0,0xe5},{0x90,0xb6},{0xd4,0x68}, {0x84,0xee},{0x98,0xd0},{0xfb,0xcf},{0xd8,0x61},{0x00,0x00}, {0x81,0x5f},{0xdc,0xc5},{0xe1,0x40},{0x00,0x00},{0x00,0x00}, {0x81,0x60},{0xbb,0xfe},{0xbe,0xae},{0xe8,0xf9},{0xfb,0xd0}, {0xa4,0x4c},{0xa4,0x5a},{0x98,0xd1},{0x00,0x00},{0x87,0xa1}, {0x00,0x00},{0x92,0xe1},{0x94,0x4c},{0x00,0x00},{0x94,0x61}, {0x94,0x52},{0x8e,0x63},{0x81,0x61},{0x88,0xd7},{0x00,0x00}, {0x84,0xc5},{0xb0,0xc4},{0xb3,0xcd},{0x00,0x00},{0xb9,0xb9}, {0xfb,0xc7},{0xc9,0x42},{0xa4,0xbf},{0x00,0x00},{0xa5,0x59}, {0xa5,0x57},{0xa5,0x58},{0x89,0xdb},{0x81,0x62},{0xa8,0xe7}, {0xfb,0xd2},{0x8d,0xad},{0xa4,0x4d},{0xa4,0x4e},{0xc8,0x7d}, {0xa4,0x62},{0x95,0xcf},{0x98,0xd2},{0xa4,0xc0},{0xa4,0xc1}, {0xa4,0xc2},{0xc9,0xbe},{0xa5,0x5a},{0x81,0x63},{0xc9,0x6b}, {0x83,0xd2},{0xa6,0x46},{0x00,0x00},{0xc9,0xbf},{0xa6,0x44}, {0xa6,0x45},{0xc9,0xbd},{0x81,0x64},{0x81,0x65},{0xa6,0x47}, {0xa6,0x43},{0x87,0xaa},{0x83,0x68},{0x83,0xae},{0x84,0xc7}, {0xca,0x6c},{0xaa,0xec},{0xca,0x6d},{0xfb,0xc8},{0x81,0x66}, {0xca,0x6e},{0x00,0x00},{0xa0,0x7e},{0xa7,0x50},{0xa7,0x4f}, {0x95,0x7b},{0x95,0xe5},{0xa7,0x53},{0xa7,0x51},{0xa7,0x52}, {0x81,0x67},{0x00,0x00},{0x8d,0xba},{0xa8,0xed},{0x00,0x00}, {0xa8,0xec},{0xcb,0xd4},{0xcb,0xd1},{0xcb,0xd2},{0x98,0xd3}, {0xcb,0xd0},{0xa8,0xee},{0xa8,0xea},{0xa8,0xe9},{0x81,0x68}, {0xa8,0xeb},{0xa8,0xe8},{0x98,0xd4},{0x87,0xac},{0x00,0x00}, {0x8e,0xaf},{0x84,0xc6},{0xa8,0xef},{0x88,0xcc},{0xab,0x63}, {0xcd,0xf0},{0x00,0x00},{0xcb,0xd3},{0xab,0x68},{0x00,0x00}, {0xcd,0xf1},{0xab,0x64},{0xab,0x67},{0xab,0x66},{0xab,0x65}, {0xab,0x62},{0x81,0x69},{0x8d,0xc8},{0x87,0xab},{0xd0,0xe8}, {0x00,0x00},{0xad,0xe7},{0xd0,0xeb},{0xad,0xe5},{0xfb,0xca}, {0x00,0x00},{0x98,0xd5},{0xd0,0xe7},{0xad,0xe8},{0xad,0xe6}, {0xad,0xe9},{0xd0,0xe9},{0xd0,0xea},{0xfb,0xc9},{0xd0,0xe6}, {0xd0,0xec},{0x92,0xb3},{0x92,0xc9},{0x82,0x76},{0x00,0x00}, {0x87,0xa9},{0x98,0xd6},{0xb3,0xd1},{0xb0,0xc5},{0xd4,0x69}, {0xd4,0x6b},{0xd4,0x6a},{0xd4,0x6c},{0xb0,0xc6},{0x92,0xeb}, {0x81,0x6a},{0xb3,0xce},{0xfc,0xf5},{0xb3,0xcf},{0xb3,0xd0}, {0x00,0x00},{0xb6,0xd0},{0xdc,0xc7},{0x98,0xd7},{0xdc,0xc6}, {0xdc,0xc8},{0xdc,0xc9},{0xb6,0xd1},{0x00,0x00},{0xb6,0xcf}, {0xe1,0x41},{0xe1,0x42},{0xb9,0xbb},{0xb9,0xba},{0xe3,0x5a}, {0x00,0x00},{0x00,0x00},{0xbc,0x40},{0xbc,0x41},{0xbc,0x42}, {0xbc,0x44},{0xe4,0xf2},{0xe4,0xf3},{0xbc,0x43},{0x00,0x00}, {0xfb,0x69},{0x81,0x6b},{0xbe,0xaf},{0x81,0x6c},{0xbe,0xb0}, {0x81,0x6d},{0x00,0x00},{0xf1,0xed},{0xf5,0xc3},{0xf5,0xc2}, {0xf7,0xd1},{0xfb,0xcb},{0xa4,0x4f},{0x81,0x6e},{0x8b,0xef}, {0x89,0x74},{0xa5,0x5c},{0xa5,0x5b},{0x83,0xef},{0x8e,0xb0}, {0xa6,0x48},{0x98,0xd8},{0x00,0x00},{0xc9,0xc0},{0x00,0x00}, {0x83,0xf0},{0xa7,0x55},{0xa7,0x56},{0xa7,0x54},{0xa7,0x57}, {0xca,0x6f},{0xca,0x70},{0x81,0x6f},{0x00,0x00},{0x89,0xca}, {0x83,0x69},{0x84,0xc8},{0x93,0xf5},{0x81,0x70},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x95,0xa2},{0x00,0x00},{0xa8,0xf1}, {0xcb,0xd5},{0x00,0x00},{0xa8,0xf0},{0x85,0xb7},{0xcd,0xf2}, {0xab,0x6c},{0xcd,0xf3},{0xab,0x6b},{0x00,0x00},{0x95,0x44}, {0x00,0x00},{0xab,0x69},{0x00,0x00},{0xab,0x6a},{0x00,0x00}, {0x84,0xc9},{0x98,0xd9},{0xd0,0xed},{0x00,0x00},{0x00,0x00}, {0x81,0x71},{0xfb,0xcc},{0xb0,0xc7},{0xd4,0x6e},{0x00,0x00}, {0xb0,0xca},{0xd4,0x6d},{0xb1,0xe5},{0xb0,0xc9},{0xb0,0xc8}, {0x00,0x00},{0xb3,0xd4},{0x00,0x00},{0xb3,0xd3},{0xb3,0xd2}, {0xb6,0xd2},{0xfb,0xcd},{0xfb,0xce},{0xb6,0xd5},{0xb6,0xd6}, {0xb6,0xd4},{0x00,0x00},{0xb6,0xd3},{0x92,0x68},{0x00,0x00}, {0xe1,0x43},{0x00,0x00},{0xe1,0x44},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xe4,0xf5},{0xbc,0x45},{0xe4,0xf4},{0x92,0xa4}, {0xbe,0xb1},{0xec,0xbf},{0xc0,0x79},{0x00,0x00},{0xf1,0xee}, {0xc4,0x55},{0xc6,0xc6},{0xa4,0x63},{0xa4,0xc3},{0xc9,0x56}, {0x00,0x00},{0xa4,0xc4},{0xa4,0xc5},{0x81,0x72},{0x94,0x5e}, {0x94,0x53},{0x9c,0xd0},{0x00,0x00},{0xa5,0x5d},{0xa5,0x5e}, {0x81,0x73},{0xa6,0x49},{0xca,0x71},{0xcb,0xd6},{0xcb,0xd7}, {0x00,0x00},{0xab,0x6d},{0xd0,0xee},{0xb0,0xcc},{0xb0,0xcb}, {0xd8,0x63},{0xd8,0x62},{0x00,0x00},{0x00,0x00},{0xa4,0x50}, {0xa4,0xc6},{0xa5,0x5f},{0x00,0x00},{0xb0,0xcd},{0xc9,0x43}, {0x00,0x00},{0xc9,0x6c},{0xa5,0x60},{0x00,0x00},{0xc9,0xc2}, {0xa6,0x4b},{0xa6,0x4a},{0xc9,0xc1},{0xa7,0x58},{0x81,0x74}, {0x00,0x00},{0x8d,0xc9},{0x98,0xda},{0x00,0x00},{0x00,0x00}, {0xad,0xea},{0x00,0x00},{0xfb,0xd4},{0xd4,0x6f},{0x86,0xad}, {0xb6,0xd7},{0xe1,0x45},{0xb9,0xbc},{0xfb,0xd3},{0xfb,0xd5}, {0xe8,0xfa},{0x00,0x00},{0x00,0x00},{0xf3,0xfd},{0xc6,0xc7}, {0xa4,0xc7},{0x83,0xf1},{0x8b,0x4b},{0xcb,0xd8},{0xcd,0xf4}, {0xb0,0xd0},{0xb0,0xce},{0xb0,0xcf},{0xa4,0x51},{0x98,0xdb}, {0xa4,0x64},{0xa2,0xcd},{0xa4,0xca},{0x81,0x75},{0xa4,0xc9}, {0xa4,0xc8},{0xa5,0x63},{0xa5,0x62},{0x00,0x00},{0xc9,0x6d}, {0xc9,0xc3},{0x85,0x4f},{0x83,0x56},{0x00,0x00},{0xa8,0xf5}, {0xa8,0xf2},{0xa8,0xf4},{0xa8,0xf3},{0x84,0xcb},{0x88,0x6f}, {0xab,0x6e},{0x93,0x6d},{0x00,0x00},{0xb3,0xd5},{0x00,0x00}, {0xa4,0x52},{0x98,0xdc},{0xa4,0xcb},{0x81,0x76},{0xa5,0x65}, {0xa5,0x64},{0x89,0x41},{0xca,0x72},{0x84,0xc0},{0x00,0x00}, {0xa8,0xf6},{0x83,0x60},{0x00,0x00},{0xc6,0xc8},{0x00,0x00}, {0x88,0x55},{0xc9,0x57},{0x95,0xf2},{0xa5,0x67},{0xa5,0x66}, {0xa6,0x4c},{0xa6,0x4d},{0xca,0x73},{0xa7,0x59},{0x83,0x6a}, {0xa7,0x5a},{0x00,0x00},{0xa8,0xf7},{0xa8,0xf8},{0xa8,0xf9}, {0x8d,0xbd},{0xab,0x6f},{0xcd,0xf5},{0x98,0xdd},{0x98,0xde}, {0xad,0xeb},{0x00,0x00},{0x00,0x00},{0xc9,0x44},{0x00,0x00}, {0xa4,0xcc},{0x8d,0x6d},{0x88,0xe5},{0x00,0x00},{0x00,0x00}, {0x87,0xad},{0xc9,0xc4},{0x89,0xcd},{0x86,0xae},{0x8d,0xbb}, {0xca,0x74},{0xca,0x75},{0x00,0x00},{0x00,0x00},{0xcb,0xd9}, {0x81,0x77},{0xcb,0xda},{0x84,0xda},{0xcd,0xf7},{0xcd,0xf6}, {0xcd,0xf9},{0xcd,0xf8},{0xab,0x70},{0x00,0x00},{0xd4,0x70}, {0xad,0xed},{0xd0,0xef},{0xad,0xec},{0x95,0xe8},{0x00,0x00}, {0x95,0xe9},{0x8f,0xb6},{0xd8,0x64},{0xb3,0xd6},{0x95,0x7a}, {0xd8,0x65},{0x87,0xc5},{0x84,0xdb},{0xfb,0xd7},{0xfb,0xd6}, {0xe1,0x46},{0xb9,0xbd},{0x87,0xc7},{0x00,0x00},{0x81,0x78}, {0x00,0x00},{0xbc,0x46},{0x92,0xba},{0xf1,0xef},{0x00,0x00}, {0xc6,0xc9},{0x00,0x00},{0x00,0x00},{0xc9,0x58},{0x00,0x00}, {0xa5,0x68},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x89,0x4f}, {0x00,0x00},{0x95,0x48},{0x83,0xf2},{0xb0,0xd1},{0x00,0x00}, {0x98,0xdf},{0x00,0x00},{0x00,0x00},{0xa4,0x53},{0xa4,0x65}, {0xa4,0xce},{0xa4,0xcd},{0x8b,0x5a},{0xa4,0xcf},{0x83,0x42}, {0x00,0x00},{0x98,0xe0},{0x84,0xfa},{0x98,0xe1},{0x00,0x00}, {0xa8,0xfb},{0x00,0x00},{0xa8,0xfa},{0xa8,0xfc},{0x8d,0x40}, {0x95,0xb3},{0xfb,0xdb},{0xab,0x71},{0x00,0x00},{0x81,0x79}, {0x00,0x00},{0xad,0xee},{0x8c,0xd4},{0xe8,0xfb},{0xc2,0x4f}, {0xa4,0x66},{0xa5,0x6a},{0xa5,0x79},{0xa5,0x74},{0x00,0x00}, {0xa5,0x6f},{0xa5,0x6e},{0xa5,0x75},{0xa5,0x73},{0xa5,0x6c}, {0xa5,0x7a},{0xa5,0x6d},{0xa5,0x69},{0xa5,0x78},{0xa5,0x77}, {0xa5,0x76},{0xa5,0x6b},{0x00,0x00},{0xa5,0x72},{0x85,0xfc}, {0x86,0x41},{0xa5,0x71},{0x86,0xb1},{0x94,0x62},{0xa5,0x7b}, {0xa5,0x70},{0x87,0xb4},{0x98,0xe2},{0x00,0x00},{0x00,0x00}, {0xa6,0x53},{0x00,0x00},{0xa6,0x59},{0xa6,0x55},{0x00,0x00}, {0xa6,0x5b},{0xc9,0xc5},{0xa6,0x58},{0xa6,0x4e},{0xa6,0x51}, {0xa6,0x54},{0xa6,0x50},{0xa6,0x57},{0xa6,0x5a},{0xa6,0x4f}, {0xa6,0x52},{0xa6,0x56},{0xa6,0x5c},{0x89,0xcc},{0xfb,0x43}, {0x90,0xb8},{0xfb,0x42},{0x85,0xba},{0xca,0x7e},{0xca,0x7b}, {0xa0,0x55},{0xa7,0x67},{0xca,0x7c},{0xa7,0x5b},{0xa7,0x5d}, {0xa7,0x75},{0xa7,0x70},{0x96,0xb2},{0x00,0x00},{0x81,0x7a}, {0xca,0xa5},{0xca,0x7d},{0xa7,0x5f},{0xa7,0x61},{0xca,0xa4}, {0xa7,0x68},{0xca,0x78},{0xa7,0x74},{0xa7,0x76},{0xa7,0x5c}, {0xa7,0x6d},{0x84,0x51},{0xca,0x76},{0xa7,0x73},{0x96,0xb4}, {0xa7,0x64},{0x83,0x45},{0xa7,0x6e},{0xa7,0x6f},{0xca,0x77}, {0xa7,0x6c},{0xa7,0x6a},{0x00,0x00},{0xa7,0x6b},{0xa7,0x71}, {0xca,0xa1},{0xa7,0x5e},{0x00,0x00},{0xa7,0x72},{0xca,0xa3}, {0xa7,0x66},{0xa7,0x63},{0x00,0x00},{0xca,0x7a},{0xa7,0x62}, {0xca,0xa6},{0xa7,0x65},{0x92,0xbb},{0xa7,0x69},{0x96,0xa4}, {0x00,0x00},{0xa0,0x5a},{0xa7,0x60},{0xca,0xa2},{0x81,0x7b}, {0x81,0x7c},{0x8e,0xb2},{0x8c,0xca},{0xca,0x79},{0x86,0xb0}, {0x8f,0xb7},{0x8d,0xc2},{0x83,0xb0},{0x8d,0xbc},{0x00,0x00}, {0x85,0xbc},{0x85,0xbb},{0x00,0x00},{0x00,0x00},{0x82,0xaf}, {0xcb,0xeb},{0xcb,0xea},{0xa9,0x4f},{0xcb,0xed},{0xcb,0xef}, {0xcb,0xe4},{0xcb,0xe7},{0xcb,0xee},{0xa9,0x50},{0xfb,0xd9}, {0x94,0xfc},{0xcb,0xe1},{0xcb,0xe5},{0x98,0xe3},{0x00,0x00}, {0xcb,0xe9},{0xce,0x49},{0xa9,0x4b},{0xce,0x4d},{0xa8,0xfd}, {0xcb,0xe6},{0xa8,0xfe},{0xa9,0x4c},{0xa9,0x45},{0xa9,0x41}, {0x00,0x00},{0xcb,0xe2},{0xa9,0x44},{0xa9,0x49},{0xa9,0x52}, {0xcb,0xe3},{0xcb,0xdc},{0xa9,0x43},{0xcb,0xdd},{0xcb,0xdf}, {0x00,0x00},{0xa9,0x46},{0x98,0xe4},{0xa9,0x48},{0xcb,0xdb}, {0xcb,0xe0},{0x00,0x00},{0x81,0x7d},{0xa9,0x51},{0xa9,0x4d}, {0xcb,0xe8},{0xa9,0x53},{0x95,0xa3},{0xa9,0x4a},{0xcb,0xde}, {0xa9,0x47},{0x98,0xe5},{0x96,0xb6},{0xa9,0x42},{0xa9,0x40}, {0xa0,0x57},{0xcb,0xec},{0x8b,0xf0},{0xa9,0x4e},{0x89,0xcb}, {0xfb,0xda},{0x81,0x7e},{0x98,0xe6},{0x00,0x00},{0xce,0x48}, {0xcd,0xfb},{0xce,0x4b},{0x81,0xa1},{0x95,0x79},{0xcd,0xfd}, {0xab,0x78},{0xab,0xa8},{0xab,0x74},{0xab,0xa7},{0xab,0x7d}, {0xab,0xa4},{0xab,0x72},{0xcd,0xfc},{0xce,0x43},{0xab,0xa3}, {0xce,0x4f},{0xab,0xa5},{0x94,0x46},{0xab,0x79},{0x81,0xa2}, {0x00,0x00},{0xce,0x45},{0xce,0x42},{0xab,0x77},{0x98,0xe7}, {0xcd,0xfa},{0xab,0xa6},{0xce,0x4a},{0xab,0x7c},{0xce,0x4c}, {0xab,0xa9},{0xab,0x73},{0xab,0x7e},{0xab,0x7b},{0xce,0x40}, {0xab,0xa1},{0xce,0x46},{0xce,0x47},{0xab,0x7a},{0xab,0xa2}, {0xab,0x76},{0x00,0x00},{0xfb,0x4a},{0x96,0xcf},{0x8c,0xb7}, {0xab,0x75},{0xcd,0xfe},{0x81,0xa3},{0x83,0xf3},{0x8e,0xe2}, {0x8e,0xb1},{0x86,0xb4},{0x8e,0xe3},{0xce,0x44},{0x87,0xb0}, {0x94,0x63},{0x8e,0xe4},{0x96,0xb3},{0x00,0x00},{0x8f,0x4f}, {0x88,0xce},{0xce,0x4e},{0x84,0xcc},{0xd1,0x44},{0xad,0xfb}, {0xd0,0xf1},{0x98,0xe8},{0xd0,0xf6},{0xad,0xf4},{0xae,0x40}, {0xd0,0xf4},{0xad,0xef},{0xad,0xf9},{0xad,0xfe},{0xd0,0xfb}, {0x00,0x00},{0xad,0xfa},{0xad,0xfd},{0x98,0xe9},{0x00,0x00}, {0xd0,0xfe},{0xad,0xf5},{0xd0,0xf5},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xd1,0x42},{0xd1,0x43},{0x00,0x00},{0xad,0xf7}, {0xd1,0x41},{0xad,0xf3},{0xae,0x43},{0x00,0x00},{0xd0,0xf8}, {0x00,0x00},{0xad,0xf1},{0xfb,0x5a},{0xd1,0x46},{0xd0,0xf9}, {0xd0,0xfd},{0xad,0xf6},{0xae,0x42},{0xd0,0xfa},{0xad,0xfc}, {0xd1,0x40},{0xd1,0x47},{0xd4,0xa1},{0x98,0xea},{0xd1,0x45}, {0xae,0x44},{0xad,0xf0},{0xd0,0xfc},{0xd0,0xf3},{0xfb,0x52}, {0xad,0xf8},{0x00,0x00},{0x82,0x40},{0xd0,0xf2},{0x98,0xeb}, {0x00,0x00},{0xd0,0xf7},{0x8e,0x66},{0x00,0x00},{0x00,0x00}, {0xfb,0x55},{0x00,0x00},{0x87,0xae},{0x00,0x00},{0x8e,0x41}, {0x81,0xa4},{0x84,0xcd},{0x98,0xec},{0xd0,0xf0},{0xae,0x41}, {0x98,0xed},{0x00,0x00},{0xd4,0x77},{0x98,0xee},{0xb0,0xe4}, {0xd4,0xa7},{0xb0,0xe2},{0xb0,0xdf},{0xd4,0x7c},{0xb0,0xdb}, {0xd4,0xa2},{0xb0,0xe6},{0xd4,0x76},{0xd4,0x7b},{0xd4,0x7a}, {0xad,0xf2},{0xb0,0xe1},{0xd4,0xa5},{0x00,0x00},{0xd4,0xa8}, {0xd4,0x73},{0x00,0x00},{0xb3,0xe8},{0x81,0xa5},{0xd4,0xa9}, {0xb0,0xe7},{0x00,0x00},{0xb0,0xd9},{0xb0,0xd6},{0xd4,0x7e}, {0xb0,0xd3},{0x98,0xef},{0xd4,0xa6},{0x96,0xb1},{0xb0,0xda}, {0xd4,0xaa},{0x81,0xa6},{0xd4,0x74},{0xd4,0xa4},{0xb0,0xdd}, {0xd4,0x75},{0xd4,0x78},{0xd4,0x7d},{0x81,0xa7},{0x00,0x00}, {0xb0,0xde},{0xb0,0xdc},{0xb0,0xe8},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xb0,0xe3},{0x81,0xa8},{0xb0,0xd7}, {0xb1,0xd2},{0x00,0x00},{0xb0,0xd8},{0xd4,0x79},{0xb0,0xe5}, {0xb0,0xe0},{0xd4,0xa3},{0xb0,0xd5},{0x86,0xb3},{0x00,0x00}, {0xfb,0x5b},{0xb0,0xd4},{0xa0,0x46},{0x81,0xa9},{0x8c,0x6e}, {0x8c,0xc7},{0x00,0x00},{0x00,0x00},{0xa0,0x49},{0xa0,0x45}, {0xfb,0xdd},{0x00,0x00},{0xd4,0x71},{0xd4,0x72},{0xd8,0x6a}, {0x87,0xb3},{0x98,0xf0},{0x00,0x00},{0xb3,0xd7},{0xb3,0xda}, {0xd8,0x75},{0xb3,0xee},{0xd8,0x78},{0xb3,0xd8},{0xd8,0x71}, {0xb3,0xde},{0xb3,0xe4},{0xb5,0xbd},{0x00,0x00},{0x95,0xed}, {0xb3,0xe2},{0xd8,0x6e},{0xb3,0xef},{0xb3,0xdb},{0xb3,0xe3}, {0xd8,0x76},{0xdc,0xd7},{0xd8,0x7b},{0xd8,0x6f},{0x98,0xf1}, {0xd8,0x66},{0xd8,0x73},{0xd8,0x6d},{0xb3,0xe1},{0xd8,0x79}, {0x00,0x00},{0x00,0x00},{0xb3,0xdd},{0xb3,0xf1},{0xb3,0xea}, {0x00,0x00},{0xb3,0xdf},{0xb3,0xdc},{0x81,0xaa},{0xb3,0xe7}, {0x00,0x00},{0xd8,0x7a},{0xd8,0x6c},{0xd8,0x72},{0xd8,0x74}, {0xd8,0x68},{0xd8,0x77},{0xb3,0xd9},{0xd8,0x67},{0x81,0xab}, {0xb3,0xe0},{0xb3,0xf0},{0xb3,0xec},{0xd8,0x69},{0xb3,0xe6}, {0x00,0x00},{0x94,0x42},{0xb3,0xed},{0xb3,0xe9},{0xb3,0xe5}, {0x98,0xf2},{0xd8,0x70},{0x92,0x49},{0x87,0xb2},{0x00,0x00}, {0x96,0xb5},{0xa0,0x4a},{0xb3,0xeb},{0xfb,0x4c},{0x86,0xb2}, {0x8f,0xd9},{0xdc,0xd5},{0xdc,0xd1},{0x98,0xf3},{0xdc,0xe0}, {0xdc,0xca},{0xdc,0xd3},{0xb6,0xe5},{0xb6,0xe6},{0xb6,0xde}, {0xdc,0xdc},{0xb6,0xe8},{0xdc,0xcf},{0xdc,0xce},{0xdc,0xcc}, {0xdc,0xde},{0xb6,0xdc},{0xdc,0xd8},{0xdc,0xcd},{0xb6,0xdf}, {0xdc,0xd6},{0xb6,0xda},{0xdc,0xd2},{0xdc,0xd9},{0xdc,0xdb}, {0x98,0xf4},{0x98,0xf5},{0xdc,0xdf},{0xb6,0xe3},{0xdc,0xcb}, {0xb6,0xdd},{0xdc,0xd0},{0xfb,0x56},{0xb6,0xd8},{0x00,0x00}, {0xb6,0xe4},{0xdc,0xda},{0xb6,0xe0},{0xb6,0xe1},{0xb6,0xe7}, {0xb6,0xdb},{0xa2,0x5f},{0xb6,0xd9},{0xdc,0xd4},{0x96,0xc9}, {0x8c,0x6d},{0x81,0xac},{0x00,0x00},{0x00,0x00},{0xb6,0xe2}, {0xa0,0x4d},{0xa0,0x4b},{0xdc,0xdd},{0x88,0xcf},{0x00,0x00}, {0x81,0xad},{0xb9,0xcd},{0xb9,0xc8},{0x00,0x00},{0xe1,0x55}, {0xe1,0x51},{0x98,0xf6},{0xe1,0x4b},{0xb9,0xc2},{0xb9,0xbe}, {0xe1,0x54},{0xb9,0xbf},{0xe1,0x4e},{0xe1,0x50},{0x00,0x00}, {0xe1,0x53},{0xa0,0x4e},{0xb9,0xc4},{0x00,0x00},{0xb9,0xcb}, {0xb9,0xc5},{0x00,0x00},{0x00,0x00},{0xe1,0x49},{0xb9,0xc6}, {0xb9,0xc7},{0xe1,0x4c},{0xb9,0xcc},{0xfb,0xe1},{0xe1,0x4a}, {0xe1,0x4f},{0xb9,0xc3},{0xe1,0x48},{0xb9,0xc9},{0xb9,0xc1}, {0x82,0xb3},{0x00,0x00},{0x00,0x00},{0xb9,0xc0},{0xe1,0x4d}, {0xe1,0x52},{0xa0,0x52},{0xb9,0xca},{0xfc,0xd9},{0x98,0xf8}, {0xa0,0x4f},{0x81,0xae},{0x8b,0xf1},{0xfb,0x65},{0x00,0x00}, {0xe1,0x47},{0x00,0x00},{0xbc,0x4d},{0xe5,0x47},{0x00,0x00}, {0xe5,0x44},{0xa0,0x50},{0xbc,0x47},{0xbc,0x53},{0xbc,0x54}, {0x8d,0x51},{0xbc,0x4a},{0xe5,0x42},{0xbc,0x4c},{0xe4,0xf9}, {0xbc,0x52},{0xfe,0x5d},{0xe5,0x46},{0xbc,0x49},{0xe5,0x48}, {0xbc,0x48},{0x00,0x00},{0xe5,0x43},{0xe5,0x45},{0xbc,0x4b}, {0xe5,0x41},{0xe4,0xfa},{0xe4,0xf7},{0xa0,0x51},{0x00,0x00}, {0xd8,0x6b},{0xe4,0xfd},{0x00,0x00},{0xe4,0xf6},{0xe4,0xfc}, {0xe4,0xfb},{0x00,0x00},{0xe4,0xf8},{0xfb,0xe2},{0xbc,0x4f}, {0xfb,0x6a},{0x81,0xaf},{0x00,0x00},{0x98,0xfa},{0xbc,0x4e}, {0xfb,0xe4},{0x00,0x00},{0x00,0x00},{0xbc,0x50},{0xe4,0xfe}, {0xbe,0xb2},{0xe5,0x40},{0x82,0x4f},{0x8a,0xbe},{0x99,0x40}, {0xe9,0x45},{0x00,0x00},{0xe8,0xfd},{0x99,0x55},{0xbe,0xbe}, {0xe9,0x42},{0xbe,0xb6},{0xbe,0xba},{0xe9,0x41},{0x00,0x00}, {0xbe,0xb9},{0xbe,0xb5},{0xbe,0xb8},{0xbe,0xb3},{0xbe,0xbd}, {0xe9,0x43},{0xe8,0xfe},{0xbe,0xbc},{0xe8,0xfc},{0xbe,0xbb}, {0xe9,0x44},{0xe9,0x40},{0xbc,0x51},{0x00,0x00},{0xbe,0xbf}, {0xe9,0x46},{0xbe,0xb7},{0xbe,0xb4},{0x94,0x57},{0x96,0xca}, {0x81,0xb0},{0x00,0x00},{0xec,0xc6},{0xec,0xc8},{0xc0,0x7b}, {0xec,0xc9},{0xec,0xc7},{0xec,0xc5},{0xec,0xc4},{0xc0,0x7d}, {0xec,0xc3},{0xc0,0x7e},{0x00,0x00},{0x99,0x56},{0x81,0xb1}, {0x99,0x57},{0xec,0xc1},{0xec,0xc2},{0xc0,0x7a},{0xc0,0xa1}, {0xc0,0x7c},{0x00,0x00},{0xa0,0x53},{0xec,0xc0},{0x81,0xb2}, {0xc2,0x50},{0x00,0x00},{0xef,0xbc},{0xef,0xba},{0xef,0xbf}, {0xef,0xbd},{0x00,0x00},{0xef,0xbb},{0xef,0xbe},{0x99,0x58}, {0xa0,0x5c},{0x81,0xb3},{0x99,0x59},{0x82,0x74},{0x8c,0x6f}, {0xa0,0x5b},{0xc3,0x60},{0xf1,0xf2},{0xf1,0xf3},{0xc4,0x56}, {0x00,0x00},{0xf1,0xf4},{0xf1,0xf0},{0xf1,0xf5},{0xf1,0xf1}, {0xc2,0x51},{0x81,0xb4},{0x00,0x00},{0x99,0x5a},{0xf3,0xfe}, {0xf4,0x41},{0xc4,0x59},{0xf4,0x40},{0xc4,0x58},{0xc4,0x57}, {0x00,0x00},{0x99,0x5b},{0x00,0x00},{0x00,0x00},{0xc4,0x5a}, {0xf5,0xc5},{0xf5,0xc6},{0x99,0x5c},{0xc4,0xda},{0xc4,0xd9}, {0xc4,0xdb},{0xf5,0xc4},{0x00,0x00},{0xf6,0xd8},{0xf6,0xd7}, {0x00,0x00},{0xc5,0x6d},{0xc5,0x6f},{0xc5,0x6e},{0xf6,0xd9}, {0xc5,0xc8},{0xf8,0xa6},{0x94,0x64},{0x00,0x00},{0x00,0x00}, {0xc5,0xf1},{0x00,0x00},{0xf8,0xa5},{0xf8,0xee},{0x00,0x00}, {0x99,0x5d},{0xc9,0x49},{0x81,0xb5},{0x00,0x00},{0xa5,0x7d}, {0xa5,0x7c},{0x00,0x00},{0xa6,0x5f},{0xa6,0x5e},{0xc9,0xc7}, {0xa6,0x5d},{0xc9,0xc6},{0x86,0xb5},{0x93,0x6f},{0xa7,0x79}, {0xca,0xa9},{0x00,0x00},{0xca,0xa8},{0x00,0x00},{0x00,0x00}, {0xa7,0x77},{0xa7,0x7a},{0x00,0x00},{0x85,0xbd},{0xca,0xa7}, {0x99,0x5e},{0xa7,0x78},{0x83,0x46},{0x92,0x43},{0x92,0xf6}, {0x84,0xcf},{0x8d,0xca},{0x00,0x00},{0xcb,0xf0},{0x00,0x00}, {0xcb,0xf1},{0xa9,0x54},{0x9d,0x56},{0x00,0x00},{0x83,0xf6}, {0x86,0xb6},{0xab,0xaa},{0x81,0xb6},{0xd1,0x48},{0xd1,0x49}, {0xae,0x45},{0xae,0x46},{0x00,0x00},{0x85,0xbe},{0xd4,0xac}, {0xb0,0xe9},{0xb0,0xeb},{0xd4,0xab},{0xb0,0xea},{0xd8,0x7c}, {0xb3,0xf2},{0x00,0x00},{0x92,0xb5},{0x00,0x00},{0x00,0x00}, {0xb6,0xe9},{0xb6,0xea},{0xdc,0xe1},{0x99,0x5f},{0xb9,0xcf}, {0x00,0x00},{0xb9,0xce},{0x00,0x00},{0xe5,0x49},{0xe9,0x48}, {0xe9,0x47},{0x99,0x60},{0xf9,0x6b},{0xa4,0x67},{0xc9,0x59}, {0x00,0x00},{0xc9,0x6e},{0xc9,0x6f},{0x00,0x00},{0x00,0x00}, {0x94,0x65},{0x92,0x42},{0xa6,0x62},{0xa6,0x66},{0xc9,0xc9}, {0x00,0x00},{0xa6,0x64},{0xa6,0x63},{0xc9,0xc8},{0xa6,0x65}, {0xa6,0x61},{0x00,0x00},{0x99,0x61},{0xa6,0x60},{0xc9,0xca}, {0x00,0x00},{0x00,0x00},{0x94,0x66},{0x94,0x67},{0x8a,0xbf}, {0x84,0xd1},{0xa7,0xa6},{0x00,0x00},{0x99,0x62},{0xa7,0xa3}, {0x99,0x63},{0xa7,0x7d},{0xca,0xaa},{0x95,0xb5},{0x99,0x64}, {0x00,0x00},{0xca,0xab},{0xfb,0xe7},{0xa7,0xa1},{0x00,0x00}, {0xca,0xad},{0xa7,0x7b},{0xca,0xae},{0xca,0xac},{0xa7,0x7e}, {0xa7,0xa2},{0xa7,0xa5},{0xa7,0xa4},{0xa7,0x7c},{0xca,0xaf}, {0x00,0x00},{0xfe,0x6f},{0x00,0x00},{0x00,0x00},{0x85,0xc0}, {0x00,0x00},{0x81,0xb7},{0x83,0xf7},{0x88,0xd1},{0x8b,0x6f}, {0x8d,0x52},{0x85,0xc1},{0x87,0xb6},{0x87,0xb7},{0xa9,0x59}, {0xcb,0xfe},{0x00,0x00},{0xa9,0x5b},{0x81,0xb8},{0xa9,0x5a}, {0xfb,0xe9},{0xcc,0x40},{0xa9,0x58},{0xa9,0x57},{0xcb,0xf5}, {0x00,0x00},{0xcb,0xf4},{0x00,0x00},{0xcb,0xf2},{0xcb,0xf7}, {0xcb,0xf6},{0xcb,0xf3},{0xcb,0xfc},{0xcb,0xfd},{0xcb,0xfa}, {0xcb,0xf8},{0xa9,0x56},{0x00,0x00},{0x00,0x00},{0xfb,0xe8}, {0xcb,0xfb},{0xa9,0x5c},{0xcc,0x41},{0x99,0x66},{0x81,0xb9}, {0xcb,0xf9},{0x00,0x00},{0xab,0xab},{0xa9,0x55},{0x8b,0x6e}, {0x81,0xba},{0x8f,0xb8},{0x00,0x00},{0x94,0x68},{0x81,0xbb}, {0x99,0x67},{0xab,0xac},{0xce,0x54},{0x99,0x68},{0x00,0x00}, {0xce,0x5a},{0x99,0x69},{0x00,0x00},{0x8a,0xc0},{0xab,0xb2}, {0xce,0x58},{0xce,0x5e},{0x00,0x00},{0xce,0x55},{0xce,0x59}, {0xce,0x5b},{0xce,0x5d},{0xce,0x57},{0x99,0x6a},{0xce,0x56}, {0xce,0x51},{0xce,0x52},{0xab,0xad},{0x81,0xbc},{0xab,0xaf}, {0xab,0xae},{0xce,0x53},{0xce,0x5c},{0x88,0xd0},{0x8d,0xb6}, {0x00,0x00},{0x83,0xf8},{0x94,0x6a},{0x86,0xb8},{0x81,0xbd}, {0x8d,0xcb},{0xab,0xb1},{0x00,0x00},{0x94,0x6b},{0x00,0x00}, {0x8e,0x42},{0x94,0x69},{0x81,0xbe},{0xce,0x50},{0xd1,0x53}, {0x00,0x00},{0xd1,0x52},{0xd1,0x57},{0xd1,0x4e},{0x99,0x6b}, {0xd1,0x51},{0xd1,0x50},{0x99,0x6c},{0xd1,0x54},{0x81,0xbf}, {0xd1,0x58},{0xae,0x47},{0xae,0x4a},{0x99,0x6d},{0x00,0x00}, {0xd1,0x4f},{0xd1,0x55},{0x81,0xc0},{0x00,0x00},{0x00,0x00}, {0xae,0x49},{0xd1,0x4a},{0x00,0x00},{0xab,0xb0},{0xd4,0xba}, {0xd1,0x56},{0x00,0x00},{0xd1,0x4d},{0x81,0xc1},{0xae,0x48}, {0xd1,0x4c},{0x94,0x6c},{0xfe,0x49},{0x85,0xc2},{0x89,0xce}, {0x84,0xd3},{0x00,0x00},{0xd4,0xb1},{0xfb,0xec},{0x99,0x6e}, {0xb0,0xec},{0xb0,0xf0},{0xd4,0xc1},{0xd4,0xaf},{0xd4,0xbd}, {0xb0,0xf1},{0xd4,0xbf},{0xfb,0xeb},{0xd4,0xc5},{0x00,0x00}, {0xd4,0xc9},{0x00,0x00},{0x00,0x00},{0xd4,0xc0},{0xd4,0xb4}, {0xd4,0xbc},{0x81,0xc2},{0xd4,0xca},{0xd4,0xc8},{0xd4,0xbe}, {0xd4,0xb9},{0xd4,0xb2},{0xd8,0xa6},{0xd4,0xb0},{0xb0,0xf5}, {0xd4,0xb7},{0xb0,0xf6},{0xb0,0xf2},{0xd4,0xad},{0xd4,0xc3}, {0xd4,0xb5},{0x99,0x6f},{0x00,0x00},{0xd4,0xb3},{0xd4,0xc6}, {0xb0,0xf3},{0x95,0x4a},{0xd4,0xcc},{0xb0,0xed},{0xb0,0xef}, {0xd4,0xbb},{0xd4,0xb6},{0xae,0x4b},{0xb0,0xee},{0xd4,0xb8}, {0xd4,0xc7},{0xd4,0xcb},{0xd4,0xc2},{0x00,0x00},{0xd4,0xc4}, {0x86,0xb9},{0x99,0x70},{0x00,0x00},{0xd4,0xae},{0x87,0xb8}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xd8,0xa1},{0x00,0x00}, {0xd8,0xaa},{0xd8,0xa9},{0xb3,0xfa},{0xd8,0xa2},{0x00,0x00}, {0xb3,0xfb},{0xb3,0xf9},{0x99,0x71},{0xd8,0xa4},{0xb3,0xf6}, {0xd8,0xa8},{0xfb,0xef},{0xd8,0xa3},{0xd8,0xa5},{0xd8,0x7d}, {0xb3,0xf4},{0x00,0x00},{0xd8,0xb2},{0xd8,0xb1},{0xd8,0xae}, {0xb3,0xf3},{0xb3,0xf7},{0xb3,0xf8},{0xd1,0x4b},{0xd8,0xab}, {0xb3,0xf5},{0xb0,0xf4},{0xd8,0xad},{0xd8,0x7e},{0xd8,0xb0}, {0xd8,0xaf},{0xfb,0xea},{0xd8,0xb3},{0x00,0x00},{0xdc,0xef}, {0x00,0x00},{0xd8,0xac},{0x94,0x59},{0x93,0xe9},{0x00,0x00}, {0x00,0x00},{0x81,0xc3},{0x00,0x00},{0x00,0x00},{0x99,0x72}, {0xd8,0xa7},{0xdc,0xe7},{0xb6,0xf4},{0xb6,0xf7},{0xb6,0xf2}, {0xdc,0xe6},{0xdc,0xea},{0xdc,0xe5},{0x00,0x00},{0xb6,0xec}, {0xb6,0xf6},{0xdc,0xe2},{0xb6,0xf0},{0xdc,0xe9},{0x00,0x00}, {0xb6,0xee},{0xb6,0xed},{0xdc,0xec},{0xb6,0xef},{0xdc,0xee}, {0x99,0x73},{0xdc,0xeb},{0xb6,0xeb},{0x99,0x74},{0x00,0x00}, {0x00,0x00},{0xb6,0xf5},{0xdc,0xf0},{0xdc,0xe4},{0xdc,0xed}, {0x00,0x00},{0x00,0x00},{0xdc,0xe3},{0x95,0xcd},{0x00,0x00}, {0xb6,0xf1},{0x81,0xc4},{0xb6,0xf3},{0x00,0x00},{0xdc,0xe8}, {0x94,0x6d},{0xdc,0xf1},{0x95,0x62},{0x99,0x75},{0xe1,0x5d}, {0xb9,0xd0},{0xe1,0x63},{0x00,0x00},{0x00,0x00},{0xb9,0xd5}, {0xe1,0x5f},{0xe1,0x66},{0xe1,0x57},{0xb9,0xd7},{0xb9,0xd1}, {0xe1,0x5c},{0xbc,0x55},{0xe1,0x5b},{0xe1,0x64},{0xb9,0xd2}, {0x00,0x00},{0xb9,0xd6},{0xe1,0x5a},{0xe1,0x60},{0xe1,0x65}, {0xe1,0x56},{0xb9,0xd4},{0xe1,0x5e},{0x00,0x00},{0x00,0x00}, {0xe1,0x62},{0xe1,0x68},{0xe1,0x58},{0xe1,0x61},{0x81,0xc5}, {0xb9,0xd3},{0xe1,0x67},{0x00,0x00},{0x00,0x00},{0x93,0x5e}, {0xe1,0x59},{0x89,0xf5},{0x81,0xc6},{0x00,0x00},{0xbc,0x59}, {0xe5,0x4b},{0xbc,0x57},{0xbc,0x56},{0xe5,0x4d},{0xe5,0x52}, {0x00,0x00},{0xe5,0x4e},{0x00,0x00},{0xe5,0x51},{0xbc,0x5c}, {0x99,0x76},{0xbe,0xa5},{0xbc,0x5b},{0x99,0x77},{0xe5,0x4a}, {0xe5,0x50},{0x00,0x00},{0xbc,0x5a},{0xe5,0x4f},{0x99,0x78}, {0xe5,0x4c},{0x81,0xc7},{0xbc,0x58},{0x00,0x00},{0x99,0x79}, {0x99,0x7a},{0x00,0x00},{0x81,0xc8},{0x94,0x6e},{0xe9,0x4d}, {0xf9,0xd9},{0xe9,0x4f},{0xe9,0x4a},{0xbe,0xc1},{0xe9,0x4c}, {0x00,0x00},{0xbe,0xc0},{0xe9,0x4e},{0x00,0x00},{0x00,0x00}, {0xbe,0xc3},{0xe9,0x50},{0xbe,0xc2},{0xe9,0x49},{0xe9,0x4b}, {0x92,0x5c},{0x99,0x7b},{0x92,0xee},{0x00,0x00},{0xc0,0xa5}, {0xec,0xcc},{0x99,0x7c},{0xc0,0xa4},{0xec,0xcd},{0xc0,0xa3}, {0xec,0xcb},{0xc0,0xa2},{0xec,0xca},{0x94,0x6f},{0xc2,0x53}, {0xc2,0x52},{0xf1,0xf6},{0xf1,0xf8},{0xfb,0xf0},{0xf1,0xf7}, {0xc3,0x61},{0xc3,0x62},{0x99,0x7d},{0x00,0x00},{0xc3,0x63}, {0xf4,0x42},{0xc4,0x5b},{0x81,0xc9},{0x00,0x00},{0xf7,0xd3}, {0xf7,0xd2},{0xc5,0xf2},{0x00,0x00},{0xa4,0x68},{0xa4,0xd0}, {0x00,0x00},{0x83,0x47},{0xa7,0xa7},{0x8a,0x52},{0x92,0x45}, {0x93,0xb3},{0x84,0xea},{0xce,0x5f},{0x00,0x00},{0x84,0xd4}, {0x82,0x41},{0x00,0x00},{0xb3,0xfc},{0xb3,0xfd},{0x81,0xca}, {0xdc,0xf2},{0xb9,0xd8},{0xe1,0x69},{0xe5,0x53},{0x00,0x00}, {0x00,0x00},{0x81,0xcb},{0xc9,0x5a},{0x84,0x7a},{0x99,0x7e}, {0xca,0xb0},{0x84,0xc2},{0x00,0x00},{0x93,0xc4},{0xc6,0xca}, {0x81,0xcc},{0xcc,0x42},{0xce,0x60},{0xd1,0x59},{0xae,0x4c}, {0x81,0xcd},{0x99,0xa1},{0xf1,0xf9},{0x00,0x00},{0xc4,0xdc}, {0xa4,0x69},{0xa5,0x7e},{0xc9,0x70},{0x81,0xce},{0xa6,0x67}, {0xa6,0x68},{0x81,0xcf},{0xa9,0x5d},{0x9d,0x58},{0x00,0x00}, {0x83,0xfa},{0xb0,0xf7},{0x00,0x00},{0xb9,0xda},{0x00,0x00}, {0xb9,0xdb},{0xb9,0xd9},{0x00,0x00},{0xa4,0x6a},{0x00,0x00}, {0xa4,0xd1},{0xa4,0xd3},{0xa4,0xd2},{0xc9,0x5b},{0xa4,0xd4}, {0xa5,0xa1},{0xc9,0x71},{0x00,0x00},{0xa5,0xa2},{0x82,0xb5}, {0x00,0x00},{0x89,0xb3},{0x00,0x00},{0x00,0x00},{0xa6,0x69}, {0xa6,0x6a},{0x83,0x48},{0x86,0xbc},{0x00,0x00},{0xc9,0xcb}, {0x00,0x00},{0xa7,0xa8},{0x00,0x00},{0xca,0xb1},{0x86,0xbd}, {0x83,0x6b},{0x00,0x00},{0xa9,0x61},{0xcc,0x43},{0x00,0x00}, {0xa9,0x5f},{0xa9,0x60},{0xa9,0x5e},{0xd1,0x5a},{0x88,0xd2}, {0x00,0x00},{0x00,0x00},{0xab,0xb6},{0xab,0xb5},{0xab,0xb7}, {0xab,0xb4},{0x00,0x00},{0xce,0x61},{0xa9,0x62},{0xab,0xb3}, {0x87,0xf2},{0xae,0x4d},{0xae,0x4e},{0x00,0x00},{0xae,0x4f}, {0x82,0xb6},{0xd4,0xcd},{0x82,0xb7},{0x00,0x00},{0x00,0x00}, {0xb3,0xfe},{0xd8,0xb4},{0xb0,0xf8},{0x82,0xb8},{0x00,0x00}, {0x85,0xc4},{0x00,0x00},{0xb6,0xf8},{0x92,0xe6},{0xb9,0xdd}, {0xb9,0xdc},{0xe1,0x6a},{0x82,0xb9},{0xbc,0x5d},{0xbe,0xc4}, {0x00,0x00},{0xef,0xc0},{0xf6,0xda},{0xf7,0xd4},{0xa4,0x6b}, {0xa5,0xa3},{0xfe,0x66},{0xa5,0xa4},{0xc9,0xd1},{0xa6,0x6c}, {0xa6,0x6f},{0x00,0x00},{0xc9,0xcf},{0xc9,0xcd},{0xa6,0x6e}, {0xc9,0xd0},{0xc9,0xd2},{0xc9,0xcc},{0xa6,0x71},{0xa6,0x70}, {0xa6,0x6d},{0xa6,0x6b},{0xc9,0xce},{0x83,0x49},{0x83,0xfc}, {0x85,0xc5},{0x99,0xa2},{0xa7,0xb3},{0x00,0x00},{0x00,0x00}, {0xa7,0xb0},{0xca,0xb6},{0xca,0xb9},{0xca,0xb8},{0x00,0x00}, {0xa7,0xaa},{0xa7,0xb2},{0x99,0xa3},{0x00,0x00},{0xa7,0xaf}, {0xca,0xb5},{0xca,0xb3},{0xa7,0xae},{0x99,0xa4},{0x82,0xba}, {0x00,0x00},{0xa7,0xa9},{0xa7,0xac},{0x99,0xa5},{0xca,0xb4}, {0xca,0xbb},{0xca,0xb7},{0xa7,0xad},{0xa7,0xb1},{0xa7,0xb4}, {0xca,0xb2},{0xca,0xba},{0xa7,0xab},{0x87,0xbb},{0x86,0xbe}, {0x8d,0xdb},{0x95,0xa5},{0x00,0x00},{0xa9,0x67},{0xa9,0x6f}, {0x99,0xa6},{0xcc,0x4f},{0xcc,0x48},{0xa9,0x70},{0xcc,0x53}, {0xcc,0x44},{0xcc,0x4b},{0xfb,0xf1},{0x99,0xa7},{0xa9,0x66}, {0xcc,0x45},{0xa9,0x64},{0xcc,0x4c},{0xcc,0x50},{0xa9,0x63}, {0x9b,0x40},{0xcc,0x51},{0xcc,0x4a},{0x00,0x00},{0xcc,0x4d}, {0x99,0xa8},{0xa9,0x72},{0xa9,0x69},{0xcc,0x54},{0xcc,0x52}, {0x93,0xfc},{0xa9,0x6e},{0xa9,0x6c},{0xcc,0x49},{0xa9,0x6b}, {0xcc,0x47},{0xcc,0x46},{0xa9,0x6a},{0xa9,0x68},{0xa9,0x71}, {0xa9,0x6d},{0xa9,0x65},{0x00,0x00},{0xcc,0x4e},{0x82,0xbb}, {0xab,0xb9},{0xfb,0xf2},{0xab,0xc0},{0xce,0x6f},{0xab,0xb8}, {0xce,0x67},{0xce,0x63},{0x00,0x00},{0xce,0x73},{0xce,0x62}, {0x00,0x00},{0xab,0xbb},{0xce,0x6c},{0xab,0xbe},{0xab,0xc1}, {0x00,0x00},{0xab,0xbc},{0xce,0x70},{0xab,0xbf},{0x82,0xbc}, {0xae,0x56},{0xce,0x76},{0xce,0x64},{0x99,0xa9},{0x99,0xaa}, {0xce,0x66},{0xce,0x6d},{0xce,0x71},{0xce,0x75},{0xce,0x72}, {0xce,0x6b},{0xce,0x6e},{0x99,0xab},{0x95,0xc0},{0xce,0x68}, {0xab,0xc3},{0xce,0x6a},{0xce,0x69},{0xce,0x74},{0xab,0xba}, {0xce,0x65},{0xab,0xc2},{0x99,0xac},{0xab,0xbd},{0x83,0xfb}, {0x8d,0xcc},{0x87,0xbd},{0x87,0xbc},{0x90,0x55},{0xae,0x5c}, {0xd1,0x62},{0x99,0xad},{0xae,0x5b},{0x99,0xae},{0x00,0x00}, {0xd1,0x60},{0x00,0x00},{0xae,0x50},{0x99,0xaf},{0xae,0x55}, {0x00,0x00},{0xd1,0x5f},{0xd1,0x5c},{0xd1,0x61},{0xae,0x51}, {0xd1,0x5b},{0x82,0xbd},{0xae,0x54},{0xae,0x52},{0x00,0x00}, {0xd1,0x63},{0xae,0x53},{0xae,0x57},{0x99,0xb0},{0x00,0x00}, {0xae,0x58},{0x99,0xb1},{0xae,0x5a},{0x00,0x00},{0x99,0xb2}, {0x00,0x00},{0xae,0x59},{0x99,0xb3},{0x99,0xb4},{0x99,0xb5}, {0xd1,0x5d},{0xd1,0x5e},{0x92,0xbc},{0x00,0x00},{0x83,0xb1}, {0x84,0xd5},{0xd1,0x64},{0x87,0xb9},{0xd4,0xd4},{0xb0,0xf9}, {0xd8,0xc2},{0xd4,0xd3},{0xd4,0xe6},{0x00,0x00},{0x00,0x00}, {0xb1,0x40},{0x99,0xb6},{0xd4,0xe4},{0x00,0x00},{0xb0,0xfe}, {0xb0,0xfa},{0xd4,0xed},{0xd4,0xdd},{0xd4,0xe0},{0x99,0xb7}, {0xb1,0x43},{0xd4,0xea},{0xd4,0xe2},{0xb0,0xfb},{0xb1,0x44}, {0x00,0x00},{0xd4,0xe7},{0xd4,0xe5},{0x00,0x00},{0x00,0x00}, {0xd4,0xd6},{0xd4,0xeb},{0xd4,0xdf},{0xd4,0xda},{0x99,0xb8}, {0xd4,0xd0},{0xd4,0xec},{0xd4,0xdc},{0xd4,0xcf},{0x99,0xb9}, {0xb1,0x42},{0xd4,0xe1},{0xd4,0xee},{0xd4,0xde},{0xd4,0xd2}, {0xd4,0xd7},{0xd4,0xce},{0x99,0xba},{0xb1,0x41},{0x95,0x63}, {0xd4,0xdb},{0xd4,0xd8},{0xb0,0xfc},{0xd4,0xd1},{0x99,0xbb}, {0xd4,0xe9},{0xb0,0xfd},{0x99,0xbc},{0xd4,0xd9},{0xd4,0xd5}, {0x99,0xbd},{0x00,0x00},{0xd4,0xe8},{0x99,0xbe},{0x00,0x00}, {0x00,0x00},{0x89,0xcf},{0x87,0xba},{0x8a,0xc1},{0xb4,0x40}, {0xd8,0xbb},{0x99,0xbf},{0xd8,0xb8},{0xd8,0xc9},{0xd8,0xbd}, {0xd8,0xca},{0x99,0xc0},{0xb4,0x42},{0x00,0x00},{0x99,0xc1}, {0x99,0xc2},{0xd8,0xc6},{0xd8,0xc3},{0x00,0x00},{0x99,0xc3}, {0x00,0x00},{0x99,0xc4},{0x00,0x00},{0xd8,0xc4},{0xd8,0xc7}, {0xd8,0xcb},{0x00,0x00},{0xd4,0xe3},{0xd8,0xcd},{0xdd,0x47}, {0x99,0xc5},{0xb4,0x43},{0xd8,0xce},{0xd8,0xb6},{0xd8,0xc0}, {0xfe,0x78},{0xd8,0xc5},{0x00,0x00},{0x99,0xc6},{0xb4,0x41}, {0xb4,0x44},{0xd8,0xcc},{0xd8,0xcf},{0xd8,0xba},{0xd8,0xb7}, {0x99,0xc7},{0x99,0xc8},{0xd8,0xb9},{0x00,0x00},{0x9c,0x70}, {0xd8,0xbe},{0xd8,0xbc},{0xb4,0x45},{0x00,0x00},{0xd8,0xc8}, {0x82,0xbe},{0x99,0xc9},{0xd8,0xbf},{0x00,0x00},{0xd8,0xc1}, {0xd8,0xb5},{0xdc,0xfa},{0xdc,0xf8},{0xb7,0x42},{0xb7,0x40}, {0xdd,0x43},{0xdc,0xf9},{0xdd,0x44},{0xdd,0x40},{0xdc,0xf7}, {0xdd,0x46},{0xdc,0xf6},{0xdc,0xfd},{0xb6,0xfe},{0xb6,0xfd}, {0xb6,0xfc},{0xdc,0xfb},{0xdd,0x41},{0xb6,0xf9},{0xb7,0x41}, {0x99,0xca},{0xdc,0xf4},{0x00,0x00},{0xdc,0xfe},{0xdc,0xf3}, {0xdc,0xfc},{0xb6,0xfa},{0xdd,0x42},{0xdc,0xf5},{0xb6,0xfb}, {0xdd,0x45},{0x99,0xcb},{0x99,0xcc},{0x82,0xbf},{0x9d,0x67}, {0x8e,0xe5},{0x99,0xcd},{0x89,0xd0},{0xe1,0x6e},{0xb9,0xe2}, {0xb9,0xe1},{0xb9,0xe3},{0xe1,0x7a},{0xe1,0x70},{0xe1,0x76}, {0xe1,0x6b},{0xe1,0x79},{0xe1,0x78},{0xe1,0x7c},{0xe1,0x75}, {0xb9,0xde},{0xe1,0x74},{0xb9,0xe4},{0x99,0xce},{0xe1,0x6d}, {0xb9,0xdf},{0x00,0x00},{0xe1,0x7b},{0xb9,0xe0},{0xe1,0x6f}, {0xe1,0x72},{0xe1,0x77},{0xe1,0x71},{0xe1,0x6c},{0x00,0x00}, {0x99,0xcf},{0x82,0xc0},{0xfb,0x67},{0xe1,0x73},{0xe5,0x55}, {0xbc,0x61},{0xe5,0x58},{0xe5,0x57},{0xe5,0x5a},{0xe5,0x5c}, {0xf9,0xdc},{0xbc,0x5f},{0x00,0x00},{0xe5,0x56},{0x99,0xd0}, {0xe5,0x54},{0x00,0x00},{0xe5,0x5d},{0xe5,0x5b},{0xe5,0x59}, {0x00,0x00},{0xe5,0x5f},{0x00,0x00},{0xe5,0x5e},{0xbc,0x63}, {0xbc,0x5e},{0x00,0x00},{0xbc,0x60},{0xbc,0x62},{0x99,0xd1}, {0x00,0x00},{0xe5,0x60},{0xe9,0x57},{0x99,0xd2},{0x00,0x00}, {0xe9,0x56},{0xe9,0x55},{0x99,0xd3},{0xe9,0x58},{0xe9,0x51}, {0x00,0x00},{0xe9,0x52},{0xe9,0x5a},{0xe9,0x53},{0x00,0x00}, {0xbe,0xc5},{0xe9,0x5c},{0x99,0xd4},{0xe9,0x5b},{0xe9,0x54}, {0x92,0xef},{0xec,0xd1},{0xc0,0xa8},{0xec,0xcf},{0xec,0xd4}, {0xec,0xd3},{0xe9,0x59},{0x00,0x00},{0xc0,0xa7},{0x99,0xd5}, {0xec,0xd2},{0xec,0xce},{0xec,0xd6},{0xec,0xd5},{0xc0,0xa6}, {0x00,0x00},{0xec,0xd0},{0x00,0x00},{0xbe,0xc6},{0x00,0x00}, {0x82,0xc1},{0x89,0xd1},{0xc2,0x54},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xef,0xc1},{0xf1,0xfa},{0xf1,0xfb},{0xf1,0xfc}, {0xc4,0x5c},{0x99,0xd6},{0x00,0x00},{0xc4,0x5d},{0x99,0xd7}, {0xf4,0x43},{0x99,0xd8},{0xf5,0xc8},{0xf5,0xc7},{0x00,0x00}, {0x99,0xd9},{0xf6,0xdb},{0xf6,0xdc},{0xf7,0xd5},{0xf8,0xa7}, {0x99,0xda},{0xa4,0x6c},{0xa4,0x6d},{0x00,0x00},{0xa4,0x6e}, {0xa4,0xd5},{0xa5,0xa5},{0xc9,0xd3},{0xa6,0x72},{0xa6,0x73}, {0x83,0xb2},{0xa7,0xb7},{0xa7,0xb8},{0xa7,0xb6},{0xa7,0xb5}, {0x00,0x00},{0xa9,0x73},{0x00,0x00},{0x00,0x00},{0xcc,0x55}, {0xa9,0x75},{0xa9,0x74},{0xcc,0x56},{0x88,0xd4},{0x00,0x00}, {0x99,0xdb},{0xab,0xc4},{0x8c,0xcb},{0xae,0x5d},{0xd1,0x65}, {0xa0,0x41},{0xd4,0xf0},{0x00,0x00},{0xb1,0x45},{0xb4,0x47}, {0xd4,0xef},{0xb4,0x46},{0x99,0xdc},{0xb9,0xe5},{0x99,0xdd}, {0xe1,0x7d},{0xbe,0xc7},{0x00,0x00},{0xc0,0xa9},{0xec,0xd7}, {0x99,0xde},{0xc4,0x5e},{0x00,0x00},{0xc5,0x70},{0xc6,0xcb}, {0xc9,0x72},{0x99,0xdf},{0xa5,0xa6},{0xc9,0x73},{0xa6,0x76}, {0x00,0x00},{0xa6,0x74},{0xa6,0x75},{0xa6,0x77},{0x00,0x00}, {0xa7,0xba},{0xa7,0xb9},{0x93,0xfd},{0xca,0xbc},{0xa7,0xbb}, {0x99,0xe0},{0x00,0x00},{0xca,0xbd},{0xcc,0x57},{0x00,0x00}, {0xcc,0x58},{0x9a,0x40},{0xa9,0x76},{0xa9,0x78},{0xa9,0x7a}, {0xa9,0x77},{0xa9,0x7b},{0xa9,0x79},{0x8b,0xf3},{0x86,0xbf}, {0x92,0xd4},{0x8b,0x70},{0x87,0xbf},{0xab,0xc8},{0xab,0xc5}, {0xab,0xc7},{0xab,0xc9},{0xab,0xc6},{0xd1,0x66},{0xce,0x77}, {0x00,0x00},{0x88,0xd6},{0x90,0xb3},{0xd1,0x68},{0xd1,0x67}, {0xae,0x63},{0x00,0x00},{0xae,0x5f},{0x00,0x00},{0x00,0x00}, {0xae,0x60},{0xae,0x62},{0xae,0x64},{0xae,0x61},{0x9d,0x68}, {0xae,0x66},{0xae,0x65},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x87,0xbe},{0x87,0x59},{0xb1,0x4a},{0xd4,0xf2},{0xd4,0xf1}, {0xb1,0x49},{0xfc,0x43},{0xb1,0x48},{0xb1,0x47},{0xb1,0x4b}, {0xb1,0x46},{0x00,0x00},{0x82,0xc2},{0xd8,0xd5},{0xd8,0xd2}, {0xb4,0x49},{0xd8,0xd1},{0xd8,0xd6},{0x00,0x00},{0xb4,0x4b}, {0xd8,0xd4},{0xb4,0x48},{0xb4,0x4a},{0xd8,0xd3},{0x9a,0x55}, {0xdd,0x48},{0x9a,0x56},{0xdd,0x49},{0xdd,0x4a},{0x00,0x00}, {0x92,0x69},{0x00,0x00},{0x86,0xc0},{0xb9,0xe6},{0xb9,0xee}, {0xe1,0x7e},{0xb9,0xe8},{0xb9,0xec},{0xe1,0xa1},{0xb9,0xed}, {0xb9,0xe9},{0xb9,0xea},{0xb9,0xe7},{0xb9,0xeb},{0xbc,0x66}, {0xd8,0xd0},{0xbc,0x67},{0xbc,0x65},{0x00,0x00},{0xbc,0x64}, {0xe9,0x5d},{0xbe,0xc8},{0xec,0xd8},{0xec,0xd9},{0x82,0xc3}, {0x00,0x00},{0xc3,0x64},{0xc4,0x5f},{0x00,0x00},{0xa4,0x6f}, {0x86,0xc1},{0xa6,0x78},{0x84,0xd6},{0x88,0xd5},{0x00,0x00}, {0x93,0x66},{0x86,0xba},{0x00,0x00},{0xab,0xca},{0x93,0x47}, {0xd1,0x69},{0xae,0x67},{0x95,0x5b},{0x92,0xe2},{0xb1,0x4e}, {0xb1,0x4d},{0xb1,0x4c},{0xb4,0x4c},{0xb4,0x4d},{0xd8,0xd7}, {0xb9,0xef},{0xbe,0xc9},{0xa4,0x70},{0xc9,0x5c},{0xa4,0xd6}, {0xc9,0x74},{0x82,0xc4},{0x86,0xe0},{0xc9,0xd4},{0xa6,0x79}, {0x00,0x00},{0x86,0xb7},{0x00,0x00},{0xa9,0x7c},{0x00,0x00}, {0x82,0xc5},{0x86,0xaf},{0x82,0xc6},{0xdd,0x4b},{0xfb,0xf3}, {0x00,0x00},{0xa4,0x71},{0x9a,0x57},{0xa4,0xd7},{0xc9,0xd5}, {0x00,0x00},{0x84,0xd0},{0xca,0xbe},{0x00,0x00},{0xca,0xbf}, {0x00,0x00},{0xa7,0xbc},{0x82,0x59},{0x00,0x00},{0x00,0x00}, {0xd8,0xd8},{0xb4,0x4e},{0x00,0x00},{0xdd,0x4c},{0x89,0xd2}, {0x00,0x00},{0x00,0x00},{0xc0,0xaa},{0xa4,0x72},{0xa4,0xa8}, {0xa4,0xd8},{0xc9,0x75},{0xa5,0xa7},{0x86,0xe9},{0xa7,0xc0}, {0xa7,0xbf},{0xa7,0xbd},{0xa7,0xbe},{0x87,0xc1},{0x00,0x00}, {0xcc,0x59},{0xa9,0x7e},{0xa9,0xa1},{0xcc,0x5a},{0xa9,0x7d}, {0x84,0x40},{0x83,0x57},{0xab,0xce},{0xce,0x78},{0xab,0xcd}, {0xab,0xcb},{0xab,0xcc},{0xae,0x6a},{0xae,0x68},{0x00,0x00}, {0x82,0xc7},{0xd1,0x6b},{0xae,0x69},{0xd1,0x6a},{0x00,0x00}, {0xae,0x5e},{0xd4,0xf3},{0x00,0x00},{0x00,0x00},{0xb1,0x50}, {0xb1,0x51},{0x8c,0x70},{0x00,0x00},{0xb1,0x4f},{0x86,0xc2}, {0xb9,0xf0},{0xe1,0xa2},{0xbc,0x68},{0xbc,0x69},{0x89,0xd3}, {0xe5,0x61},{0xc0,0xab},{0xef,0xc2},{0xef,0xc3},{0x00,0x00}, {0xc4,0xdd},{0xf8,0xa8},{0xc9,0x4b},{0xa4,0xd9},{0x00,0x00}, {0xa4,0x73},{0x00,0x00},{0xc9,0x77},{0xc9,0x76},{0x00,0x00}, {0x94,0x70},{0x00,0x00},{0x9d,0x64},{0xa6,0x7a},{0xc9,0xd7}, {0xc9,0xd8},{0xc9,0xd6},{0x00,0x00},{0xc9,0xd9},{0x89,0xd4}, {0x00,0x00},{0x85,0xd7},{0x83,0xdb},{0x00,0x00},{0x00,0x00}, {0x9a,0x58},{0xca,0xc7},{0x00,0x00},{0xca,0xc2},{0xca,0xc4}, {0xca,0xc6},{0xca,0xc3},{0xa7,0xc4},{0xca,0xc0},{0x00,0x00}, {0xca,0xc1},{0xa7,0xc1},{0xa7,0xc2},{0xca,0xc5},{0xca,0xc8}, {0xa7,0xc3},{0xca,0xc9},{0x86,0xc4},{0x84,0x42},{0x83,0xb5}, {0x82,0xc8},{0x84,0xd7},{0x83,0xb4},{0x82,0xc9},{0xcc,0x68}, {0x9a,0x59},{0xcc,0x62},{0xcc,0x5d},{0xa9,0xa3},{0xcc,0x65}, {0xcc,0x63},{0xcc,0x5c},{0xcc,0x69},{0xcc,0x6c},{0xcc,0x67}, {0xcc,0x60},{0xa9,0xa5},{0xcc,0x66},{0xa9,0xa6},{0xcc,0x61}, {0xcc,0x64},{0xcc,0x5b},{0xcc,0x5f},{0xcc,0x6b},{0xa9,0xa7}, {0x00,0x00},{0xa9,0xa8},{0x00,0x00},{0xcc,0x5e},{0xcc,0x6a}, {0xa9,0xa2},{0xa9,0xa4},{0x00,0x00},{0x82,0xca},{0x82,0xcb}, {0x94,0x71},{0x8d,0xcd},{0x94,0x73},{0x8f,0xfc},{0x00,0x00}, {0x82,0xcc},{0x9a,0x5a},{0x00,0x00},{0x8e,0xe6},{0x94,0x72}, {0xce,0xab},{0xce,0xa4},{0xce,0xaa},{0xce,0xa3},{0xce,0xa5}, {0xce,0x7d},{0xce,0x7b},{0x00,0x00},{0xce,0xac},{0xce,0xa9}, {0xce,0x79},{0xfb,0xf5},{0xab,0xd0},{0xce,0xa7},{0xce,0xa8}, {0x9d,0x71},{0xce,0xa6},{0xce,0x7c},{0xce,0x7a},{0xab,0xcf}, {0xce,0xa2},{0xce,0x7e},{0x00,0x00},{0x00,0x00},{0xce,0xa1}, {0xce,0xad},{0x94,0x50},{0x83,0xb3},{0x00,0x00},{0x00,0x00}, {0x8e,0xb4},{0x84,0x41},{0x8c,0xcd},{0x00,0x00},{0xae,0x6f}, {0xfb,0xf6},{0xae,0x6e},{0x00,0x00},{0xd1,0x6c},{0xae,0x6b}, {0xd1,0x6e},{0x95,0x5d},{0xae,0x70},{0xd1,0x6f},{0x00,0x00}, {0x00,0x00},{0xae,0x73},{0x82,0xcd},{0xae,0x71},{0xd1,0x70}, {0xce,0xae},{0xd1,0x72},{0x82,0xce},{0xae,0x6d},{0x9d,0x69}, {0xae,0x6c},{0x00,0x00},{0xd1,0x6d},{0xd1,0x71},{0xae,0x72}, {0x8e,0xb3},{0x8d,0xce},{0x00,0x00},{0x00,0x00},{0xb1,0x53}, {0xb1,0x52},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xd4,0xf5}, {0xd4,0xf9},{0xd4,0xfb},{0xb1,0x54},{0xd4,0xfe},{0x9a,0x5b}, {0xb1,0x58},{0xd5,0x41},{0x00,0x00},{0xb1,0x5a},{0x82,0xcf}, {0xb1,0x56},{0xb1,0x5e},{0x82,0xd0},{0xb1,0x5b},{0xd4,0xf7}, {0xb1,0x55},{0x00,0x00},{0xd4,0xf6},{0xd4,0xf4},{0xd5,0x43}, {0xd4,0xf8},{0x00,0x00},{0xb1,0x57},{0xd5,0x42},{0xb1,0x5c}, {0xd4,0xfd},{0xd4,0xfc},{0xb1,0x5d},{0xd4,0xfa},{0xb1,0x59}, {0x00,0x00},{0x00,0x00},{0x9a,0x5c},{0x86,0xc3},{0xd5,0x44}, {0x9a,0x5d},{0xd5,0x40},{0xd8,0xe7},{0xd8,0xee},{0xd8,0xe3}, {0xb4,0x51},{0xd8,0xdf},{0xd8,0xef},{0xd8,0xd9},{0xd8,0xec}, {0xd8,0xea},{0xd8,0xe4},{0x00,0x00},{0xd8,0xed},{0xd8,0xe6}, {0x82,0xd1},{0xd8,0xde},{0xd8,0xf0},{0xd8,0xdc},{0xd8,0xe9}, {0xd8,0xda},{0x00,0x00},{0xd8,0xf1},{0xfb,0xf7},{0xb4,0x52}, {0x9a,0x5e},{0xd8,0xeb},{0xdd,0x4f},{0xd8,0xdd},{0xb4,0x4f}, {0x00,0x00},{0xd8,0xe1},{0x00,0x00},{0xb4,0x50},{0xd8,0xe0}, {0xd8,0xe5},{0x82,0xd2},{0x00,0x00},{0xd8,0xe2},{0x9a,0x5f}, {0x95,0x65},{0x89,0xd5},{0xd8,0xe8},{0x00,0x00},{0x8d,0xdc}, {0x82,0xd3},{0x8e,0x67},{0xdd,0x53},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xdd,0x56},{0xdd,0x4e},{0x00,0x00},{0xdd,0x50}, {0x00,0x00},{0xdd,0x55},{0xdd,0x54},{0xb7,0x43},{0x00,0x00}, {0xd8,0xdb},{0xdd,0x52},{0x82,0xd4},{0x00,0x00},{0xb7,0x44}, {0x9a,0x60},{0xdd,0x4d},{0xdd,0x51},{0x82,0xd5},{0x82,0xd6}, {0xfe,0x7e},{0x94,0x74},{0xe1,0xa9},{0x9d,0x7a},{0xe1,0xb0}, {0xe1,0xa7},{0x9a,0x61},{0xe1,0xae},{0xe1,0xa5},{0xe1,0xad}, {0xe1,0xb1},{0xe1,0xa4},{0xe1,0xa8},{0xe1,0xa3},{0x00,0x00}, {0xb9,0xf1},{0x9a,0x62},{0xe1,0xa6},{0xb9,0xf2},{0xe1,0xac}, {0xe1,0xab},{0xe1,0xaa},{0x93,0xfe},{0x82,0xd7},{0xe1,0xaf}, {0xfb,0xf8},{0x00,0x00},{0x82,0xd8},{0x00,0x00},{0xe5,0x65}, {0xe5,0x67},{0xbc,0x6b},{0xe5,0x68},{0x00,0x00},{0xe5,0x63}, {0x00,0x00},{0xe5,0x62},{0xe5,0x6c},{0x00,0x00},{0xe5,0x6a}, {0xbc,0x6a},{0xe5,0x6d},{0xe5,0x64},{0xe5,0x69},{0xe5,0x6b}, {0xe5,0x66},{0x00,0x00},{0x9a,0x63},{0x00,0x00},{0x00,0x00}, {0xe9,0x61},{0xe9,0x66},{0xe9,0x60},{0xe9,0x65},{0x9a,0x64}, {0xe9,0x5e},{0xe9,0x68},{0xe9,0x64},{0xe9,0x69},{0xe9,0x63}, {0xe9,0x5f},{0xe9,0x67},{0x00,0x00},{0xe9,0x6a},{0xe9,0x62}, {0x9a,0x65},{0xec,0xda},{0xc0,0xaf},{0x82,0xd9},{0xc0,0xad}, {0x00,0x00},{0xc0,0xac},{0xc0,0xae},{0x00,0x00},{0x00,0x00}, {0xef,0xc4},{0x9a,0x66},{0xf1,0x72},{0xf1,0xfd},{0x00,0x00}, {0x8c,0xcc},{0xf4,0x44},{0xf4,0x45},{0x00,0x00},{0xc4,0x60}, {0x00,0x00},{0xf5,0xc9},{0x82,0x53},{0xc4,0xde},{0x00,0x00}, {0xf5,0xca},{0x82,0xda},{0xf6,0xde},{0xc5,0x72},{0x82,0xdb}, {0xc5,0x71},{0xf6,0xdd},{0xc5,0xc9},{0x9a,0x67},{0xf7,0xd6}, {0x00,0x00},{0x00,0x00},{0xc6,0xcc},{0x00,0x00},{0xa4,0x74}, {0xa6,0x7b},{0xc9,0xda},{0xca,0xca},{0xa8,0xb5},{0xb1,0x5f}, {0x93,0x57},{0x00,0x00},{0xa4,0x75},{0xa5,0xaa},{0xa5,0xa9}, {0xa5,0xa8},{0x88,0xb2},{0x00,0x00},{0xa7,0xc5},{0x00,0x00}, {0x00,0x00},{0xae,0x74},{0x8e,0x43},{0xdd,0x57},{0xa4,0x76}, {0xa4,0x77},{0xa4,0x78},{0xa4,0xda},{0xfb,0xfa},{0x00,0x00}, {0xab,0xd1},{0x00,0x00},{0xce,0xaf},{0x00,0x00},{0x92,0x66}, {0x00,0x00},{0xb4,0x53},{0xa4,0x79},{0xc9,0x5d},{0x00,0x00}, {0x86,0xc5},{0xa5,0xab},{0xa5,0xac},{0xc9,0x78},{0x83,0x6c}, {0xa6,0x7c},{0x00,0x00},{0x83,0xb6},{0x9a,0x68},{0xca,0xcb}, {0xfb,0xfb},{0xa7,0xc6},{0x00,0x00},{0xca,0xcc},{0x84,0xd9}, {0x84,0x44},{0xa9,0xae},{0xfb,0xfc},{0x00,0x00},{0xcc,0x6e}, {0xa9,0xac},{0xa9,0xab},{0xcc,0x6d},{0xa9,0xa9},{0xcc,0x6f}, {0xa9,0xaa},{0xa9,0xad},{0x87,0xc3},{0xab,0xd2},{0x00,0x00}, {0xab,0xd4},{0xce,0xb3},{0xce,0xb0},{0xce,0xb1},{0xce,0xb2}, {0xce,0xb4},{0xab,0xd3},{0x84,0x43},{0x84,0xd8},{0xd1,0x74}, {0xd1,0x73},{0x00,0x00},{0xae,0x76},{0x00,0x00},{0xae,0x75}, {0x89,0xd6},{0x93,0x67},{0x92,0x6f},{0x8f,0x50},{0x00,0x00}, {0xb1,0x62},{0xd5,0x46},{0x00,0x00},{0xb1,0x61},{0xb1,0x63}, {0xb1,0x60},{0x00,0x00},{0x00,0x00},{0x8e,0x68},{0x86,0xc6}, {0xb4,0x55},{0xd5,0x45},{0x00,0x00},{0xb4,0x56},{0xd8,0xf3}, {0x88,0xcb},{0xb4,0x57},{0xd8,0xf2},{0xb4,0x54},{0x00,0x00}, {0x82,0xdc},{0x9a,0x69},{0x00,0x00},{0xdd,0x5a},{0xdd,0x5c}, {0xb7,0x45},{0xdd,0x5b},{0xdd,0x59},{0xdd,0x58},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xe1,0xb4},{0xb9,0xf7},{0xb9,0xf5}, {0x00,0x00},{0xb9,0xf6},{0xe1,0xb2},{0xe1,0xb3},{0x00,0x00}, {0xb9,0xf3},{0xe5,0x71},{0xe5,0x6f},{0xfb,0xfe},{0xbc,0x6d}, {0xe5,0x70},{0xbc,0x6e},{0xbc,0x6c},{0xb9,0xf4},{0x82,0xdd}, {0x00,0x00},{0xe9,0x6d},{0xe9,0x6b},{0xe9,0x6c},{0xe5,0x6e}, {0xec,0xdc},{0xc0,0xb0},{0xec,0xdb},{0xef,0xc5},{0xef,0xc6}, {0xe9,0x6e},{0xf1,0xfe},{0x00,0x00},{0xa4,0x7a},{0xa5,0xad}, {0xa6,0x7e},{0xc9,0xdb},{0xa6,0x7d},{0x00,0x00},{0xa9,0xaf}, {0xb7,0x46},{0xc6,0xcd},{0xa4,0xdb},{0xa5,0xae},{0xab,0xd5}, {0xb4,0x58},{0xc6,0xce},{0xc9,0x79},{0x93,0x75},{0xc9,0x7a}, {0x92,0xbe},{0xc9,0xdc},{0x00,0x00},{0x87,0xca},{0xa7,0xc8}, {0xca,0xd0},{0xca,0xce},{0xa7,0xc9},{0xca,0xcd},{0xca,0xcf}, {0xca,0xd1},{0x00,0x00},{0xa7,0xc7},{0x8b,0x72},{0x8e,0xb5}, {0x9a,0x6a},{0x83,0xb7},{0x89,0xd8},{0xa9,0xb3},{0xa9,0xb4}, {0xa9,0xb1},{0x00,0x00},{0x87,0xc6},{0xa9,0xb0},{0xce,0xb8}, {0xa9,0xb2},{0x00,0x00},{0x8b,0x71},{0x87,0xc4},{0xab,0xd6}, {0x00,0x00},{0xce,0xb7},{0xce,0xb9},{0xce,0xb6},{0xce,0xba}, {0xab,0xd7},{0xae,0x79},{0xd1,0x75},{0x00,0x00},{0xd1,0x77}, {0xae,0x77},{0xd1,0x78},{0xae,0x78},{0xd1,0x76},{0x00,0x00}, {0xce,0xb5},{0xd5,0x47},{0xd5,0x4a},{0xd5,0x4b},{0xd5,0x48}, {0xb1,0x67},{0xb1,0x66},{0xb1,0x64},{0xb1,0x65},{0xd5,0x49}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9a,0x6b},{0xb1,0x68}, {0x00,0x00},{0x00,0x00},{0xb4,0x5a},{0xb4,0x5b},{0x93,0xb2}, {0xb4,0x5c},{0xdd,0x5d},{0xdd,0x5f},{0xdd,0x61},{0xb7,0x48}, {0xb7,0x47},{0xb4,0x59},{0xdd,0x60},{0xdd,0x5e},{0xfe,0xa4}, {0xe1,0xb8},{0x82,0xde},{0x82,0xdf},{0xe1,0xb6},{0xe1,0xbc}, {0xb9,0xf8},{0xe1,0xbd},{0xe1,0xba},{0xb9,0xf9},{0xe1,0xb7}, {0xe1,0xb5},{0xe1,0xbb},{0xbc,0x70},{0xe5,0x73},{0xe1,0xb9}, {0xbc,0x72},{0xe5,0x74},{0xbc,0x71},{0xbc,0x74},{0xe5,0x75}, {0xbc,0x6f},{0xbc,0x73},{0x00,0x00},{0xe9,0x73},{0xe9,0x71}, {0xe9,0x70},{0xe9,0x72},{0xe9,0x6f},{0x82,0xe0},{0x00,0x00}, {0xc3,0x66},{0x00,0x00},{0xf4,0x46},{0xf4,0x47},{0x82,0xe1}, {0xf5,0xcb},{0xf6,0xdf},{0xc6,0x55},{0xc6,0xcf},{0x00,0x00}, {0xa9,0xb5},{0xa7,0xca},{0x95,0xa4},{0x95,0xa1},{0xab,0xd8}, {0x95,0xee},{0x95,0xfa},{0x00,0x00},{0xa4,0x7b},{0xa4,0xdc}, {0x85,0x7b},{0xa5,0xaf},{0xc9,0xdd},{0x84,0x56},{0xa7,0xcb}, {0xca,0xd2},{0x00,0x00},{0xce,0xbb},{0xab,0xd9},{0x82,0xe2}, {0xb9,0xfa},{0xa4,0x7c},{0x82,0xe3},{0x95,0xaa},{0x9a,0x6c}, {0xa6,0xa1},{0x93,0xae},{0x82,0xe4},{0xb7,0x49},{0xa4,0x7d}, {0xa4,0xdd},{0xa4,0xde},{0x94,0x75},{0xa5,0xb1},{0xa5,0xb0}, {0x00,0x00},{0xc9,0xde},{0xa6,0xa2},{0x00,0x00},{0xca,0xd3}, {0x00,0x00},{0xa7,0xcc},{0x84,0x45},{0x82,0xe5},{0xcc,0x71}, {0xcc,0x72},{0xcc,0x73},{0x93,0xf9},{0xa9,0xb6},{0xa9,0xb7}, {0xcc,0x70},{0xa9,0xb8},{0x8d,0xc3},{0x00,0x00},{0x00,0x00}, {0xab,0xda},{0xce,0xbc},{0x8c,0xce},{0xd1,0x7a},{0xae,0x7a}, {0x00,0x00},{0xd1,0x79},{0x82,0xe6},{0xb1,0x69},{0xd5,0x4c}, {0xb1,0x6a},{0xd5,0x4d},{0x87,0xc9},{0x84,0x46},{0x9d,0x7b}, {0xb4,0x5d},{0x00,0x00},{0x93,0x71},{0x00,0x00},{0xdd,0x62}, {0x82,0xe7},{0x00,0x00},{0xe1,0xbf},{0xe1,0xbe},{0x82,0xe8}, {0xb9,0xfb},{0x00,0x00},{0xbc,0x75},{0xe5,0x76},{0xbe,0xca}, {0xe9,0x74},{0xc0,0xb1},{0xfc,0x41},{0xc5,0x73},{0xf7,0xd8}, {0xc6,0xd0},{0x82,0xe9},{0x8a,0xd0},{0x85,0xe5},{0xcc,0x74}, {0x89,0xa3},{0xce,0xbd},{0xb1,0x6b},{0xd8,0xf4},{0xb7,0x4a}, {0x00,0x00},{0x00,0x00},{0x82,0xea},{0xc2,0x55},{0xc2,0x55}, {0x00,0x00},{0x00,0x00},{0xc6,0xd1},{0xa7,0xce},{0xfe,0xa8}, {0xa7,0xcd},{0xab,0xdb},{0x82,0xeb},{0xd1,0x7b},{0x00,0x00}, {0xb1,0x6d},{0xb3,0x43},{0xb1,0x6e},{0xb1,0x6c},{0xb4,0x5e}, {0x00,0x00},{0xe1,0xc0},{0xb9,0xfc},{0xbc,0x76},{0x9a,0x6d}, {0xc9,0x4c},{0xc9,0xdf},{0x00,0x00},{0xca,0xd5},{0xa7,0xcf}, {0xca,0xd4},{0xa7,0xd0},{0x00,0x00},{0x86,0xc7},{0xa9,0xbc}, {0xcc,0x77},{0xcc,0x76},{0xa9,0xbb},{0xa9,0xb9},{0xa9,0xba}, {0xcc,0x75},{0x82,0xec},{0x92,0xa6},{0xab,0xdd},{0xce,0xbe}, {0xab,0xe0},{0xab,0xdc},{0xab,0xe2},{0xab,0xde},{0xab,0xdf}, {0xab,0xe1},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xae,0x7d}, {0xae,0x7c},{0xae,0x7b},{0x92,0xdc},{0x00,0x00},{0x84,0x48}, {0xd5,0x4f},{0xb1,0x6f},{0xb1,0x72},{0xb1,0x70},{0x00,0x00}, {0xd5,0x4e},{0xb1,0x75},{0x00,0x00},{0xb1,0x71},{0xd5,0x50}, {0xb1,0x74},{0xb1,0x73},{0x00,0x00},{0x00,0x00},{0xfc,0x47}, {0xd8,0xf6},{0xd8,0xf5},{0x95,0x5a},{0xb4,0x61},{0xb4,0x5f}, {0xb4,0x60},{0xd8,0xf7},{0xb7,0x4b},{0xdd,0x64},{0xb7,0x4c}, {0xdd,0x63},{0x00,0x00},{0x9a,0x6e},{0xe5,0x77},{0x93,0xa8}, {0x93,0x76},{0xbc,0x78},{0xe1,0xc1},{0xbc,0x77},{0x00,0x00}, {0xb9,0xfd},{0xfc,0x48},{0xec,0xde},{0xe9,0x75},{0xc0,0xb2}, {0xec,0xdd},{0xf2,0x40},{0xf4,0x48},{0xf4,0x49},{0x9a,0x6f}, {0xa4,0xdf},{0x9c,0xf5},{0xa5,0xb2},{0x88,0xda},{0x00,0x00}, {0x00,0x00},{0xc9,0x7b},{0x00,0x00},{0x00,0x00},{0xa7,0xd2}, {0xa7,0xd4},{0x00,0x00},{0xc9,0xe2},{0xca,0xd8},{0xca,0xd7}, {0xca,0xd6},{0x00,0x00},{0xc9,0xe1},{0xc9,0xe0},{0xa6,0xa4}, {0xa7,0xd3},{0xa7,0xd1},{0xa6,0xa3},{0x00,0x00},{0x9a,0x70}, {0x92,0x4e},{0xa9,0xbd},{0xcc,0x78},{0x9a,0x71},{0xa9,0xbe}, {0xca,0xdd},{0x00,0x00},{0xca,0xdf},{0xca,0xde},{0xcc,0x79}, {0x00,0x00},{0x87,0xcc},{0xca,0xda},{0x00,0x00},{0xa7,0xd8}, {0xa7,0xd6},{0x00,0x00},{0xca,0xd9},{0xca,0xdb},{0xca,0xe1}, {0x82,0xed},{0xa7,0xd5},{0x00,0x00},{0xca,0xdc},{0xca,0xe5}, {0xa9,0xc0},{0x00,0x00},{0xca,0xe2},{0xa7,0xd7},{0x00,0x00}, {0xca,0xe0},{0xca,0xe3},{0x00,0x00},{0xa9,0xbf},{0x85,0xc7}, {0xa9,0xc1},{0xca,0xe4},{0x86,0xc8},{0x87,0xcd},{0x87,0xd1}, {0x8e,0x6b},{0x84,0x4a},{0x85,0xc8},{0x00,0x00},{0x00,0x00}, {0xcc,0xaf},{0xcc,0xa2},{0xcc,0x7e},{0xcc,0xae},{0xcc,0xa9}, {0xab,0xe7},{0xa9,0xc2},{0xcc,0xaa},{0xcc,0xad},{0xab,0xe3}, {0xcc,0xac},{0xa9,0xc3},{0xa9,0xc8},{0xa9,0xc6},{0xcc,0xa3}, {0x00,0x00},{0xcc,0x7c},{0xcc,0xa5},{0xa9,0xcd},{0xcc,0xb0}, {0xab,0xe4},{0xcc,0xa6},{0x00,0x00},{0xab,0xe5},{0xa9,0xc9}, {0xcc,0xa8},{0x9a,0x72},{0xce,0xcd},{0xab,0xe6},{0xcc,0x7b}, {0xa9,0xca},{0xab,0xe8},{0xa9,0xcb},{0xa9,0xc7},{0xa9,0xcc}, {0xcc,0xa7},{0xcc,0x7a},{0xcc,0xab},{0xa9,0xc4},{0x00,0x00}, {0x95,0xa6},{0xcc,0x7d},{0xcc,0xa4},{0xcc,0xa1},{0xa9,0xc5}, {0x00,0x00},{0xce,0xbf},{0x00,0x00},{0xce,0xc0},{0x94,0x76}, {0x8a,0x4b},{0x8f,0x74},{0x00,0x00},{0x00,0x00},{0x8e,0xe7}, {0xce,0xca},{0xd1,0xa1},{0xce,0xcb},{0xab,0xee},{0xce,0xce}, {0xce,0xc4},{0xab,0xed},{0xce,0xc6},{0x00,0x00},{0xce,0xc7}, {0x82,0xee},{0x8c,0xf6},{0xce,0xc9},{0xab,0xe9},{0x00,0x00}, {0x00,0x00},{0xae,0xa3},{0x00,0x00},{0xf9,0xda},{0xce,0xc5}, {0xce,0xc1},{0xae,0xa4},{0x00,0x00},{0x00,0x00},{0xce,0xcf}, {0xae,0x7e},{0xd1,0x7d},{0xce,0xc8},{0x00,0x00},{0xd1,0x7c}, {0xce,0xc3},{0xce,0xcc},{0x82,0xef},{0x00,0x00},{0xab,0xec}, {0xae,0xa1},{0xab,0xf2},{0xae,0xa2},{0xce,0xd0},{0xd1,0x7e}, {0xab,0xeb},{0xae,0xa6},{0xab,0xf1},{0xab,0xf0},{0xab,0xef}, {0xae,0xa5},{0xce,0xd1},{0xae,0xa7},{0xab,0xea},{0x00,0x00}, {0xce,0xc2},{0x89,0xd9},{0x00,0x00},{0x92,0xa8},{0x84,0xdc}, {0xfc,0x4b},{0x86,0xca},{0x8f,0x51},{0x85,0xc9},{0x84,0xdf}, {0x84,0xe0},{0x8d,0xdd},{0x9a,0x73},{0xb1,0x76},{0xd1,0xa4}, {0xd1,0xa6},{0x00,0x00},{0xd1,0xa8},{0xae,0xa8},{0xae,0xae}, {0xd5,0x53},{0xd1,0xac},{0xd1,0xa3},{0xb1,0x78},{0xd5,0x51}, {0x82,0xf0},{0xae,0xad},{0xae,0xab},{0xd1,0xae},{0x00,0x00}, {0xd5,0x52},{0x00,0x00},{0xd1,0xa5},{0x00,0x00},{0xae,0xac}, {0xd1,0xa9},{0xae,0xaf},{0xd1,0xab},{0x00,0x00},{0x00,0x00}, {0xae,0xaa},{0xd1,0xaa},{0xd1,0xad},{0xd1,0xa7},{0xfb,0x64}, {0xae,0xa9},{0xb1,0x79},{0x00,0x00},{0xd1,0xa2},{0xb1,0x77}, {0xfc,0x4c},{0x00,0x00},{0x82,0xf1},{0xfe,0xa6},{0xb1,0x7a}, {0x93,0xaf},{0x92,0x41},{0x8e,0x69},{0x8b,0xf4},{0x8e,0x6a}, {0x00,0x00},{0x87,0xce},{0xd5,0x55},{0xd5,0x5e},{0xb4,0x64}, {0xfc,0x4d},{0xb1,0x7c},{0xb1,0xa3},{0xb4,0x65},{0xd5,0x60}, {0xb1,0xaa},{0xd8,0xf9},{0xd5,0x56},{0xb1,0xa2},{0xb1,0xa5}, {0xb1,0x7e},{0xd5,0x54},{0xd5,0x62},{0xd5,0x65},{0xd9,0x49}, {0x00,0x00},{0xd5,0x63},{0xd8,0xfd},{0xb1,0xa1},{0xb1,0xa8}, {0xb1,0xac},{0xd5,0x5d},{0xd8,0xf8},{0xd5,0x61},{0xb1,0x7b}, {0xd8,0xfa},{0xd5,0x64},{0xd8,0xfc},{0xd5,0x59},{0x00,0x00}, {0xb4,0x62},{0x00,0x00},{0xd5,0x57},{0xd5,0x58},{0xb1,0xa7}, {0x00,0x00},{0x9a,0x74},{0xb1,0xa6},{0xd5,0x5b},{0xb1,0xab}, {0xd5,0x5f},{0xb1,0xa4},{0xd5,0x5c},{0x82,0xf2},{0xb1,0xa9}, {0xb4,0x66},{0xb4,0x63},{0xd8,0xfb},{0x82,0xad},{0xd5,0x5a}, {0x00,0x00},{0xb1,0x7d},{0x8c,0x71},{0x86,0xcc},{0x8b,0x73}, {0x00,0x00},{0x88,0xd8},{0x84,0xde},{0x86,0xcb},{0x87,0xcf}, {0x86,0xc9},{0xb4,0x6b},{0xb4,0x6f},{0xd9,0x40},{0xb7,0x51}, {0xb4,0x6d},{0xd9,0x44},{0xb4,0x71},{0xdd,0x65},{0xd9,0x46}, {0xb7,0x53},{0xb4,0x69},{0xb4,0x6c},{0xd9,0x47},{0xfc,0x4e}, {0xd9,0x48},{0xd9,0x4e},{0xb4,0x73},{0xb7,0x54},{0x00,0x00}, {0xd9,0x4a},{0xd9,0x4f},{0xd9,0x43},{0xb7,0x5e},{0x9a,0x75}, {0xb7,0x55},{0xb4,0x72},{0xd9,0x41},{0xd9,0x50},{0x9a,0x76}, {0xb7,0x5d},{0xb4,0x70},{0xb7,0x4e},{0xd9,0x4d},{0x82,0xf3}, {0xb4,0x74},{0xd9,0x45},{0xd8,0xfe},{0xb4,0x6a},{0xd9,0x42}, {0x00,0x00},{0xd9,0x4b},{0x9a,0x77},{0xb7,0x4d},{0xb7,0x52}, {0xb4,0x67},{0xd9,0x4c},{0x00,0x00},{0xb7,0x50},{0x82,0xf4}, {0x82,0xf5},{0x9a,0x78},{0xb4,0x68},{0x87,0xd0},{0x00,0x00}, {0x8e,0xb6},{0xb7,0x5c},{0xe1,0xc3},{0xdd,0x70},{0x00,0x00}, {0xdd,0x68},{0xe1,0xc2},{0x00,0x00},{0xdd,0x6c},{0xdd,0x6e}, {0xfc,0x4f},{0x00,0x00},{0xdd,0x6b},{0x00,0x00},{0xb7,0x5b}, {0x00,0x00},{0xdd,0x6a},{0xb7,0x5f},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xe1,0xd2},{0x82,0xf6},{0x82,0xf7},{0xb7,0x5a}, {0xba,0x40},{0xdd,0x71},{0xe1,0xc4},{0xfc,0xc9},{0x00,0x00}, {0xb7,0x58},{0xdd,0x69},{0xdd,0x6d},{0xb9,0xfe},{0xb7,0x4f}, {0xdd,0x66},{0xdd,0x67},{0xba,0x41},{0xb7,0x57},{0xb7,0x59}, {0xb7,0x56},{0xdd,0x6f},{0x9a,0x79},{0x8c,0x72},{0xe1,0xc8}, {0xe1,0xc9},{0xe1,0xce},{0xbc,0x7d},{0xe1,0xd5},{0x00,0x00}, {0xba,0x47},{0xfc,0x52},{0xba,0x46},{0xe1,0xd0},{0xfc,0x54}, {0xbc,0x7c},{0xe1,0xc5},{0xba,0x45},{0x9a,0x7a},{0xe1,0xd4}, {0xba,0x43},{0xba,0x44},{0x95,0xad},{0xe1,0xd1},{0xe5,0xaa}, {0xbc,0x7a},{0xb4,0x6e},{0x00,0x00},{0xe1,0xd3},{0xbc,0xa3}, {0xe1,0xcb},{0x00,0x00},{0xbc,0x7b},{0x95,0x66},{0xbc,0xa2}, {0xe1,0xc6},{0xe1,0xca},{0xe1,0xc7},{0xe1,0xcd},{0xba,0x48}, {0xbc,0x79},{0xba,0x42},{0x00,0x00},{0xe5,0x7a},{0xe1,0xcf}, {0x00,0x00},{0xbc,0xa1},{0xfc,0x53},{0xbc,0xa4},{0x00,0x00}, {0xe1,0xcc},{0x9a,0x7b},{0xbc,0x7e},{0xe5,0x79},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x95,0xd1},{0x00,0x00},{0xe5,0x7e}, {0xbe,0xce},{0xe5,0x78},{0xe9,0xa3},{0xe5,0xa9},{0xbc,0xa8}, {0x00,0x00},{0xbc,0xa6},{0xbe,0xcc},{0xe5,0xa6},{0xe5,0xa2}, {0xbc,0xac},{0x9a,0x7c},{0xe9,0x78},{0x00,0x00},{0x82,0xf8}, {0xfe,0x74},{0xbc,0xaa},{0xe5,0xa1},{0xfc,0x51},{0xe9,0x76}, {0x00,0x00},{0xe5,0xa5},{0x00,0x00},{0xe5,0xa8},{0xe5,0x7d}, {0x00,0x00},{0xbc,0xab},{0x00,0x00},{0x00,0x00},{0xbc,0xa5}, {0xe9,0x77},{0xbe,0xcd},{0xe5,0xa7},{0xbc,0xa7},{0xbc,0xa9}, {0xe5,0xa4},{0xbc,0xad},{0xe5,0xa3},{0xe5,0x7c},{0xe5,0x7b}, {0xbe,0xcb},{0xe5,0xab},{0xe9,0x7a},{0xec,0xe0},{0xbe,0xd0}, {0x82,0xf9},{0xe9,0xa2},{0x9a,0x7d},{0xe9,0x7e},{0x00,0x00}, {0xec,0xe1},{0x00,0x00},{0xbe,0xd1},{0xe9,0xa1},{0x9a,0x7e}, {0xe9,0x7c},{0xc0,0xb4},{0xec,0xdf},{0x00,0x00},{0xe9,0x79}, {0xe9,0x7b},{0xc0,0xb5},{0xbe,0xd3},{0xc0,0xb3},{0xbe,0xd2}, {0xc0,0xb7},{0xe9,0x7d},{0xbe,0xcf},{0x00,0x00},{0x9a,0xa1}, {0x92,0x5d},{0x8a,0xc2},{0x8b,0x75},{0x9a,0xa2},{0x88,0xd9}, {0x00,0x00},{0xef,0xcf},{0x00,0x00},{0xef,0xc7},{0x00,0x00}, {0x9a,0xa3},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xec,0xe7}, {0xef,0xc8},{0xec,0xe3},{0x00,0x00},{0xfc,0x56},{0xc2,0x56}, {0xec,0xe5},{0xec,0xe4},{0xc0,0xb6},{0xec,0xe2},{0xec,0xe6}, {0xef,0xd0},{0xef,0xcc},{0xef,0xce},{0x00,0x00},{0xef,0xc9}, {0xef,0xca},{0x00,0x00},{0xef,0xcd},{0xef,0xcb},{0xc3,0x67}, {0x00,0x00},{0x82,0xfa},{0xc3,0x6a},{0xc3,0x69},{0xc3,0x68}, {0xc4,0x61},{0xf4,0x4a},{0xc4,0x62},{0xf2,0x41},{0xc4,0xdf}, {0xf5,0xcc},{0xc4,0xe0},{0xc5,0x74},{0xc5,0xca},{0xf7,0xd9}, {0x00,0x00},{0xf7,0xda},{0xf7,0xdb},{0x00,0x00},{0x90,0xab}, {0xf9,0xba},{0xa4,0xe0},{0xc9,0x7c},{0xa5,0xb3},{0x8d,0xb8}, {0xa6,0xa6},{0xa6,0xa7},{0xa6,0xa5},{0x89,0xda},{0xa6,0xa8}, {0xa7,0xda},{0xa7,0xd9},{0x82,0xfb},{0xcc,0xb1},{0xa9,0xcf}, {0xa9,0xce},{0x8e,0x6d},{0x88,0xdb},{0xd1,0xaf},{0xb1,0xad}, {0xb1,0xae},{0x00,0x00},{0x82,0xfc},{0x82,0xfd},{0xb4,0x75}, {0xdd,0x72},{0xb7,0x60},{0xb7,0x61},{0xdd,0x74},{0xdd,0x76}, {0xdd,0x75},{0x93,0x49},{0xe1,0xd7},{0x00,0x00},{0xe1,0xd6}, {0xba,0x49},{0xe1,0xd8},{0x8e,0x6c},{0xe5,0xac},{0xbc,0xae}, {0x92,0x70},{0xbe,0xd4},{0x00,0x00},{0xc0,0xb8},{0xc2,0x57}, {0xc0,0xb9},{0x00,0x00},{0xa4,0xe1},{0x82,0xfe},{0x90,0xbd}, {0xfc,0x58},{0xca,0xe6},{0x93,0xec},{0x00,0x00},{0xcc,0xb2}, {0xa9,0xd1},{0xa9,0xd0},{0xa9,0xd2},{0xab,0xf3},{0xce,0xd2}, {0xce,0xd3},{0x00,0x00},{0x00,0x00},{0xd1,0xb0},{0xae,0xb0}, {0xb1,0xaf},{0xb4,0x76},{0xd9,0x51},{0xa4,0xe2},{0x9c,0xf2}, {0xa4,0x7e},{0xa4,0xe3},{0x00,0x00},{0xc9,0x7d},{0xa5,0xb7}, {0xa5,0xb6},{0xa5,0xb4},{0xa5,0xb5},{0x93,0xc1},{0x00,0x00}, {0x00,0x00},{0xa6,0xab},{0xc9,0xe9},{0xc9,0xeb},{0xa6,0xaa}, {0xc9,0xe3},{0x00,0x00},{0xc9,0xe4},{0x00,0x00},{0xc9,0xea}, {0xc9,0xe6},{0xc9,0xe8},{0xa6,0xa9},{0xc9,0xe5},{0xc9,0xec}, {0xc9,0xe7},{0x83,0xf9},{0xfc,0x59},{0x8a,0xc3},{0x84,0x4d}, {0x84,0x4b},{0x84,0xe4},{0xa7,0xe1},{0xa7,0xea},{0xa7,0xe8}, {0xca,0xf0},{0xca,0xed},{0xca,0xf5},{0xa7,0xe6},{0xca,0xf6}, {0x00,0x00},{0xa7,0xdf},{0xca,0xf3},{0x00,0x00},{0xa7,0xe5}, {0xca,0xef},{0xca,0xee},{0xa7,0xe3},{0xca,0xf4},{0xa7,0xe4}, {0xa9,0xd3},{0xa7,0xde},{0xca,0xf1},{0xfc,0x5b},{0xca,0xe7}, {0xa7,0xdb},{0xfc,0x5a},{0xa7,0xee},{0xca,0xec},{0xca,0xf2}, {0xa7,0xe0},{0xa7,0xe2},{0x00,0x00},{0xca,0xe8},{0x00,0x00}, {0xca,0xe9},{0xca,0xea},{0x9a,0xa4},{0xa7,0xed},{0xa7,0xe7}, {0xa7,0xec},{0xca,0xeb},{0xa7,0xeb},{0xa7,0xdd},{0xa7,0xdc}, {0xa7,0xe9},{0x00,0x00},{0x87,0xd7},{0x90,0xbe},{0x93,0xbb}, {0xfd,0x57},{0x93,0x6a},{0x8e,0x6e},{0x8e,0x6f},{0x84,0x4e}, {0x85,0xcb},{0x00,0x00},{0x8c,0xa8},{0x84,0xd2},{0xfc,0x5c}, {0x00,0x00},{0xa9,0xe1},{0xcc,0xbe},{0xcc,0xb7},{0xa9,0xdc}, {0xa9,0xef},{0xcc,0xb3},{0xcc,0xba},{0xcc,0xbc},{0xcc,0xbf}, {0xa9,0xea},{0x00,0x00},{0xcc,0xbb},{0xcc,0xb4},{0xa9,0xe8}, {0xcc,0xb8},{0x00,0x00},{0xcc,0xc0},{0xa9,0xd9},{0x00,0x00}, {0xcc,0xbd},{0xa9,0xe3},{0xa9,0xe2},{0xcc,0xb6},{0xa9,0xd7}, {0x00,0x00},{0x00,0x00},{0xa9,0xd8},{0xfb,0x46},{0xa9,0xd6}, {0x88,0xe3},{0xa9,0xee},{0xa9,0xe6},{0xa9,0xe0},{0xa9,0xd4}, {0xcc,0xb9},{0xa9,0xdf},{0xa9,0xd5},{0xa9,0xe7},{0xa9,0xf0}, {0xce,0xd4},{0xa9,0xe4},{0xcc,0xb5},{0xa9,0xda},{0xa9,0xdd}, {0xa9,0xde},{0xfc,0x5d},{0xa9,0xec},{0xa9,0xed},{0xa9,0xeb}, {0xa9,0xe5},{0xa9,0xe9},{0xa9,0xdb},{0xab,0xf4},{0x93,0xb1}, {0x00,0x00},{0x89,0xde},{0x92,0x75},{0x92,0x5e},{0x8b,0x76}, {0x84,0xe1},{0x00,0x00},{0x88,0xdc},{0x8b,0xf6},{0x89,0xdd}, {0x87,0xd5},{0x88,0xe1},{0x00,0x00},{0xce,0xda},{0xac,0x41}, {0xab,0xf8},{0xab,0xfa},{0xac,0x40},{0xce,0xe6},{0xab,0xfd}, {0xd1,0xb1},{0xae,0xb1},{0xac,0x43},{0xce,0xd7},{0xce,0xdf}, {0xab,0xfe},{0xce,0xde},{0xce,0xdb},{0xce,0xe3},{0xce,0xe5}, {0xab,0xf7},{0xab,0xfb},{0xac,0x42},{0xae,0xb3},{0xce,0xe0}, {0xab,0xf9},{0xac,0x45},{0xce,0xd9},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xab,0xfc},{0xae,0xb2},{0xab,0xf6},{0x00,0x00}, {0xce,0xd6},{0xce,0xdd},{0xce,0xd5},{0xce,0xd8},{0xce,0xdc}, {0xd1,0xb2},{0xac,0x44},{0x00,0x00},{0xce,0xe1},{0xce,0xe2}, {0xce,0xe4},{0xab,0xf5},{0x00,0x00},{0x94,0xf4},{0x92,0x76}, {0x87,0xd2},{0x8c,0xf7},{0x00,0x00},{0x88,0xe4},{0x88,0xde}, {0x83,0xb9},{0x87,0xd6},{0x88,0xdd},{0x8e,0xb7},{0x84,0x4f}, {0x89,0xdc},{0x84,0xe2},{0x00,0x00},{0x90,0xbf},{0xae,0xc1}, {0xd1,0xbe},{0xae,0xbf},{0xae,0xc0},{0xd1,0xb4},{0xd1,0xc4}, {0xa0,0x5e},{0xae,0xb6},{0x00,0x00},{0x9a,0xa5},{0xd5,0x66}, {0xd1,0xc6},{0xd1,0xc0},{0xfc,0x5f},{0xd1,0xb7},{0x9a,0xa7}, {0xd1,0xc9},{0xd1,0xba},{0xae,0xbc},{0xd5,0x7d},{0xd1,0xbd}, {0xae,0xbe},{0xae,0xb5},{0x93,0x56},{0xd1,0xcb},{0xd1,0xbf}, {0xae,0xb8},{0xd1,0xb8},{0xd1,0xb5},{0xd1,0xb6},{0xae,0xb9}, {0xd1,0xc5},{0xd1,0xcc},{0xae,0xbb},{0xd1,0xbc},{0xd1,0xbb}, {0xae,0xc3},{0xae,0xc2},{0xae,0xb4},{0xae,0xba},{0xae,0xbd}, {0xd1,0xc8},{0x00,0x00},{0x00,0x00},{0xd1,0xc2},{0xae,0xb7}, {0xd1,0xb3},{0xd1,0xca},{0xd1,0xc1},{0xd1,0xc3},{0xd1,0xc7}, {0x00,0x00},{0x93,0x55},{0x00,0x00},{0x87,0xd4},{0x85,0xca}, {0x00,0x00},{0x88,0xe2},{0x84,0xe3},{0x85,0xcc},{0xfc,0x5e}, {0xd5,0x67},{0x00,0x00},{0xb1,0xb7},{0xb1,0xcb},{0xb1,0xca}, {0x00,0x00},{0xb1,0xbf},{0x95,0x59},{0xd5,0x79},{0xd5,0x75}, {0xd5,0x72},{0xd5,0xa6},{0xb1,0xba},{0xb1,0xb2},{0x00,0x00}, {0x00,0x00},{0xd5,0x77},{0xb4,0xa8},{0xb1,0xb6},{0xd5,0xa1}, {0x9a,0xa8},{0xb1,0xcc},{0xb1,0xc9},{0xd5,0x7b},{0xd5,0x6a}, {0x00,0x00},{0xfc,0x55},{0xb1,0xc8},{0xd5,0xa3},{0xd5,0x69}, {0xb1,0xbd},{0xb1,0xc1},{0xd5,0xa2},{0x00,0x00},{0xd5,0x73}, {0xb1,0xc2},{0xb1,0xbc},{0xd5,0x68},{0x9a,0xa9},{0xb4,0x78}, {0xd5,0xa5},{0xd5,0x71},{0xb1,0xc7},{0xd5,0x74},{0xd5,0xa4}, {0xb1,0xc6},{0x00,0x00},{0xd9,0x52},{0x00,0x00},{0xb1,0xb3}, {0xd5,0x6f},{0xb1,0xb8},{0xb1,0xc3},{0x00,0x00},{0xb1,0xbe}, {0xd5,0x78},{0xd5,0x6e},{0xd5,0x6c},{0xd5,0x7e},{0xb1,0xb0}, {0xb1,0xc4},{0xb1,0xb4},{0xb4,0x77},{0xd5,0x7c},{0xb1,0xb5}, {0x00,0x00},{0xb1,0xb1},{0xb1,0xc0},{0xb1,0xbb},{0xb1,0xb9}, {0xd5,0x70},{0xb1,0xc5},{0xd5,0x6d},{0xd5,0x7a},{0xd5,0x76}, {0xd9,0x54},{0xd9,0x53},{0x92,0xa9},{0x88,0xe0},{0x86,0xce}, {0x94,0x77},{0x00,0x00},{0x8a,0xc4},{0x87,0xd8},{0xfb,0x57}, {0x86,0xcf},{0x90,0xc0},{0x8e,0x70},{0xd5,0x6b},{0xd9,0x64}, {0x00,0x00},{0xb4,0x7a},{0x9a,0xaa},{0xd9,0x6a},{0xd9,0x59}, {0xd9,0x67},{0xdd,0x77},{0xb4,0x7d},{0xd9,0x6b},{0xd9,0x6e}, {0xb4,0x7c},{0xd9,0x5c},{0xd9,0x6d},{0xd9,0x6c},{0xb4,0x7e}, {0xd9,0x55},{0xb4,0x79},{0xb4,0xa3},{0xfd,0x6c},{0xb4,0xa1}, {0xd9,0x69},{0x00,0x00},{0xd9,0x5f},{0xb4,0xa5},{0xd9,0x70}, {0xd9,0x68},{0xd9,0x71},{0xb4,0xad},{0xb4,0xab},{0xd9,0x66}, {0xd9,0x65},{0x90,0xc1},{0xd9,0x63},{0xd9,0x5d},{0xb4,0xa4}, {0x9a,0xab},{0xb4,0xa2},{0xd1,0xb9},{0xd9,0x56},{0x9a,0xac}, {0xdd,0xb7},{0xd9,0x57},{0xb4,0x7b},{0xb4,0xaa},{0xdd,0x79}, {0x00,0x00},{0xb4,0xa6},{0xb4,0xa7},{0xd9,0x58},{0xd9,0x6f}, {0xdd,0x78},{0xd9,0x60},{0xd9,0x5b},{0xb4,0xa9},{0xd9,0x61}, {0xd9,0x5e},{0x00,0x00},{0xa0,0x5f},{0xb4,0xae},{0x90,0xc2}, {0x9a,0xad},{0xfb,0x5d},{0x8d,0x53},{0x9a,0xae},{0x87,0xd9}, {0x8b,0xf7},{0x89,0xdf},{0x86,0xcd},{0x00,0x00},{0x00,0x00}, {0x8c,0xf8},{0xb7,0x70},{0x9a,0xaf},{0x00,0x00},{0xdd,0x7c}, {0xdd,0xb1},{0xdd,0xb6},{0xdd,0xaa},{0xb7,0x6c},{0xdd,0xbb}, {0xb7,0x69},{0xdd,0x7a},{0x00,0x00},{0xdd,0x7b},{0xb7,0x62}, {0xb7,0x6b},{0xdd,0xa4},{0xb7,0x6e},{0xb7,0x6f},{0xdd,0xa5}, {0x00,0x00},{0xdd,0xb2},{0xdd,0xb8},{0xb7,0x6a},{0x00,0x00}, {0xb7,0x64},{0xdd,0xa3},{0xdd,0x7d},{0xdd,0xba},{0xdd,0xa8}, {0xdd,0xa9},{0xdd,0x7e},{0xdd,0xb4},{0xdd,0xab},{0xdd,0xb5}, {0xdd,0xad},{0x00,0x00},{0xb7,0x65},{0xe1,0xd9},{0xb7,0x68}, {0xb7,0x66},{0xdd,0xb9},{0xdd,0xb0},{0xdd,0xac},{0x00,0x00}, {0x9a,0xb0},{0xdd,0xa1},{0xba,0x53},{0xdd,0xaf},{0xb7,0x6d}, {0xdd,0xa7},{0x9a,0xb1},{0xdd,0xa6},{0x8c,0x74},{0x9a,0xb2}, {0x00,0x00},{0xb7,0x67},{0xb7,0x63},{0xe1,0xee},{0xdd,0xb3}, {0xdd,0xae},{0x93,0x45},{0xdd,0xa2},{0x8c,0x73},{0x8f,0x75}, {0x8a,0xc7},{0x93,0xda},{0x8f,0x52},{0x00,0x00},{0x8c,0xcf}, {0xe1,0xe9},{0x00,0x00},{0xe1,0xda},{0xe1,0xe5},{0x00,0x00}, {0xe1,0xec},{0xba,0x51},{0xb4,0xac},{0xe1,0xea},{0xba,0x4c}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xba,0x4b},{0xe1,0xf1}, {0x9a,0xb3},{0xe1,0xdb},{0xe1,0xe8},{0xe1,0xdc},{0xe1,0xe7}, {0xba,0x4f},{0xe1,0xeb},{0xd9,0x62},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xe1,0xf2},{0xe1,0xe3},{0xba,0x52},{0xe5,0xba}, {0xbc,0xaf},{0x00,0x00},{0xe1,0xf0},{0xe1,0xef},{0xba,0x54}, {0xe5,0xad},{0xbc,0xb0},{0xe5,0xae},{0x9a,0xb4},{0xe1,0xdf}, {0xe1,0xe0},{0xe1,0xdd},{0xe1,0xe2},{0xe1,0xde},{0xe1,0xf3}, {0xba,0x4e},{0xbc,0xb1},{0xba,0x50},{0xba,0x55},{0x9a,0xb5}, {0xe1,0xe1},{0x00,0x00},{0xe1,0xed},{0x00,0x00},{0x00,0x00}, {0xe1,0xe6},{0x92,0xb0},{0x8f,0xda},{0xe5,0xb1},{0x00,0x00}, {0xba,0x4a},{0xbc,0xb4},{0xe9,0xaa},{0xe5,0xb6},{0xe5,0xb5}, {0xe5,0xb7},{0x9a,0xb6},{0x00,0x00},{0xe5,0xb4},{0xbc,0xb5}, {0x90,0xc3},{0xbc,0xbb},{0xbc,0xb8},{0x00,0x00},{0xbc,0xb9}, {0xe5,0xaf},{0xe5,0xb2},{0xe5,0xbc},{0xbc,0xc1},{0xbc,0xbf}, {0x00,0x00},{0xe5,0xb3},{0xd9,0x5a},{0xbc,0xb2},{0xe5,0xb9}, {0xe5,0xb0},{0x00,0x00},{0xbc,0xc2},{0xe5,0xb8},{0xba,0x4d}, {0xbc,0xb7},{0xe1,0xe4},{0x00,0x00},{0x00,0x00},{0xbc,0xba}, {0x00,0x00},{0xbc,0xbe},{0xbc,0xc0},{0xbc,0xbd},{0xbc,0xbc}, {0x9a,0xb7},{0xbc,0xb6},{0xe5,0xbb},{0xbc,0xb3},{0xbc,0xc3}, {0x9a,0xb8},{0x8a,0xc6},{0x9a,0xb9},{0x8a,0xc9},{0x8f,0x76}, {0x82,0x4d},{0x8f,0xfe},{0xbe,0xd8},{0xbe,0xd9},{0xe9,0xa9}, {0xbe,0xe2},{0xbe,0xdf},{0x90,0xc4},{0xbe,0xd6},{0xbe,0xdd}, {0xe9,0xab},{0xbe,0xdb},{0xbe,0xd5},{0x00,0x00},{0xbe,0xdc}, {0x00,0x00},{0xe9,0xa8},{0xc0,0xbb},{0xbe,0xd7},{0x00,0x00}, {0xbe,0xde},{0xc0,0xba},{0xe9,0xa7},{0xe9,0xa6},{0x00,0x00}, {0xbe,0xe0},{0xa0,0x5d},{0xbe,0xe1},{0x00,0x00},{0xe9,0xa5}, {0xe9,0xa4},{0xc0,0xbc},{0xe9,0xae},{0xbe,0xda},{0xe9,0xac}, {0x00,0x00},{0x9a,0xba},{0x8a,0xc8},{0x00,0x00},{0xc0,0xbd}, {0x90,0xc5},{0xc0,0xc2},{0xec,0xea},{0xec,0xec},{0x9a,0xbb}, {0xc0,0xbf},{0xfb,0xa3},{0xec,0xed},{0xec,0xe9},{0x95,0xc8}, {0xec,0xeb},{0xc0,0xc0},{0xc0,0xc3},{0x00,0x00},{0xec,0xe8}, {0xc0,0xbe},{0xc0,0xc1},{0xc2,0x59},{0xe9,0xad},{0xc2,0x58}, {0x00,0x00},{0x90,0xc6},{0xc2,0x5e},{0xef,0xd4},{0x00,0x00}, {0xc2,0x5c},{0xc2,0x5d},{0xef,0xd7},{0xef,0xd3},{0xc2,0x5a}, {0xef,0xd1},{0xc3,0x6b},{0xef,0xd5},{0x00,0x00},{0xef,0xd6}, {0xef,0xd2},{0x90,0xc7},{0xc2,0x5b},{0xf2,0x42},{0x00,0x00}, {0xf2,0x45},{0x9a,0xbc},{0x00,0x00},{0xf2,0x46},{0xf2,0x44}, {0xf2,0x47},{0xc3,0x6c},{0xf2,0x43},{0x9a,0xbd},{0x90,0x57}, {0xf4,0x4e},{0xc4,0x64},{0xf4,0x4d},{0xf4,0x4c},{0xf4,0x4b}, {0xc4,0x63},{0xc4,0x65},{0x00,0x00},{0xf5,0xcd},{0xc4,0xe2}, {0xc4,0xe1},{0xa0,0x60},{0x9a,0xbe},{0xf6,0xe1},{0xf6,0xe0}, {0xf6,0xe3},{0xc5,0xcb},{0xc5,0x75},{0xf7,0xdd},{0xf6,0xe2}, {0x00,0x00},{0x00,0x00},{0xf7,0xdc},{0xc5,0xcd},{0xc5,0xcc}, {0xc5,0xf3},{0xf8,0xa9},{0xf8,0xef},{0xa4,0xe4},{0xfe,0x5b}, {0x00,0x00},{0xd9,0x72},{0xe9,0xaf},{0xc6,0xd2},{0x90,0xc8}, {0xa6,0xac},{0xca,0xf7},{0xa7,0xf1},{0xa7,0xef},{0x00,0x00}, {0xa7,0xf0},{0x00,0x00},{0xcc,0xc1},{0xa9,0xf1},{0xac,0x46}, {0x00,0x00},{0xce,0xe7},{0x00,0x00},{0xce,0xe8},{0x00,0x00}, {0xac,0x47},{0xd1,0xce},{0x00,0x00},{0xae,0xc4},{0xae,0xc5}, {0xd1,0xcd},{0x00,0x00},{0x87,0xda},{0x95,0xb4},{0x90,0xc9}, {0xb1,0xd3},{0x00,0x00},{0xb1,0xcf},{0x00,0x00},{0xd5,0xa7}, {0xb1,0xd6},{0xb1,0xd5},{0xb1,0xce},{0xb1,0xd1},{0xb1,0xd4}, {0xb1,0xd0},{0x00,0x00},{0x89,0xe0},{0xd9,0x76},{0xb1,0xcd}, {0xb4,0xaf},{0x9a,0xbf},{0x00,0x00},{0x00,0x00},{0xb4,0xb1}, {0xb4,0xb2},{0xd9,0x75},{0xd9,0x78},{0xb4,0xb0},{0xd9,0x73}, {0xd9,0x77},{0x00,0x00},{0xd9,0x74},{0x90,0xca},{0xb7,0x71}, {0x9a,0xc0},{0x00,0x00},{0xdd,0xbc},{0x87,0xdb},{0x00,0x00}, {0xba,0x56},{0xe1,0xf4},{0xbe,0xe3},{0xbc,0xc4},{0xe5,0xbd}, {0xbc,0xc5},{0xbc,0xc6},{0xe5,0xbf},{0xe5,0xbe},{0xe5,0xc0}, {0xe9,0xb1},{0x00,0x00},{0x00,0x00},{0xe9,0xb0},{0xec,0xef}, {0xec,0xee},{0xc0,0xc4},{0xc0,0xc5},{0xf2,0x48},{0xfc,0xb7}, {0x9a,0xc1},{0xa4,0xe5},{0x90,0xcb},{0x93,0x42},{0x00,0x00}, {0x8a,0xbc},{0xd9,0x79},{0x00,0x00},{0x92,0xc7},{0x00,0x00}, {0xb4,0xb4},{0xb4,0xb3},{0xdd,0xbd},{0x8c,0x75},{0xef,0xd8}, {0xc4,0xe3},{0xf7,0xde},{0xa4,0xe6},{0x00,0x00},{0xae,0xc6}, {0x00,0x00},{0xb1,0xd8},{0xb1,0xd7},{0xd9,0x7a},{0xd9,0x7b}, {0xb7,0x72},{0xe1,0xf5},{0xba,0x57},{0xe9,0xb2},{0x00,0x00}, {0xa4,0xe7},{0xa5,0xb8},{0x00,0x00},{0xa9,0xf2},{0xcc,0xc2}, {0x84,0x53},{0xce,0xe9},{0xac,0x48},{0xb1,0xd9},{0x8a,0xca}, {0xd9,0x7c},{0xb4,0xb5},{0xb7,0x73},{0x00,0x00},{0xe5,0xc1}, {0xe5,0xc2},{0x00,0x00},{0x9a,0xc2},{0xec,0xf0},{0xc2,0x5f}, {0xf8,0xf0},{0xa4,0xe8},{0x00,0x00},{0xcc,0xc3},{0xa9,0xf3}, {0xac,0x49},{0x9a,0xc3},{0xce,0xea},{0x00,0x00},{0xae,0xc7}, {0xd1,0xd2},{0xd1,0xd0},{0xd1,0xd1},{0xae,0xc8},{0xd1,0xcf}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xb1,0xdb}, {0xb1,0xdc},{0xd5,0xa8},{0xb1,0xdd},{0xb1,0xda},{0xd9,0x7d}, {0x9a,0xc4},{0xd9,0x7e},{0xdd,0xbe},{0x9a,0xc5},{0x00,0x00}, {0xba,0x59},{0xba,0x58},{0x00,0x00},{0x90,0xcc},{0xec,0xf1}, {0xef,0xd9},{0x00,0x00},{0xf2,0x4a},{0xf2,0x49},{0xf4,0x4f}, {0xc6,0xd3},{0xc9,0x5e},{0xac,0x4a},{0x9a,0xc6},{0x00,0x00}, {0xa4,0xe9},{0xa5,0xb9},{0x8a,0xf6},{0xa6,0xae},{0xa6,0xad}, {0x00,0x00},{0x00,0x00},{0xa6,0xaf},{0xa6,0xb0},{0xc9,0xee}, {0xc9,0xed},{0xca,0xf8},{0xa7,0xf2},{0xca,0xfb},{0xca,0xfa}, {0xca,0xf9},{0xca,0xfc},{0x83,0xba},{0x8b,0x77},{0x85,0xd0}, {0x00,0x00},{0xa9,0xf4},{0xcc,0xc9},{0xcc,0xc5},{0xcc,0xce}, {0x00,0x00},{0x9a,0xc7},{0xa9,0xfb},{0x00,0x00},{0xa9,0xf9}, {0xcc,0xca},{0xcc,0xc6},{0xcc,0xcd},{0xa9,0xf8},{0xaa,0x40}, {0xcc,0xc8},{0xcc,0xc4},{0xa9,0xfe},{0xcc,0xcb},{0xa9,0xf7}, {0xcc,0xcc},{0xa9,0xfa},{0xa9,0xfc},{0xcc,0xd0},{0xcc,0xcf}, {0xcc,0xc7},{0xa9,0xf6},{0xa9,0xf5},{0xa9,0xfd},{0x00,0x00}, {0x00,0x00},{0x9a,0xc8},{0x88,0xe8},{0x00,0x00},{0x00,0x00}, {0xce,0xef},{0xce,0xf5},{0x90,0xcd},{0xac,0x50},{0xac,0x4d}, {0xce,0xec},{0xce,0xf1},{0x9a,0xc9},{0xac,0x53},{0xac,0x4b}, {0xce,0xf0},{0xac,0x4e},{0xac,0x51},{0x00,0x00},{0x00,0x00}, {0xce,0xf3},{0x00,0x00},{0xac,0x4c},{0xce,0xf8},{0xac,0x4f}, {0x95,0xfe},{0xac,0x52},{0xce,0xed},{0xce,0xf2},{0xce,0xf6}, {0xce,0xee},{0xce,0xeb},{0x00,0x00},{0x00,0x00},{0xce,0xf7}, {0xce,0xf4},{0x90,0xce},{0x84,0x54},{0x00,0x00},{0x8d,0x46}, {0x90,0xcf},{0x00,0x00},{0xae,0xd0},{0xae,0xc9},{0xae,0xcc}, {0x90,0xd0},{0xae,0xcf},{0x00,0x00},{0xd1,0xd5},{0xfc,0x62}, {0xae,0xca},{0xd1,0xd3},{0x83,0xbb},{0xae,0xce},{0x9d,0x59}, {0x00,0x00},{0xae,0xcb},{0x00,0x00},{0xd1,0xd6},{0xae,0xcd}, {0x88,0xe6},{0x88,0xe7},{0x85,0xcf},{0x85,0xce},{0x90,0xd1}, {0x00,0x00},{0xd5,0xac},{0xb1,0xdf},{0xd5,0xab},{0xd5,0xad}, {0xb1,0xde},{0xb1,0xe3},{0xd1,0xd4},{0x00,0x00},{0xd5,0xaa}, {0xd5,0xae},{0x9a,0xca},{0xb1,0xe0},{0xd5,0xa9},{0xb1,0xe2}, {0xfc,0x63},{0xb1,0xe1},{0x90,0xd2},{0xd9,0xa7},{0x9a,0xcb}, {0xd9,0xa2},{0x00,0x00},{0xb4,0xb6},{0xb4,0xba},{0xb4,0xb7}, {0xd9,0xa5},{0xd9,0xa8},{0x90,0xd3},{0xb4,0xb8},{0x00,0x00}, {0xb4,0xb9},{0xb4,0xbe},{0xdd,0xc7},{0xd9,0xa6},{0xb4,0xbc}, {0xd9,0xa3},{0xd9,0xa1},{0x9a,0xcc},{0xb4,0xbd},{0x00,0x00}, {0xd9,0xa4},{0x92,0x7d},{0x87,0xdc},{0x90,0xd4},{0xb7,0x79}, {0x9a,0xcd},{0xdd,0xbf},{0xb7,0x76},{0xb7,0x77},{0xb7,0x75}, {0xdd,0xc4},{0xdd,0xc3},{0xdd,0xc0},{0xb7,0x7b},{0xfe,0x7a}, {0x00,0x00},{0xdd,0xc2},{0xb4,0xbb},{0x9a,0xce},{0x00,0x00}, {0xdd,0xc6},{0xdd,0xc1},{0xb7,0x78},{0xb7,0x74},{0xb7,0x7a}, {0xdd,0xc5},{0x9a,0xcf},{0x00,0x00},{0x00,0x00},{0xba,0x5c}, {0x00,0x00},{0xe1,0xf8},{0xe1,0xf7},{0xe1,0xf6},{0xba,0x5a}, {0x00,0x00},{0x9a,0xd0},{0x00,0x00},{0x93,0xef},{0x89,0xe2}, {0xba,0x5b},{0xe5,0xc5},{0xe5,0xc8},{0xbc,0xc8},{0x00,0x00}, {0x9a,0xd1},{0xbc,0xc7},{0xe5,0xc9},{0xe5,0xc4},{0xbc,0xca}, {0xe5,0xc6},{0x9a,0xd2},{0xbc,0xc9},{0xe5,0xc3},{0x9a,0xd3}, {0xe5,0xc7},{0xbe,0xe9},{0xbe,0xe6},{0xe9,0xbb},{0xe9,0xba}, {0x90,0xd5},{0xe9,0xb9},{0xe9,0xb4},{0x90,0xd6},{0xe9,0xb5}, {0x90,0xd7},{0x00,0x00},{0x00,0x00},{0xbe,0xe7},{0x00,0x00}, {0xbe,0xe4},{0xbe,0xe8},{0xe9,0xb3},{0xbe,0xe5},{0xe9,0xb6}, {0xe9,0xb7},{0xe9,0xbc},{0x9a,0xd4},{0x9a,0xd5},{0xe9,0xb8}, {0x00,0x00},{0x00,0x00},{0xec,0xf2},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xc0,0xc7},{0x00,0x00},{0xef,0xdc},{0xc0,0xc6}, {0xef,0xda},{0xef,0xdb},{0xc2,0x60},{0xc3,0x6e},{0xf2,0x4b}, {0x00,0x00},{0xc3,0x6d},{0x00,0x00},{0x00,0x00},{0xf4,0x51}, {0xf4,0x52},{0x00,0x00},{0xc4,0x66},{0x9d,0xca},{0xf4,0x50}, {0xc4,0xe4},{0x00,0x00},{0xf7,0xdf},{0xc5,0xce},{0xf8,0xaa}, {0xf8,0xab},{0x00,0x00},{0xa4,0xea},{0xa0,0x58},{0xa6,0xb1}, {0xa6,0xb2},{0xa7,0xf3},{0x90,0xd8},{0xcc,0xd1},{0xac,0x54}, {0xae,0xd1},{0xb1,0xe4},{0x90,0xd9},{0x90,0xda},{0xb0,0xd2}, {0x93,0xfb},{0xb4,0xbf},{0xb4,0xc0},{0xb3,0xcc},{0xd9,0xa9}, {0x9a,0xd6},{0xb7,0x7c},{0xe1,0xfa},{0xe1,0xf9},{0x00,0x00}, {0x00,0x00},{0xa4,0xeb},{0xa6,0xb3},{0xcc,0xd2},{0xaa,0x42}, {0x9a,0xd7},{0xaa,0x41},{0x90,0xdb},{0xce,0xf9},{0xce,0xfa}, {0x00,0x00},{0xd1,0xd7},{0xd1,0xd8},{0xae,0xd2},{0xae,0xd3}, {0x90,0xdc},{0xae,0xd4},{0xd5,0xaf},{0x9a,0xd8},{0x00,0x00}, {0xb1,0xe6},{0x00,0x00},{0xb4,0xc2},{0xfc,0x64},{0xb4,0xc1}, {0xdd,0xc8},{0xdf,0x7a},{0xe1,0xfb},{0xe9,0xbd},{0x00,0x00}, {0xfe,0x5e},{0xc2,0x61},{0xc4,0x67},{0xa4,0xec},{0x91,0xd1}, {0xa5,0xbc},{0xa5,0xbd},{0xa5,0xbb},{0xa5,0xbe},{0xa5,0xba}, {0x84,0x7b},{0x00,0x00},{0xa6,0xb6},{0x00,0x00},{0xc9,0xf6}, {0xa6,0xb5},{0xa6,0xb7},{0x95,0x7c},{0x90,0xdd},{0xc9,0xf1}, {0xc9,0xf0},{0xc9,0xf3},{0xc9,0xf2},{0xc9,0xf5},{0xa6,0xb4}, {0xc9,0xef},{0xc9,0xf4},{0x84,0x59},{0x94,0x78},{0x8b,0x59}, {0x8c,0xd0},{0x9a,0xd9},{0xca,0xfd},{0xa7,0xfd},{0xca,0xfe}, {0xcb,0x43},{0xa7,0xfc},{0x00,0x00},{0xcb,0x47},{0xcb,0x42}, {0xcb,0x45},{0xa7,0xf5},{0xa7,0xf6},{0xa7,0xf7},{0xa7,0xf8}, {0x00,0x00},{0xa8,0x40},{0x00,0x00},{0xcb,0x41},{0xa7,0xfa}, {0xa8,0x41},{0x00,0x00},{0xcb,0x40},{0xcb,0x46},{0x00,0x00}, {0xa7,0xf9},{0xcb,0x44},{0xa7,0xfb},{0xa7,0xf4},{0xa7,0xfe}, {0x84,0x57},{0x94,0x5c},{0x94,0x79},{0x90,0xde},{0x83,0x53}, {0x90,0xdf},{0xfb,0xa6},{0x85,0xd4},{0x8e,0x72},{0xaa,0x57}, {0x9a,0xda},{0xcc,0xd4},{0xaa,0x43},{0x9d,0x72},{0xaa,0x4d}, {0xaa,0x4e},{0xaa,0x46},{0xaa,0x58},{0xaa,0x48},{0xcc,0xdc}, {0xaa,0x53},{0xcc,0xd7},{0xaa,0x49},{0xcc,0xe6},{0xcc,0xe7}, {0xcc,0xdf},{0xcc,0xd8},{0xaa,0x56},{0xcc,0xe4},{0xaa,0x51}, {0xaa,0x4f},{0x00,0x00},{0xcc,0xe5},{0x00,0x00},{0xcc,0xe3}, {0xcc,0xdb},{0xcc,0xd3},{0xcc,0xda},{0xaa,0x4a},{0x00,0x00}, {0xaa,0x50},{0x00,0x00},{0xaa,0x44},{0xcc,0xde},{0xcc,0xdd}, {0xcc,0xd5},{0x9a,0xdb},{0xaa,0x52},{0xcc,0xe1},{0xcc,0xd6}, {0xaa,0x55},{0xcc,0xe8},{0xaa,0x45},{0x00,0x00},{0xaa,0x4c}, {0xcc,0xd9},{0xcc,0xe2},{0xaa,0x54},{0x00,0x00},{0xaa,0x47}, {0xaa,0x4b},{0x87,0xe5},{0xcc,0xe0},{0x94,0xfd},{0x94,0x7a}, {0x87,0xe0},{0x84,0xe5},{0x9a,0xdc},{0x8f,0xdc},{0x90,0xe0}, {0x90,0xe1},{0x8d,0xdf},{0x90,0xe2},{0x86,0xd2},{0x85,0xd6}, {0xfc,0x66},{0x84,0x58},{0xcf,0x5b},{0xac,0x5c},{0xac,0x69}, {0x95,0x45},{0xcf,0x56},{0xcf,0x4c},{0xac,0x62},{0xcf,0x4a}, {0xac,0x5b},{0xcf,0x45},{0xac,0x65},{0xcf,0x52},{0xce,0xfe}, {0xcf,0x41},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9a,0xdd}, {0xcf,0x44},{0xce,0xfb},{0xcf,0x51},{0xcf,0x61},{0xac,0x60}, {0xcf,0x46},{0xcf,0x58},{0x00,0x00},{0xce,0xfd},{0xcf,0x5f}, {0xcf,0x60},{0xcf,0x63},{0xcf,0x5a},{0xcf,0x4b},{0xcf,0x53}, {0xac,0x66},{0xac,0x59},{0xac,0x61},{0xac,0x6d},{0xac,0x56}, {0xac,0x58},{0x00,0x00},{0x9a,0xde},{0x9a,0xdf},{0xcf,0x43}, {0xac,0x6a},{0xac,0x63},{0xcf,0x5d},{0xcf,0x40},{0xac,0x6c}, {0xac,0x67},{0xcf,0x49},{0x8a,0xce},{0x00,0x00},{0xac,0x6b}, {0xcf,0x50},{0xcf,0x48},{0xac,0x64},{0xcf,0x5c},{0xcf,0x54}, {0x00,0x00},{0xac,0x5e},{0xcf,0x62},{0xcf,0x47},{0xac,0x5a}, {0xcf,0x59},{0xcf,0x4f},{0xac,0x5f},{0xcf,0x55},{0xac,0x57}, {0xce,0xfc},{0xac,0x68},{0xae,0xe3},{0xac,0x5d},{0xcf,0x4e}, {0xcf,0x4d},{0xcf,0x42},{0xfc,0x67},{0xcf,0x5e},{0x90,0xe3}, {0xcf,0x57},{0x90,0xe4},{0x94,0x5a},{0xac,0x55},{0x90,0xe5}, {0x90,0xe6},{0x94,0x4d},{0x94,0x51},{0x92,0x48},{0x90,0xe7}, {0x00,0x00},{0x87,0xe1},{0x84,0xe7},{0x89,0xe6},{0x8f,0xdb}, {0x84,0xe6},{0x8f,0xdd},{0x9a,0xe1},{0x8f,0xba},{0x8c,0x77}, {0x9a,0xe2},{0x88,0xeb},{0xd1,0xec},{0xae,0xea},{0xd1,0xed}, {0x00,0x00},{0xd1,0xe1},{0xae,0xdf},{0xae,0xeb},{0x00,0x00}, {0xd1,0xda},{0x9a,0xe3},{0xd1,0xe3},{0xd1,0xeb},{0x90,0xe8}, {0xd1,0xd9},{0xd1,0xf4},{0xae,0xd5},{0xfe,0x45},{0x00,0x00}, {0x00,0x00},{0xd1,0xf3},{0xd1,0xee},{0x00,0x00},{0xd1,0xef}, {0xae,0xdd},{0xae,0xe8},{0xd1,0xe5},{0x00,0x00},{0xd1,0xe6}, {0xd1,0xf0},{0xd1,0xe7},{0x00,0x00},{0xd1,0xe2},{0xd1,0xdc}, {0xd1,0xdd},{0xd1,0xea},{0xd1,0xe4},{0x9a,0xe4},{0x87,0xde}, {0xae,0xd6},{0xae,0xda},{0xd1,0xf2},{0xd1,0xde},{0xae,0xe6}, {0xae,0xe2},{0x90,0x6a},{0x00,0x00},{0xae,0xe5},{0xae,0xec}, {0xae,0xdb},{0xae,0xe7},{0xd1,0xe9},{0xae,0xe9},{0xae,0xd8}, {0x9a,0xe5},{0xae,0xd7},{0xd1,0xdb},{0x90,0xe9},{0xd1,0xdf}, {0xae,0xe0},{0xd1,0xf1},{0xd1,0xe8},{0xd1,0xe0},{0xae,0xe4}, {0xae,0xe1},{0x90,0xea},{0xae,0xd9},{0xae,0xdc},{0x90,0xeb}, {0x9a,0xe6},{0x00,0x00},{0x00,0x00},{0x90,0xec},{0x00,0x00}, {0x00,0x00},{0x92,0x51},{0x82,0x7c},{0x00,0x00},{0x92,0xcc}, {0x8d,0xde},{0x88,0xef},{0x85,0xd5},{0x89,0xe3},{0x8e,0x71}, {0x88,0xed},{0x88,0xe9},{0x89,0xe5},{0x87,0xe3},{0x87,0xdf}, {0x00,0x00},{0xd5,0xc4},{0x00,0x00},{0xd5,0xb4},{0xd5,0xb5}, {0xd5,0xb9},{0x00,0x00},{0xd5,0xc8},{0xd5,0xc5},{0x00,0x00}, {0xd5,0xbe},{0xd5,0xbd},{0xb1,0xed},{0xd5,0xc1},{0xd5,0xd0}, {0xd5,0xb0},{0x00,0x00},{0xd5,0xd1},{0xd5,0xc3},{0xd5,0xd5}, {0xd5,0xc9},{0xb1,0xec},{0xd5,0xc7},{0xb1,0xe7},{0xb1,0xfc}, {0xb1,0xf2},{0x9a,0xe7},{0xb1,0xf6},{0xb1,0xf5},{0xd5,0xb1}, {0x9a,0xe8},{0xd5,0xce},{0xd5,0xd4},{0xd5,0xcc},{0xd5,0xd3}, {0x90,0xed},{0x00,0x00},{0xd5,0xc0},{0xd5,0xb2},{0xd5,0xd2}, {0xd5,0xc2},{0xb1,0xea},{0xb1,0xf7},{0x00,0x00},{0xd5,0xcb}, {0xb1,0xf0},{0xfb,0x58},{0x00,0x00},{0x00,0x00},{0xd5,0xca}, {0xd5,0xb3},{0xb1,0xf8},{0x00,0x00},{0xb1,0xfa},{0xd5,0xcd}, {0xb1,0xfb},{0xb1,0xe9},{0xd5,0xba},{0xd5,0xcf},{0x00,0x00}, {0x86,0xbb},{0xb1,0xef},{0xb1,0xf9},{0xd5,0xbc},{0xd5,0xc6}, {0xd5,0xb7},{0xd5,0xbb},{0xb1,0xf4},{0xd5,0xb6},{0xb1,0xe8}, {0xb1,0xf1},{0xb1,0xee},{0xd5,0xbf},{0xae,0xde},{0xd9,0xc0}, {0xb1,0xeb},{0xfc,0x68},{0x00,0x00},{0x00,0x00},{0x90,0xee}, {0x94,0x7b},{0x00,0x00},{0x82,0x6f},{0x9a,0xe9},{0x00,0x00}, {0x00,0x00},{0x89,0xe4},{0x00,0x00},{0x8c,0x78},{0x9a,0xea}, {0xb1,0xf3},{0x9a,0xeb},{0xd9,0xc3},{0xd9,0xd9},{0xd9,0xce}, {0xb4,0xd6},{0xfc,0x6c},{0xb4,0xd1},{0xd9,0xbd},{0xb4,0xd2}, {0xd9,0xcd},{0x90,0xef},{0xd9,0xc6},{0xd9,0xd3},{0xb4,0xce}, {0xd9,0xab},{0xd9,0xd5},{0xb4,0xc4},{0xd9,0xb3},{0xb4,0xc7}, {0xb4,0xc6},{0x00,0x00},{0xb4,0xd7},{0x00,0x00},{0xd9,0xad}, {0xd9,0xcf},{0xd9,0xd0},{0xb4,0xc9},{0xb4,0xc5},{0xd9,0xbb}, {0x00,0x00},{0xb4,0xd0},{0xd9,0xb6},{0x00,0x00},{0xd9,0xd1}, {0xb4,0xcc},{0xd9,0xc9},{0xd9,0xd6},{0xd9,0xb0},{0xd9,0xb5}, {0xd9,0xaf},{0x00,0x00},{0xb4,0xcb},{0xd9,0xc2},{0xdd,0xde}, {0xd9,0xb1},{0xb4,0xcf},{0xd9,0xba},{0xd9,0xd2},{0xb4,0xca}, {0xd9,0xb7},{0xd9,0xb4},{0xd9,0xc5},{0xb4,0xcd},{0xb4,0xc3}, {0xb4,0xd9},{0xd9,0xc8},{0xd9,0xc7},{0x00,0x00},{0x00,0x00}, {0xfc,0x6b},{0xfc,0x6a},{0x9a,0xec},{0x9a,0xed},{0xd9,0xac}, {0xb4,0xc8},{0xd9,0xd4},{0xd9,0xbc},{0xd9,0xbe},{0x9a,0xee}, {0xd9,0xcb},{0xd9,0xca},{0xd9,0xaa},{0xb4,0xd3},{0xb4,0xd5}, {0xd9,0xb2},{0xd9,0xb9},{0xd9,0xc1},{0xb4,0xd4},{0xd9,0xb8}, {0xd9,0xc4},{0xd9,0xd7},{0x00,0x00},{0xd9,0xcc},{0x9a,0xef}, {0x94,0x49},{0xfe,0x4f},{0x94,0x41},{0x92,0xb6},{0x00,0x00}, {0x00,0x00},{0x8b,0x79},{0x8e,0xb8},{0x94,0xa2},{0x90,0xf3}, {0x94,0xa1},{0x90,0x6b},{0xd9,0xd8},{0x90,0xf4},{0x00,0x00}, {0x94,0x7d},{0x00,0x00},{0xd9,0xae},{0x00,0x00},{0xfc,0x69}, {0x88,0xec},{0x00,0x00},{0xdd,0xf2},{0xb7,0xa6},{0x00,0x00}, {0xdd,0xf0},{0xdd,0xdb},{0xdd,0xe0},{0xdd,0xd9},{0x90,0xfd}, {0xdd,0xec},{0xdd,0xcb},{0xdd,0xd2},{0x00,0x00},{0xdd,0xea}, {0xdd,0xf4},{0xdd,0xdc},{0xfc,0x6f},{0xdd,0xcf},{0xdd,0xe2}, {0xdd,0xe7},{0xdd,0xd3},{0x9a,0xf0},{0xdd,0xe4},{0xdd,0xd0}, {0x9a,0xf1},{0x00,0x00},{0xdd,0xd7},{0xdd,0xd8},{0xb7,0xa8}, {0xdd,0xeb},{0xdd,0xe9},{0x00,0x00},{0xdd,0xcc},{0xdd,0xee}, {0x00,0x00},{0xdd,0xef},{0xdd,0xf1},{0xb7,0xac},{0xb7,0xa4}, {0x82,0x6c},{0xd5,0xb8},{0xdd,0xd4},{0xdd,0xe6},{0xdd,0xd5}, {0xb7,0xa1},{0xb7,0xb1},{0xdd,0xed},{0xb7,0xaf},{0xb7,0xab}, {0xdd,0xca},{0xb7,0xa3},{0x90,0xfe},{0xdd,0xcd},{0xb7,0xb0}, {0x9a,0xf2},{0xdd,0xdd},{0xdd,0xc9},{0x9a,0xf3},{0xb7,0xa9}, {0xdd,0xe1},{0xdd,0xd1},{0xb7,0xaa},{0xdd,0xda},{0xb7,0x7e}, {0xb4,0xd8},{0xdd,0xe3},{0xd9,0xbf},{0xdd,0xce},{0x9a,0xf4}, {0xfc,0x6d},{0xdd,0xe8},{0xb7,0xa5},{0xdd,0xe5},{0xb7,0xa2}, {0xdd,0xdf},{0xb7,0xad},{0xdd,0xd6},{0xdd,0xf3},{0x87,0xe2}, {0x92,0x62},{0x94,0xa3},{0x00,0x00},{0xfc,0x6e},{0x94,0xa4}, {0xb7,0xa7},{0xde,0xc6},{0x8d,0x6e},{0x9a,0xf5},{0xb7,0xae}, {0x8b,0xf9},{0x8b,0x7a},{0x90,0x40},{0x94,0x45},{0x00,0x00}, {0x00,0x00},{0xe2,0x4a},{0xe2,0x48},{0x00,0x00},{0xe2,0x5e}, {0xe2,0x46},{0x00,0x00},{0xe2,0x58},{0xb7,0x7d},{0xba,0x5f}, {0xe2,0x42},{0xe2,0x5d},{0x95,0x67},{0xe2,0x47},{0xe2,0x55}, {0xba,0x64},{0xba,0x5d},{0x00,0x00},{0xe2,0x5b},{0x9a,0xf6}, {0xe2,0x40},{0xe2,0x5a},{0x9a,0xf7},{0xba,0x6f},{0xe2,0x51}, {0xe2,0x61},{0xba,0x6d},{0xe2,0x49},{0xba,0x5e},{0xe2,0x4b}, {0xe2,0x59},{0xba,0x67},{0xe2,0x44},{0xba,0x6b},{0xba,0x61}, {0xe2,0x4d},{0xe2,0x43},{0xe1,0xfc},{0xfc,0x71},{0xe2,0x57}, {0xba,0x68},{0xe2,0x60},{0xe1,0xfd},{0xba,0x65},{0x00,0x00}, {0xe2,0x53},{0x00,0x00},{0xba,0x66},{0xe2,0x45},{0xe2,0x50}, {0xe2,0x4c},{0xe2,0x4e},{0xfc,0x72},{0xba,0x60},{0xe2,0x5f}, {0xba,0x6e},{0xe2,0x4f},{0x00,0x00},{0xe2,0x62},{0x91,0xee}, {0x00,0x00},{0xe1,0xfe},{0xe2,0x54},{0xba,0x63},{0xba,0x6c}, {0xba,0x6a},{0xe2,0x41},{0xe2,0x56},{0xba,0x69},{0x9a,0xf8}, {0x00,0x00},{0xba,0x62},{0xe2,0x52},{0x9a,0xf9},{0x9a,0xfa}, {0x00,0x00},{0x93,0xdb},{0xe2,0x5c},{0x00,0x00},{0x8a,0xcd}, {0x00,0x00},{0x94,0xa5},{0x96,0x7d},{0x8a,0xcb},{0x8f,0xb9}, {0x9b,0x41},{0xe5,0xd5},{0x00,0x00},{0xe5,0xd1},{0xe5,0xcd}, {0xe5,0xe1},{0xe5,0xde},{0xbc,0xcd},{0xfc,0x75},{0x00,0x00}, {0xe5,0xe5},{0xe5,0xd4},{0xbc,0xd8},{0xe5,0xdb},{0x00,0x00}, {0x00,0x00},{0xe5,0xd0},{0xe5,0xda},{0xbc,0xd5},{0xe5,0xee}, {0x00,0x00},{0xe5,0xeb},{0xe5,0xdd},{0xe5,0xce},{0x96,0x7e}, {0xfc,0x74},{0xe5,0xe2},{0xe5,0xe4},{0xbc,0xd1},{0xe5,0xd8}, {0xe5,0xd3},{0xe5,0xca},{0xbc,0xce},{0xbc,0xd6},{0x9b,0x42}, {0xe5,0xe7},{0xbc,0xd7},{0xe5,0xcb},{0xe5,0xed},{0xe5,0xe0}, {0xe5,0xe6},{0xbc,0xd4},{0xfe,0x54},{0x96,0xce},{0xe5,0xe3}, {0x00,0x00},{0xe5,0xea},{0x00,0x00},{0xbc,0xd9},{0x96,0xeb}, {0xbc,0xd3},{0xe5,0xdc},{0xe5,0xcf},{0xe5,0xef},{0xe5,0xcc}, {0xe5,0xe8},{0xbc,0xd0},{0x9b,0x43},{0xe5,0xd6},{0x9b,0x44}, {0xe5,0xd7},{0xbc,0xcf},{0xbc,0xcc},{0xe5,0xd2},{0xbc,0xd2}, {0x96,0xec},{0xbc,0xcb},{0x00,0x00},{0xe5,0xe9},{0xe5,0xec}, {0xe5,0xd9},{0xe9,0xca},{0x92,0xb7},{0x88,0xea},{0x94,0x40}, {0x9b,0x45},{0x9b,0x46},{0x94,0xa6},{0x89,0xe7},{0x96,0xed}, {0x8c,0x76},{0xe9,0xc2},{0x9b,0x47},{0xe9,0xbe},{0xbe,0xf6}, {0x96,0xee},{0x00,0x00},{0xbe,0xeb},{0xbe,0xf0},{0xbe,0xec}, {0xe9,0xcc},{0xe9,0xd7},{0xbe,0xea},{0xe9,0xc4},{0xe9,0xcd}, {0xe5,0xdf},{0xe9,0xce},{0x00,0x00},{0x9b,0x48},{0xbe,0xf1}, {0x9b,0x49},{0xe9,0xdd},{0xbe,0xf5},{0xbe,0xf8},{0xe9,0xc0}, {0x00,0x00},{0xbe,0xf4},{0x9b,0x4a},{0xe9,0xdb},{0xe9,0xdc}, {0xe9,0xd2},{0xe9,0xd1},{0xe9,0xc9},{0xfc,0x77},{0x9b,0x4b}, {0xe9,0xd3},{0xe9,0xda},{0xe9,0xd9},{0x9b,0x4c},{0xbe,0xef}, {0xbe,0xed},{0xe9,0xcb},{0xe9,0xc8},{0x00,0x00},{0xe9,0xc5}, {0xe9,0xd8},{0xbe,0xf7},{0xe9,0xd6},{0xbe,0xf3},{0xbe,0xf2}, {0x9b,0x4d},{0xe9,0xd0},{0x96,0xef},{0xe9,0xbf},{0xe9,0xc1}, {0xe9,0xc3},{0xe9,0xd5},{0xe9,0xcf},{0xbe,0xee},{0x00,0x00}, {0xe9,0xc6},{0x00,0x00},{0xe9,0xd4},{0x00,0x00},{0x8b,0x78}, {0x94,0xa7},{0x96,0xf8},{0x9b,0x4e},{0x00,0x00},{0xe9,0xc7}, {0x00,0x00},{0x96,0xf9},{0x8b,0x7b},{0x94,0x7e},{0x00,0x00}, {0x96,0xfc},{0x00,0x00},{0xc0,0xcf},{0xed,0x45},{0xc0,0xc8}, {0xec,0xf5},{0x9b,0x4f},{0xed,0x41},{0xc0,0xca},{0xed,0x48}, {0x00,0x00},{0xec,0xfc},{0x00,0x00},{0xec,0xf7},{0x9b,0x50}, {0x00,0x00},{0xed,0x49},{0xec,0xf3},{0xec,0xfe},{0x9b,0x51}, {0xc0,0xd1},{0xed,0x44},{0xed,0x4a},{0xec,0xfd},{0xc0,0xc9}, {0xed,0x40},{0xec,0xf4},{0xc0,0xd0},{0x00,0x00},{0x9b,0x52}, {0xed,0x47},{0xec,0xf9},{0xc0,0xcc},{0xfc,0x78},{0xec,0xfb}, {0xec,0xf8},{0xc0,0xd2},{0xec,0xfa},{0xc0,0xcb},{0xc0,0xce}, {0xed,0x43},{0xec,0xf6},{0xed,0x46},{0x9b,0x53},{0xed,0x42}, {0x96,0xfd},{0x96,0xfe},{0x99,0xfe},{0xc2,0x63},{0xef,0xe7}, {0xc2,0x68},{0xc2,0x69},{0x00,0x00},{0x9b,0x54},{0xfc,0x76}, {0xc2,0x62},{0xef,0xe6},{0x9b,0x55},{0xef,0xe3},{0xef,0xe4}, {0xc2,0x66},{0xef,0xde},{0xef,0xe2},{0xc2,0x65},{0x00,0x00}, {0xef,0xdf},{0x9b,0x56},{0x00,0x00},{0x00,0x00},{0x9a,0xfe}, {0xc2,0x67},{0xc2,0x64},{0x00,0x00},{0xef,0xdd},{0xef,0xe1}, {0xef,0xe5},{0x95,0xe3},{0x9b,0x57},{0xfb,0xdc},{0xf2,0x51}, {0xf2,0x4e},{0xf2,0x57},{0x00,0x00},{0xf2,0x56},{0xf2,0x54}, {0xf2,0x4f},{0x00,0x00},{0xc3,0x72},{0x9b,0x58},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x9b,0x59},{0xf2,0x50},{0xc3,0x71}, {0xc0,0xcd},{0xf2,0x53},{0xc3,0x70},{0xf2,0x58},{0xf2,0x52}, {0xf2,0x4d},{0xef,0xe0},{0x9c,0xf9},{0x00,0x00},{0x9d,0xe1}, {0xc3,0x6f},{0x00,0x00},{0xf2,0x4c},{0xf4,0x56},{0x00,0x00}, {0xf4,0x55},{0xf2,0x55},{0xc4,0x68},{0x00,0x00},{0xf4,0x59}, {0xf4,0x5a},{0xf4,0x54},{0xf4,0x58},{0x00,0x00},{0xf4,0x53}, {0x00,0x00},{0x00,0x00},{0x9b,0x5a},{0x00,0x00},{0xf5,0xd1}, {0xf4,0x57},{0xc4,0xe7},{0xc4,0xe5},{0xf5,0xcf},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xf5,0xd2},{0x00,0x00},{0xf5,0xce}, {0xf5,0xd0},{0xc4,0xe6},{0x9d,0xfe},{0x00,0x00},{0x00,0x00}, {0xf6,0xe5},{0xf6,0xe6},{0xc5,0x76},{0xf6,0xe4},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xf7,0xe2},{0xc5,0xcf},{0xf7,0xe0}, {0xf7,0xe1},{0xf8,0xac},{0x00,0x00},{0x00,0x00},{0xc6,0x56}, {0xf8,0xf3},{0xf8,0xf1},{0xf8,0xf2},{0xf8,0xf4},{0x00,0x00}, {0x00,0x00},{0xfc,0x79},{0xf9,0xbb},{0x94,0xa8},{0xa4,0xed}, {0xa6,0xb8},{0x8c,0xd1},{0xaa,0x59},{0x8a,0xcf},{0xcc,0xe9}, {0x00,0x00},{0x87,0xe6},{0xcf,0x64},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xd1,0xf5},{0xd1,0xf7},{0x00,0x00},{0xd1,0xf6}, {0x00,0x00},{0xd1,0xf8},{0xb1,0xfd},{0xd5,0xd7},{0xd1,0xf9}, {0x95,0xb9},{0xd5,0xd6},{0xd5,0xd8},{0xd5,0xd9},{0xd9,0xda}, {0xb4,0xdb},{0xd9,0xdb},{0xd9,0xdd},{0xb4,0xdc},{0xb4,0xda}, {0xd9,0xdc},{0x00,0x00},{0xdd,0xfa},{0xdd,0xf8},{0xdd,0xf7}, {0x00,0x00},{0xdd,0xf6},{0xdd,0xf5},{0xb7,0xb2},{0xdd,0xf9}, {0xba,0x70},{0xe2,0x63},{0xe2,0x65},{0xba,0x71},{0xe2,0x64}, {0xbc,0xdb},{0x00,0x00},{0xbc,0xda},{0xe5,0xf0},{0xfc,0x7a}, {0x92,0x6c},{0xe9,0xdf},{0xe9,0xde},{0xe9,0xe0},{0x9b,0x5b}, {0x00,0x00},{0xbe,0xf9},{0x00,0x00},{0xed,0x4b},{0xc0,0xd3}, {0x00,0x00},{0xef,0xe8},{0xc2,0x6a},{0xf2,0x59},{0xc5,0x77}, {0xa4,0xee},{0xa5,0xbf},{0xa6,0xb9},{0xa8,0x42},{0xaa,0x5a}, {0xaa,0x5b},{0x00,0x00},{0x93,0xc5},{0xac,0x6e},{0x00,0x00}, {0x00,0x00},{0xd1,0xfa},{0x00,0x00},{0x92,0xd0},{0x00,0x00}, {0x00,0x00},{0xb7,0xb3},{0x92,0xc8},{0x93,0xf0},{0x00,0x00}, {0xe6,0xd1},{0xbe,0xfa},{0xc2,0x6b},{0xa4,0xef},{0x9b,0x5c}, {0xa6,0xba},{0x8c,0x79},{0x00,0x00},{0xcc,0xeb},{0xaa,0x5c}, {0xcc,0xea},{0x9f,0x4e},{0xcf,0x65},{0xac,0x6f},{0xcf,0x66}, {0x00,0x00},{0xac,0x70},{0x87,0xe7},{0xd1,0xfc},{0xae,0xee}, {0xae,0xed},{0x92,0xcf},{0xd5,0xde},{0xd5,0xdc},{0xd5,0xdd}, {0xd5,0xdb},{0x00,0x00},{0xd5,0xda},{0x8d,0xb5},{0x89,0xe8}, {0xd9,0xde},{0xd9,0xe1},{0xb4,0xde},{0xd9,0xdf},{0xb4,0xdd}, {0xd9,0xe0},{0x8e,0xe8},{0xdd,0xfb},{0x00,0x00},{0x00,0x00}, {0xe2,0x66},{0xe2,0x67},{0xe2,0x68},{0x8a,0xd1},{0xe5,0xf3}, {0xe5,0xf2},{0xbc,0xdc},{0xe5,0xf1},{0xe5,0xf4},{0xe9,0xe1}, {0x00,0x00},{0x00,0x00},{0xe9,0xe2},{0xe9,0xe3},{0x00,0x00}, {0xed,0x4c},{0xc0,0xd4},{0xc2,0x6c},{0xf2,0x5a},{0x9f,0x4f}, {0xc4,0xe8},{0xc9,0x5f},{0x87,0xe8},{0xac,0x71},{0xcf,0x67}, {0xae,0xef},{0x00,0x00},{0x00,0x00},{0xb1,0xfe},{0x92,0x5f}, {0xb4,0xdf},{0xd9,0xe2},{0x00,0x00},{0xb7,0xb5},{0xb7,0xb4}, {0x90,0xb5},{0x8a,0x75},{0xe2,0x69},{0xe2,0x6a},{0xbc,0xdd}, {0xbc,0xde},{0xe9,0xe5},{0xe9,0xe4},{0xef,0xe9},{0xf7,0xe3}, {0xa4,0xf0},{0xc9,0x60},{0xa5,0xc0},{0x93,0xd1},{0xa8,0x43}, {0xcb,0x48},{0x00,0x00},{0xac,0x72},{0xb7,0xb6},{0xa4,0xf1}, {0x84,0x65},{0xcf,0x68},{0xac,0x73},{0xcf,0x69},{0x89,0xe1}, {0xc0,0xd5},{0xa4,0xf2},{0x9b,0x5d},{0x00,0x00},{0xcc,0xec}, {0x94,0xa9},{0xcf,0x6a},{0x89,0xe9},{0xd2,0x42},{0xd2,0x41}, {0xd1,0xfe},{0x00,0x00},{0xd1,0xfd},{0xd2,0x43},{0xd2,0x40}, {0x00,0x00},{0xa0,0x62},{0xb2,0x40},{0xb2,0x41},{0x00,0x00}, {0x00,0x00},{0xb4,0xe0},{0xd9,0xe3},{0x00,0x00},{0xd9,0xe4}, {0xd9,0xe5},{0x00,0x00},{0x8e,0xb9},{0x00,0x00},{0xde,0x41}, {0xde,0x42},{0xde,0x40},{0xfc,0x7b},{0xdd,0xfd},{0xdd,0xfe}, {0xb7,0xb7},{0xe2,0x6b},{0xe5,0xf7},{0xe5,0xf6},{0xe5,0xf5}, {0xe5,0xf8},{0xe9,0xe7},{0xe9,0xe6},{0xbe,0xfb},{0xe9,0xe8}, {0x8f,0xbb},{0xc0,0xd6},{0xed,0x4d},{0x00,0x00},{0xef,0xea}, {0xf2,0x5b},{0xf6,0xe7},{0x00,0x00},{0xa4,0xf3},{0xa5,0xc2}, {0xa5,0xc1},{0x00,0x00},{0xaa,0x5d},{0xc9,0x61},{0xc9,0x7e}, {0xa6,0xbb},{0x92,0x6e},{0xc9,0xf7},{0xcb,0x49},{0xcb,0x4a}, {0xaa,0x5e},{0x9b,0x5e},{0xcc,0xed},{0x00,0x00},{0xac,0x74}, {0xcf,0x6b},{0xcf,0x6c},{0x84,0x5a},{0xae,0xf0},{0xae,0xf4}, {0xd2,0x44},{0xae,0xf3},{0xae,0xf1},{0xae,0xf2},{0x84,0xec}, {0xd5,0xdf},{0xb2,0x42},{0xb4,0xe3},{0x00,0x00},{0xb4,0xe1}, {0xb4,0xe2},{0xd9,0xe6},{0x9b,0x5f},{0xa0,0x63},{0xba,0x72}, {0xa4,0xf4},{0x9c,0xf3},{0xc9,0xa1},{0x95,0xeb},{0xa5,0xc3}, {0xfe,0x40},{0x91,0xd2},{0xc9,0xa4},{0x00,0x00},{0xa0,0x64}, {0xa5,0xc6},{0xc9,0xa3},{0xa5,0xc5},{0xa5,0xc4},{0xa8,0x44}, {0xc9,0xa2},{0x00,0x00},{0x00,0x00},{0xc9,0xf8},{0x85,0xb9}, {0x00,0x00},{0x86,0xd5},{0xc9,0xfc},{0xc9,0xfe},{0xca,0x40}, {0xa6,0xc5},{0xa6,0xc6},{0xc9,0xfb},{0xa6,0xc1},{0x00,0x00}, {0xc9,0xf9},{0x00,0x00},{0xc9,0xfd},{0xa6,0xc2},{0x00,0x00}, {0xa6,0xbd},{0x9b,0x60},{0xa6,0xbe},{0x95,0xea},{0xa6,0xc4}, {0xc9,0xfa},{0xa6,0xbc},{0xa8,0x45},{0xa6,0xbf},{0xa6,0xc0}, {0xa6,0xc3},{0xa0,0x65},{0x00,0x00},{0x84,0xf1},{0xcb,0x5b}, {0xcb,0x59},{0xcb,0x4c},{0xa8,0x51},{0xcb,0x53},{0xa8,0x4c}, {0xcb,0x4d},{0x00,0x00},{0xcb,0x55},{0x9b,0x61},{0xcb,0x52}, {0xa8,0x4f},{0xcb,0x51},{0xa8,0x56},{0xcb,0x5a},{0xa8,0x58}, {0x9b,0x62},{0xa8,0x5a},{0x00,0x00},{0xcb,0x4b},{0x83,0x6e}, {0xa8,0x4d},{0xcb,0x5c},{0x00,0x00},{0xa8,0x54},{0xa8,0x57}, {0x9b,0x63},{0xcd,0x45},{0xa8,0x47},{0xa8,0x5e},{0xa8,0x55}, {0xcb,0x4e},{0xa8,0x4a},{0xa8,0x59},{0xcb,0x56},{0xa8,0x48}, {0xa8,0x49},{0xcd,0x43},{0xcb,0x4f},{0xa8,0x50},{0xa8,0x5b}, {0xcb,0x5d},{0xcb,0x50},{0xa8,0x4e},{0x00,0x00},{0xa8,0x53}, {0xcc,0xee},{0xa8,0x5c},{0xcb,0x57},{0xa8,0x52},{0x00,0x00}, {0xa8,0x5d},{0xa8,0x46},{0xcb,0x54},{0xa8,0x4b},{0xcb,0x58}, {0xcd,0x44},{0x00,0x00},{0x85,0xd8},{0x00,0x00},{0x95,0xca}, {0x93,0x6b},{0x88,0xf4},{0x8e,0x75},{0x8b,0x7e},{0x84,0x5f}, {0x85,0xdc},{0x00,0x00},{0x8d,0xe0},{0x86,0xdb},{0xaa,0x6a}, {0xaa,0x7a},{0xcc,0xf5},{0xaa,0x71},{0x9b,0x64},{0xcd,0x4b}, {0xaa,0x62},{0xa0,0x66},{0xaa,0x65},{0xcd,0x42},{0x00,0x00}, {0xcc,0xf3},{0xcc,0xf7},{0xaa,0x6d},{0xaa,0x6f},{0xcc,0xfa}, {0xaa,0x76},{0xaa,0x68},{0xaa,0x66},{0xaa,0x67},{0xaa,0x75}, {0xcd,0x47},{0xaa,0x70},{0xcc,0xf9},{0xcc,0xfb},{0xaa,0x6e}, {0xaa,0x73},{0xcc,0xfc},{0xcd,0x4a},{0x00,0x00},{0xac,0x75}, {0xaa,0x79},{0x9b,0x65},{0xaa,0x63},{0xcd,0x49},{0xfc,0x7d}, {0xcd,0x4d},{0xcc,0xf8},{0xcd,0x4f},{0xcd,0x40},{0xaa,0x6c}, {0xcc,0xf4},{0xaa,0x6b},{0xaa,0x7d},{0xaa,0x72},{0x00,0x00}, {0xcc,0xf2},{0xcf,0x75},{0xaa,0x78},{0xaa,0x7c},{0xcd,0x41}, {0xcd,0x46},{0x9b,0x66},{0xaa,0x7e},{0xaa,0x77},{0xaa,0x69}, {0xaa,0x5f},{0x00,0x00},{0xaa,0x64},{0x00,0x00},{0xcc,0xf6}, {0xaa,0x60},{0xcd,0x4e},{0x84,0x5e},{0xcc,0xf0},{0xcc,0xef}, {0xcc,0xfd},{0xcc,0xf1},{0xaa,0x7b},{0xae,0xf5},{0xaa,0x74}, {0xcc,0xfe},{0xaa,0x61},{0x00,0x00},{0xac,0xa6},{0x8f,0x54}, {0x8f,0xbc},{0x8b,0xa2},{0xcd,0x4c},{0x8f,0x77},{0x8a,0xd2}, {0x87,0xea},{0x88,0xf2},{0x83,0xbd},{0x9b,0x67},{0xcf,0x7c}, {0xcf,0xa1},{0x9b,0x68},{0xcf,0xa4},{0xcf,0x77},{0x9b,0x69}, {0x9b,0x6a},{0xcf,0xa7},{0xcf,0xaa},{0xcf,0xac},{0xcf,0x74}, {0xac,0x76},{0xac,0x7b},{0xd2,0x49},{0xac,0xad},{0xcf,0xa5}, {0xcf,0xad},{0xcf,0x7b},{0xcf,0x73},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xd2,0x64},{0xac,0x7e},{0xcf,0xa2},{0xcf,0x78}, {0xcf,0x7a},{0xac,0xa5},{0x00,0x00},{0xcf,0x7d},{0xac,0x7d}, {0xcf,0x70},{0xcf,0xa8},{0x00,0x00},{0xcf,0xab},{0x00,0x00}, {0x95,0xb0},{0xac,0x7a},{0x9b,0x6b},{0xac,0xa8},{0xcf,0x6d}, {0xac,0xaa},{0xac,0x78},{0xac,0xae},{0xcf,0xa9},{0xcf,0x6f}, {0xac,0xab},{0xd2,0x5e},{0xcd,0x48},{0xac,0x7c},{0xac,0x77}, {0xcf,0x76},{0xcf,0x6e},{0xac,0xac},{0xac,0xa4},{0xcf,0xa3}, {0xac,0xa9},{0xac,0xa7},{0xcf,0x79},{0xac,0xa1},{0xcf,0x71}, {0xac,0xa2},{0xac,0xa3},{0xcf,0x72},{0xcf,0xa6},{0xac,0x79}, {0xcf,0x7e},{0x83,0xbe},{0x92,0xea},{0x93,0x48},{0x87,0xe9}, {0x87,0xec},{0x8d,0xe1},{0x00,0x00},{0x88,0xf3},{0x84,0xf2}, {0x00,0x00},{0x8e,0xe9},{0x89,0xec},{0x8a,0xd7},{0x00,0x00}, {0x84,0xf3},{0x8e,0x74},{0x88,0xf1},{0x87,0xf0},{0x00,0x00}, {0x00,0x00},{0x9b,0x6c},{0xd2,0x4c},{0xae,0xfd},{0xaf,0x43}, {0x9b,0x6d},{0x93,0xbd},{0x00,0x00},{0xd2,0x55},{0xd2,0x5b}, {0xd2,0x57},{0xd2,0x4a},{0xd2,0x4d},{0xd2,0x46},{0xd2,0x47}, {0xaf,0x4a},{0xae,0xfa},{0xd2,0x56},{0xd2,0x5f},{0xaf,0x45}, {0xae,0xf6},{0x00,0x00},{0xaf,0x40},{0xd2,0x4e},{0xaf,0x42}, {0xd2,0x4f},{0xd2,0x59},{0x9b,0x6e},{0xfb,0xa7},{0x00,0x00}, {0xaf,0x44},{0xd2,0x68},{0xd2,0x48},{0xae,0xfc},{0xae,0xfb}, {0xaf,0x48},{0xd2,0x45},{0xd2,0x66},{0xd2,0x5a},{0xd2,0x67}, {0xd2,0x61},{0xd2,0x53},{0xd2,0x62},{0x9b,0x6f},{0xd2,0x5c}, {0xd2,0x65},{0xd2,0x63},{0xaf,0x49},{0xd2,0x54},{0xae,0xf9}, {0xae,0xf8},{0xaf,0x41},{0xaf,0x47},{0xd2,0x60},{0xaf,0x46}, {0xd2,0x51},{0xb2,0x43},{0x9b,0x70},{0xd2,0x69},{0xd2,0x50}, {0xd2,0x4b},{0xae,0xfe},{0xaf,0x4b},{0xae,0xf7},{0xfe,0x5c}, {0xd2,0x58},{0xd2,0x5d},{0x93,0xe8},{0x00,0x00},{0x89,0xed}, {0x82,0x71},{0x8e,0xbb},{0x8d,0xcf},{0x86,0xda},{0x8e,0xbd}, {0x84,0xf0},{0x00,0x00},{0x84,0xf4},{0x86,0xde},{0x9b,0x71}, {0x87,0xee},{0x87,0xef},{0x86,0xd9},{0x89,0xef},{0xb2,0x65}, {0xd5,0xe1},{0xd5,0xe5},{0x00,0x00},{0xb2,0x52},{0xb2,0x50}, {0x00,0x00},{0x9b,0x72},{0xb2,0x47},{0xd5,0xe3},{0xd5,0xe2}, {0xb2,0x5b},{0x00,0x00},{0xd5,0xe8},{0xb2,0x55},{0xfc,0xa1}, {0xd5,0xfa},{0xd6,0x47},{0xb2,0x44},{0xd5,0xf7},{0xd5,0xf0}, {0xb2,0x67},{0xd5,0xe0},{0x00,0x00},{0xd5,0xfc},{0x00,0x00}, {0xb2,0x64},{0xb2,0x58},{0xb2,0x63},{0xb2,0x4e},{0xd5,0xec}, {0xd5,0xfe},{0xd5,0xf6},{0xb2,0x4f},{0xb2,0x49},{0xd6,0x45}, {0x00,0x00},{0xd5,0xfd},{0xd6,0x40},{0xb2,0x51},{0xb2,0x59}, {0xd6,0x42},{0xd5,0xea},{0xd5,0xfb},{0xd5,0xef},{0xd6,0x44}, {0xb2,0x5e},{0xb2,0x46},{0xb2,0x5c},{0xd5,0xf4},{0xd5,0xf2}, {0xd5,0xf3},{0xb2,0x53},{0xd5,0xee},{0xd5,0xed},{0xb2,0x48}, {0xd5,0xe7},{0xd6,0x46},{0xb2,0x4a},{0xd5,0xf1},{0xb2,0x68}, {0x00,0x00},{0xb2,0x62},{0xd5,0xe6},{0xb2,0x5f},{0xb2,0x5d}, {0xb2,0x66},{0xd5,0xf8},{0xb2,0x61},{0xd2,0x52},{0xd5,0xf9}, {0xb2,0x60},{0xd6,0x41},{0xb2,0x45},{0xd5,0xf5},{0xb2,0x57}, {0xd5,0xe9},{0xb2,0x56},{0xa0,0x67},{0xb2,0x54},{0xb2,0x4c}, {0xb2,0x4b},{0xd9,0xe7},{0xd6,0x43},{0x9b,0x73},{0x00,0x00}, {0xd5,0xeb},{0x00,0x00},{0x9b,0x74},{0xd9,0xfc},{0x9b,0x75}, {0xb2,0x4d},{0x00,0x00},{0x92,0x64},{0x92,0xc6},{0x92,0xe4}, {0x84,0x5d},{0x92,0xdd},{0x8d,0xd0},{0x86,0xd4},{0x8a,0xd5}, {0x9b,0x76},{0x86,0xd8},{0x88,0xf6},{0x00,0x00},{0x92,0xaa}, {0x86,0xdc},{0x94,0xaa},{0x8a,0xd3},{0x86,0xdd},{0x9b,0x77}, {0xb5,0x41},{0xb2,0x5a},{0xb4,0xee},{0xd9,0xf6},{0xb4,0xfc}, {0x00,0x00},{0xd9,0xea},{0xb4,0xeb},{0xb4,0xe7},{0xda,0x49}, {0xb4,0xed},{0xb4,0xf1},{0xb4,0xec},{0xb4,0xf5},{0xda,0x4d}, {0xda,0x44},{0xa0,0x68},{0x9b,0x78},{0xd9,0xf1},{0xb4,0xfa}, {0xb4,0xf4},{0xd9,0xfd},{0xb4,0xe4},{0xda,0x4a},{0xda,0x43}, {0xb4,0xe8},{0xd9,0xf7},{0xb4,0xf7},{0xda,0x55},{0xda,0x56}, {0x00,0x00},{0xb4,0xe5},{0xda,0x48},{0xb4,0xf9},{0xd9,0xfb}, {0xd9,0xed},{0xd9,0xee},{0xb4,0xfd},{0xd9,0xf2},{0xd9,0xf9}, {0xd9,0xf3},{0x00,0x00},{0xb4,0xfb},{0xb5,0x44},{0xd9,0xef}, {0xd9,0xe8},{0xd9,0xe9},{0x00,0x00},{0xd9,0xeb},{0xb4,0xea}, {0xd9,0xf8},{0x00,0x00},{0xb4,0xf8},{0xb5,0x42},{0xfc,0x7e}, {0x9b,0x79},{0xd9,0xfa},{0xda,0x53},{0xda,0x4b},{0xb4,0xe6}, {0xda,0x51},{0xb4,0xf2},{0x9d,0xcb},{0xb4,0xf0},{0x9b,0x7a}, {0xda,0x57},{0xb4,0xef},{0xda,0x41},{0xd9,0xf4},{0xd9,0xfe}, {0xb5,0x47},{0xda,0x45},{0xda,0x42},{0xd9,0xf0},{0xb5,0x43}, {0xda,0x4f},{0xda,0x4c},{0xda,0x54},{0xb4,0xe9},{0xda,0x40}, {0xb5,0x46},{0x00,0x00},{0xda,0x47},{0x00,0x00},{0x00,0x00}, {0xb4,0xf3},{0xb4,0xf6},{0x00,0x00},{0xda,0x46},{0xb5,0x45}, {0xd9,0xf5},{0xd5,0xe4},{0x00,0x00},{0xa0,0x69},{0xda,0x50}, {0xda,0x4e},{0xda,0x52},{0x00,0x00},{0x00,0x00},{0x95,0xcb}, {0x00,0x00},{0x8d,0x6f},{0x85,0xda},{0x93,0xd2},{0x00,0x00}, {0xa0,0x6a},{0x87,0xed},{0x00,0x00},{0x8a,0xd6},{0xa0,0x6b}, {0x00,0x00},{0xd9,0xec},{0xb5,0x40},{0x00,0x00},{0xfe,0x6a}, {0x82,0x78},{0xde,0x61},{0xde,0x60},{0xde,0x46},{0xb7,0xbd}, {0x00,0x00},{0xde,0x5f},{0xde,0x49},{0xde,0x4a},{0x00,0x00}, {0xb7,0xc7},{0xde,0x68},{0xb7,0xc2},{0xde,0x5e},{0x9b,0x7b}, {0xde,0x43},{0xb7,0xc8},{0xb7,0xbe},{0xde,0x52},{0xde,0x48}, {0xde,0x4b},{0xde,0x63},{0xb7,0xb8},{0xde,0x6a},{0xde,0x62}, {0xb7,0xc1},{0xde,0x57},{0xb7,0xcc},{0x00,0x00},{0x00,0x00}, {0xb7,0xcb},{0xb7,0xc5},{0x00,0x00},{0x00,0x00},{0xde,0x69}, {0xb7,0xb9},{0xde,0x55},{0xde,0x4c},{0xde,0x59},{0xde,0x65}, {0xb7,0xcd},{0x9b,0x7c},{0xb7,0xbb},{0xde,0x54},{0x9b,0x7d}, {0xde,0x4d},{0xb7,0xc4},{0xa0,0x6c},{0xb7,0xc3},{0xde,0x50}, {0xde,0x5a},{0xde,0x64},{0xde,0x47},{0xde,0x51},{0xb7,0xbc}, {0xde,0x5b},{0xb7,0xc9},{0xb7,0xc0},{0xde,0x4e},{0xb7,0xbf}, {0xde,0x45},{0xde,0x53},{0xde,0x67},{0xb4,0xfe},{0xba,0xb0}, {0xde,0x56},{0xe2,0x6c},{0xde,0x58},{0xde,0x66},{0xb7,0xc6}, {0xde,0x4f},{0xb7,0xba},{0xb7,0xca},{0xbc,0xf0},{0xde,0x44}, {0x8e,0xbe},{0xde,0x5d},{0x95,0x50},{0x86,0xd3},{0x9b,0x7e}, {0xde,0x5c},{0x93,0x69},{0x86,0xd7},{0xa0,0x6d},{0x90,0x41}, {0x86,0xd6},{0xa0,0x6e},{0x00,0x00},{0x8a,0xd4},{0x89,0xee}, {0x8d,0x7b},{0x00,0x00},{0x89,0xeb},{0x8c,0xd2},{0x00,0x00}, {0xe2,0xaa},{0xba,0xad},{0xe2,0x7d},{0xe2,0xa4},{0xba,0xa2}, {0x00,0x00},{0xe2,0x6e},{0xba,0xaf},{0x00,0x00},{0xba,0x77}, {0xe2,0x6d},{0xe2,0xb0},{0xba,0xb1},{0xe2,0x71},{0xe2,0xa3}, {0x9b,0xa1},{0xe2,0x73},{0xe2,0xb3},{0xe2,0xaf},{0xba,0x75}, {0xba,0xa1},{0xe6,0x53},{0xba,0xae},{0xba,0x7d},{0xe2,0x6f}, {0x9b,0xa2},{0xe2,0xae},{0xba,0xa3},{0xe2,0xab},{0xe2,0xb8}, {0xe2,0x75},{0xe2,0x7e},{0x9b,0xa3},{0x9b,0xa4},{0xe2,0xb6}, {0xe2,0xac},{0xba,0x7c},{0x00,0x00},{0xa0,0x6f},{0xe2,0x7c}, {0xba,0x76},{0xba,0x74},{0xba,0xa8},{0x9b,0xa5},{0x9b,0xa6}, {0xe2,0x7a},{0xe2,0x77},{0xe2,0x78},{0x00,0x00},{0xe2,0xb2}, {0x00,0x00},{0xe2,0xb7},{0xe2,0xb5},{0xba,0x7a},{0xe2,0xb9}, {0xba,0x7e},{0xba,0xa7},{0xa0,0x70},{0xe2,0x70},{0xe5,0xfa}, {0xe2,0x79},{0x00,0x00},{0xba,0x78},{0xba,0xac},{0xba,0xa9}, {0xba,0x7b},{0xe2,0xa5},{0xe2,0x74},{0xba,0xaa},{0xe2,0xa7}, {0xba,0xa4},{0xba,0xa6},{0xba,0x73},{0x9b,0xa7},{0xe2,0xa9}, {0xe2,0xa1},{0xe2,0x72},{0xba,0xa5},{0xe2,0xb1},{0xe2,0xb4}, {0xe2,0x7b},{0xe2,0xa8},{0x9b,0xa8},{0xba,0x79},{0xbc,0xdf}, {0xe2,0xa6},{0xe5,0xf9},{0x00,0x00},{0xe2,0xad},{0xfc,0xa2}, {0x82,0x50},{0x8f,0xbd},{0x8b,0x7c},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x8b,0xfb},{0x00,0x00},{0x89,0xf0},{0xe2,0x76}, {0xe6,0x44},{0xe6,0x4e},{0xbc,0xe2},{0xe6,0x4d},{0xe6,0x59}, {0xbc,0xe4},{0xe6,0x4b},{0x9b,0xa9},{0xe6,0x4f},{0xbc,0xef}, {0x00,0x00},{0xe6,0x46},{0xbc,0xe7},{0x90,0xb9},{0xe6,0x52}, {0xe9,0xf0},{0xbc,0xf3},{0xbc,0xf2},{0xe6,0x54},{0xe6,0x43}, {0xe6,0x5e},{0xbc,0xed},{0x00,0x00},{0xbc,0xe3},{0xe6,0x57}, {0x00,0x00},{0xe6,0x5b},{0xe6,0x60},{0xe6,0x55},{0xe6,0x49}, {0xbc,0xe6},{0xbc,0xe9},{0xbc,0xf1},{0xbc,0xec},{0x00,0x00}, {0xe6,0x4c},{0xe2,0xa2},{0xa0,0x71},{0x00,0x00},{0xe6,0x48}, {0xe6,0x5f},{0xbc,0xe8},{0x9b,0xaa},{0xbc,0xeb},{0xe6,0x61}, {0xbc,0xe0},{0xe6,0x56},{0xe5,0xfb},{0xe6,0x5c},{0xc0,0xdf}, {0x95,0x6b},{0xe6,0x4a},{0x00,0x00},{0xbc,0xe1},{0xe6,0x45}, {0xbc,0xe5},{0xe5,0xfc},{0xba,0xab},{0xe6,0x41},{0x9b,0xab}, {0xe6,0x5a},{0xe6,0x42},{0xe6,0x40},{0xbc,0xea},{0x00,0x00}, {0xe6,0x58},{0xa0,0x72},{0xe5,0xfe},{0xe6,0x51},{0xe6,0x50}, {0xe6,0x5d},{0xe6,0x47},{0xbc,0xee},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x8b,0xfa},{0x9b,0xac},{0xe9,0xf3}, {0x9b,0xad},{0xbf,0x49},{0xbe,0xfe},{0xea,0x40},{0xe9,0xeb}, {0xbf,0x41},{0xe9,0xf7},{0xbf,0x48},{0xbf,0x43},{0xe9,0xf5}, {0xed,0x4f},{0xe9,0xfb},{0xea,0x42},{0xe9,0xfa},{0xe9,0xe9}, {0xe9,0xf8},{0xea,0x44},{0xea,0x46},{0xbe,0xfd},{0xea,0x45}, {0xbf,0x44},{0xbf,0x4a},{0xa0,0x73},{0xbf,0x47},{0x00,0x00}, {0xe9,0xfe},{0xbf,0x46},{0xe9,0xf9},{0x9b,0xae},{0xe9,0xed}, {0xe9,0xf2},{0x9b,0xaf},{0xe9,0xfd},{0xbf,0x45},{0xbf,0x42}, {0xbe,0xfc},{0xbf,0x40},{0xe9,0xf1},{0x00,0x00},{0xe5,0xfd}, {0xe9,0xec},{0xe9,0xef},{0xea,0x41},{0xe9,0xf4},{0xe9,0xea}, {0xed,0x4e},{0xea,0x43},{0xe9,0xee},{0xe9,0xfc},{0x00,0x00}, {0x8b,0x7d},{0x8b,0xa1},{0x9b,0xb0},{0xed,0x51},{0xc0,0xe3}, {0x00,0x00},{0x00,0x00},{0xc0,0xd7},{0x9b,0xb1},{0xfc,0xa4}, {0xc0,0xdb},{0xed,0x53},{0xed,0x59},{0xed,0x57},{0xc0,0xd9}, {0xc0,0xda},{0xc0,0xe1},{0xed,0x5a},{0xed,0x52},{0xc0,0xdc}, {0x00,0x00},{0xed,0x56},{0xed,0x55},{0xed,0x5b},{0xc0,0xe2}, {0x00,0x00},{0xc0,0xdd},{0xc0,0xe0},{0xed,0x54},{0xc0,0xe4}, {0xc0,0xde},{0xc0,0xe5},{0xc0,0xd8},{0xed,0x58},{0xa0,0x74}, {0xed,0x50},{0xa0,0x75},{0x95,0xc6},{0xef,0xf7},{0x9b,0xb2}, {0x00,0x00},{0xc2,0x71},{0xef,0xf4},{0xef,0xf6},{0x00,0x00}, {0xc2,0x6f},{0xef,0xf2},{0xef,0xf3},{0xef,0xee},{0x00,0x00}, {0x9b,0xb3},{0xe9,0xf6},{0xef,0xef},{0xc2,0x70},{0xef,0xeb}, {0x00,0x00},{0xc2,0x6d},{0xef,0xf8},{0xc2,0x6e},{0xef,0xec}, {0xef,0xed},{0xef,0xf1},{0xc2,0x73},{0x00,0x00},{0xc2,0x72}, {0x00,0x00},{0x00,0x00},{0xef,0xf0},{0xc3,0x78},{0xf2,0x5f}, {0xf2,0x65},{0xc3,0x79},{0xf2,0x5c},{0xc3,0x76},{0xc3,0x73}, {0xf2,0x67},{0xc3,0x77},{0xfe,0xa1},{0xc3,0x74},{0xf2,0x5e}, {0xf2,0x61},{0xf2,0x62},{0xf2,0x63},{0xf2,0x66},{0x00,0x00}, {0xef,0xf5},{0xf2,0x5d},{0xc3,0x75},{0xf2,0x64},{0xf2,0x68}, {0xf2,0x60},{0x93,0x40},{0x00,0x00},{0x00,0x00},{0xf4,0x5d}, {0xc4,0x6a},{0xf4,0x60},{0xc4,0x6b},{0xf4,0x68},{0xf4,0x5f}, {0xf4,0x5c},{0x00,0x00},{0xf4,0x5e},{0xf4,0x62},{0xf4,0x65}, {0xf4,0x64},{0xf4,0x67},{0xf4,0x5b},{0x00,0x00},{0xc4,0x69}, {0xf4,0x63},{0xf4,0x66},{0xf4,0x69},{0xf4,0x61},{0xf5,0xd3}, {0xf5,0xd4},{0xf5,0xd8},{0xf5,0xd9},{0x00,0x00},{0xf5,0xd6}, {0xf5,0xd7},{0xf5,0xd5},{0x9b,0xb4},{0xc4,0xe9},{0x9b,0xb5}, {0x00,0x00},{0x90,0x76},{0x9b,0xb6},{0xc5,0x78},{0xf6,0xeb}, {0x00,0x00},{0x9b,0xb7},{0xf6,0xe8},{0xf6,0xe9},{0xf6,0xea}, {0xc5,0x79},{0x00,0x00},{0xf7,0xe5},{0xf7,0xe4},{0x9b,0xb8}, {0xf8,0xaf},{0xc5,0xf4},{0xf8,0xad},{0xf8,0xb0},{0xf8,0xae}, {0xf8,0xf5},{0xc6,0x57},{0xc6,0x65},{0xf9,0xa3},{0xf9,0x6c}, {0x9b,0xb9},{0xf9,0xa2},{0xf9,0xd0},{0xf9,0xd1},{0xa4,0xf5}, {0x9c,0xf6},{0x85,0xd9},{0x00,0x00},{0x88,0xf9},{0xa6,0xc7}, {0xca,0x41},{0x00,0x00},{0x00,0x00},{0xcb,0x5e},{0x8d,0x5f}, {0xa8,0x5f},{0x9b,0xba},{0xa8,0x62},{0x9b,0xbb},{0xcb,0x5f}, {0x00,0x00},{0xa8,0x60},{0xa8,0x61},{0x83,0x4d},{0x89,0xf2}, {0x85,0xdf},{0xfc,0xa5},{0xcd,0x58},{0xcd,0x5a},{0xcd,0x55}, {0xcd,0x52},{0xcd,0x54},{0x00,0x00},{0x00,0x00},{0x93,0xf4}, {0xaa,0xa4},{0x9b,0xbc},{0x00,0x00},{0xfe,0xa3},{0xaa,0xa2}, {0x9b,0xbd},{0x00,0x00},{0xcd,0x56},{0xaa,0xa3},{0xcd,0x53}, {0xcd,0x50},{0xaa,0xa1},{0xcd,0x57},{0x00,0x00},{0xcd,0x51}, {0xaa,0xa5},{0xcd,0x59},{0x00,0x00},{0x8e,0x45},{0x8e,0x76}, {0x00,0x00},{0xcf,0xaf},{0x9b,0xbe},{0xcf,0xb3},{0x00,0x00}, {0x9b,0xbf},{0xac,0xb7},{0x9b,0xc0},{0x9b,0xc1},{0x9b,0xc2}, {0x00,0x00},{0xcf,0xb6},{0x00,0x00},{0xac,0xaf},{0xac,0xb2}, {0xac,0xb4},{0xac,0xb6},{0xac,0xb3},{0xcf,0xb2},{0xcf,0xb1}, {0x00,0x00},{0xac,0xb1},{0xcf,0xb4},{0xcf,0xb5},{0x00,0x00}, {0xcf,0xae},{0xac,0xb5},{0x8a,0xbb},{0xac,0xb0},{0xa0,0x76}, {0x85,0xde},{0x88,0xf7},{0xcf,0xb0},{0x00,0x00},{0xa0,0x77}, {0x8b,0xa3},{0x8c,0x7a},{0x8d,0xd1},{0x9b,0xc3},{0xd2,0x77}, {0xd2,0x78},{0xd2,0x79},{0xaf,0x50},{0x00,0x00},{0xaf,0x4c}, {0xd2,0x6e},{0x9b,0xc4},{0xd2,0x76},{0xd2,0x7b},{0xaf,0x51}, {0x9b,0xc5},{0xd2,0x6c},{0xd2,0x72},{0xd2,0x6b},{0xd2,0x75}, {0xfc,0x57},{0x9b,0xc6},{0xd2,0x71},{0xaf,0x4d},{0xaf,0x4f}, {0xd2,0x7a},{0x89,0xf3},{0xd2,0x6a},{0xd2,0x6d},{0xd2,0x73}, {0x95,0xaf},{0xd2,0x74},{0xd2,0x7c},{0xd2,0x70},{0x00,0x00}, {0xaf,0x4e},{0x00,0x00},{0x85,0xdd},{0x88,0xf8},{0x8e,0xea}, {0x89,0xf4},{0x00,0x00},{0x88,0xfa},{0x8a,0xd8},{0x87,0xf1}, {0x00,0x00},{0xb2,0x6d},{0xd6,0x4e},{0x95,0x49},{0x00,0x00}, {0xd6,0x50},{0xd6,0x4c},{0x9c,0x40},{0xd6,0x58},{0xd6,0x4a}, {0xd6,0x57},{0xb2,0x69},{0xd6,0x48},{0xda,0x5b},{0xd6,0x52}, {0xb2,0x6c},{0x9c,0x4b},{0xd6,0x53},{0xd6,0x56},{0x00,0x00}, {0xd6,0x5a},{0x00,0x00},{0xd6,0x4f},{0x9c,0x4c},{0xd6,0x54}, {0x00,0x00},{0x00,0x00},{0xb2,0x6a},{0xb2,0x6b},{0xd6,0x59}, {0xd6,0x4d},{0xd6,0x49},{0xd6,0x5b},{0xa0,0x78},{0xd6,0x51}, {0x00,0x00},{0x00,0x00},{0xd6,0x55},{0x82,0x44},{0x85,0xe0}, {0x88,0xfb},{0xd6,0x4b},{0x8a,0xd9},{0xb5,0x48},{0xb5,0x49}, {0xda,0x65},{0xb5,0x4f},{0x9c,0x4d},{0xda,0x59},{0xda,0x62}, {0xda,0x58},{0xb5,0x4c},{0xda,0x60},{0xda,0x5e},{0x00,0x00}, {0xda,0x5f},{0xb5,0x4a},{0x00,0x00},{0xda,0x63},{0x9c,0x4e}, {0x00,0x00},{0x9c,0x4f},{0x9c,0x50},{0x00,0x00},{0xda,0x5c}, {0xda,0x5a},{0xb5,0x4b},{0xda,0x5d},{0xda,0x61},{0x9c,0x51}, {0xfc,0xa7},{0x9c,0x52},{0xb5,0x4d},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xda,0x64},{0x9c,0x53},{0x92,0xe5},{0x00,0x00}, {0x9c,0x54},{0xfe,0x76},{0x9c,0x55},{0xde,0x70},{0xde,0x77}, {0xde,0x79},{0xde,0xa1},{0xfb,0x66},{0xb7,0xda},{0xde,0x6b}, {0x00,0x00},{0xb7,0xd2},{0x95,0x4f},{0xde,0x7a},{0xb7,0xd7}, {0xde,0xa2},{0xb7,0xce},{0x9c,0x56},{0xde,0x7d},{0x95,0x5f}, {0xde,0x6d},{0xde,0x7e},{0xde,0x6c},{0xa0,0x7a},{0xb7,0xdc}, {0x9d,0xcd},{0xde,0x78},{0xb7,0xcf},{0xde,0xa3},{0x00,0x00}, {0xb7,0xd4},{0xde,0x71},{0xb7,0xd9},{0xde,0x7c},{0xde,0x6f}, {0xde,0x76},{0xde,0x72},{0xde,0x6e},{0xb7,0xd1},{0xb7,0xd8}, {0xb7,0xd6},{0xb7,0xd3},{0xb7,0xdb},{0xb7,0xd0},{0xde,0x75}, {0x9c,0x57},{0xb7,0xd5},{0x00,0x00},{0xb5,0x4e},{0x00,0x00}, {0xde,0x7b},{0xfe,0x53},{0xde,0x73},{0xa0,0x7b},{0x00,0x00}, {0x9c,0x58},{0xfc,0xa9},{0x9c,0x59},{0xde,0x74},{0x00,0x00}, {0xa0,0x7c},{0xe2,0xc1},{0x9c,0x5a},{0xba,0xb4},{0x9c,0x5b}, {0x00,0x00},{0xe2,0xbd},{0xe2,0xc3},{0xe2,0xbf},{0x00,0x00}, {0xba,0xb6},{0xe2,0xbe},{0xe2,0xc2},{0xe2,0xba},{0xa0,0xd8}, {0xe2,0xbc},{0xba,0xb5},{0x00,0x00},{0x9c,0x5c},{0x00,0x00}, {0x9c,0x5d},{0xe2,0xc0},{0xe2,0xbb},{0x9c,0x5e},{0xba,0xb7}, {0x00,0x00},{0xba,0xb2},{0x94,0xab},{0x9c,0x5f},{0xe2,0xc4}, {0xa0,0xe7},{0xba,0xb3},{0xe6,0x67},{0xe6,0x64},{0xe6,0x70}, {0xe6,0x6a},{0xe6,0x6c},{0xbc,0xf4},{0xe6,0x66},{0xe6,0x6e}, {0x9c,0x60},{0x9c,0x61},{0xe6,0x6d},{0xe6,0x6b},{0x00,0x00}, {0xe6,0x71},{0xbc,0xf7},{0xe6,0x68},{0xe6,0x6f},{0x00,0x00}, {0xbc,0xf5},{0x9c,0x62},{0x00,0x00},{0xe6,0x63},{0xe6,0x65}, {0xbc,0xf6},{0xe6,0x62},{0xe6,0x72},{0x9c,0x63},{0xe6,0x69}, {0x00,0x00},{0x9c,0x64},{0xea,0x4a},{0xbf,0x51},{0x9c,0x65}, {0x00,0x00},{0xea,0x55},{0xea,0x53},{0xbf,0x4b},{0xea,0x49}, {0xea,0x4c},{0xea,0x4d},{0xea,0x48},{0xbf,0x55},{0xbf,0x56}, {0xea,0x47},{0xea,0x56},{0xea,0x51},{0xbf,0x4f},{0xbf,0x4c}, {0xea,0x50},{0xea,0x4e},{0x00,0x00},{0x00,0x00},{0xbf,0x52}, {0xea,0x52},{0xbf,0x4d},{0x9c,0x66},{0xbf,0x4e},{0x00,0x00}, {0xea,0x4f},{0xbf,0x50},{0xea,0x4b},{0xa0,0xe8},{0xea,0x54}, {0xbf,0x53},{0xea,0x57},{0xea,0x58},{0xbf,0x54},{0x9c,0x67}, {0x00,0x00},{0xc0,0xe7},{0xc0,0xee},{0xed,0x5c},{0xed,0x62}, {0x00,0x00},{0xed,0x60},{0xc0,0xea},{0xc0,0xe9},{0xc0,0xe6}, {0xed,0x5e},{0x00,0x00},{0x00,0x00},{0x9c,0x68},{0xc0,0xec}, {0xc0,0xeb},{0xc0,0xe8},{0x00,0x00},{0xed,0x61},{0xed,0x5d}, {0xed,0x5f},{0x00,0x00},{0xc0,0xed},{0xa0,0xf5},{0xfb,0x70}, {0x00,0x00},{0xc2,0x77},{0xef,0xfb},{0x00,0x00},{0xc2,0x74}, {0xc2,0x75},{0xef,0xfd},{0xc2,0x76},{0xef,0xfa},{0x9c,0x69}, {0xef,0xf9},{0xf2,0x6c},{0xef,0xfc},{0x00,0x00},{0xf2,0x6d}, {0xc3,0x7a},{0xf2,0x6b},{0x00,0x00},{0x9c,0x6a},{0xf2,0x6a}, {0x00,0x00},{0xf2,0x69},{0xc3,0x7b},{0x9c,0x6b},{0x9c,0x6c}, {0xc4,0x6c},{0x00,0x00},{0x00,0x00},{0xf4,0x6a},{0xf4,0x6b}, {0xfc,0xac},{0x9c,0x6d},{0x9c,0x6e},{0x00,0x00},{0xf5,0xdc}, {0xf5,0xdb},{0xc4,0xea},{0x00,0x00},{0xf5,0xda},{0xf6,0xec}, {0xf6,0xed},{0x00,0x00},{0x00,0x00},{0xf7,0xe6},{0xf8,0xb1}, {0x9c,0x6f},{0x9d,0x5a},{0xf8,0xf6},{0xf9,0xbc},{0xc6,0x79}, {0xf9,0xc6},{0xa4,0xf6},{0x91,0xc9},{0xaa,0xa6},{0xaa,0xa7}, {0x9c,0x71},{0x00,0x00},{0xac,0xb8},{0x85,0xc6},{0xfa,0x64}, {0x00,0x00},{0x00,0x00},{0xc0,0xef},{0xa4,0xf7},{0x85,0xe1}, {0xaa,0xa8},{0xaf,0x52},{0xb7,0xdd},{0xa4,0xf8},{0xfa,0x65}, {0xb2,0x6e},{0xba,0xb8},{0xc9,0x62},{0x95,0xa7},{0xcf,0xb7}, {0xd2,0x7d},{0x00,0x00},{0xe2,0xc5},{0x00,0x00},{0xc0,0xf0}, {0xa4,0xf9},{0xaa,0xa9},{0xcf,0xb8},{0xcf,0xb9},{0xda,0x66}, {0xb5,0x50},{0x8b,0xa4},{0x00,0x00},{0xde,0xa4},{0xfc,0xad}, {0x00,0x00},{0xb7,0xde},{0xe2,0xc6},{0x00,0x00},{0x95,0x6e}, {0xbc,0xf8},{0x9c,0x73},{0xc3,0x7c},{0xa4,0xfa},{0xda,0x67}, {0xa4,0xfb},{0x9c,0x74},{0xa6,0xc9},{0xca,0x42},{0xa6,0xc8}, {0xa8,0x65},{0xa8,0x64},{0xa8,0x63},{0xcb,0x60},{0x00,0x00}, {0x00,0x00},{0xfa,0x66},{0xaa,0xaa},{0x00,0x00},{0xaa,0xab}, {0xcd,0x5b},{0x00,0x00},{0xcf,0xba},{0x00,0x00},{0xcf,0xbd}, {0xac,0xba},{0xcf,0xbb},{0x00,0x00},{0xac,0xb9},{0xcf,0xbc}, {0xac,0xbb},{0x84,0x61},{0xd2,0xa2},{0xd2,0xa1},{0xd2,0x7e}, {0xaf,0x53},{0x8c,0x7b},{0xd6,0x5d},{0xd6,0x5e},{0xb2,0x6f}, {0xd6,0x5c},{0xd6,0x5f},{0xb5,0x52},{0xb2,0x70},{0xfa,0x67}, {0x00,0x00},{0xb5,0x51},{0xda,0x6b},{0xda,0x6a},{0xfc,0xae}, {0xda,0x68},{0xda,0x69},{0x8b,0xa5},{0xda,0x6c},{0xde,0xa6}, {0xde,0xa5},{0xde,0xa9},{0xfa,0x68},{0xde,0xa8},{0xde,0xa7}, {0xba,0xb9},{0xe2,0xc9},{0x9c,0x75},{0xe2,0xc8},{0xba,0xba}, {0xe2,0xc7},{0xe6,0x73},{0x00,0x00},{0xe6,0x74},{0xbc,0xf9}, {0x00,0x00},{0xea,0x59},{0xea,0x5a},{0xfa,0x69},{0x92,0x71}, {0xf2,0x72},{0xc3,0x7d},{0xf2,0x71},{0xf2,0x70},{0xf2,0x6e}, {0xf2,0x6f},{0xc4,0xeb},{0xf4,0x6c},{0xf6,0xee},{0xf8,0xf7}, {0x00,0x00},{0xa4,0xfc},{0xfa,0x6a},{0xc9,0xa5},{0xa5,0xc7}, {0xc9,0xa6},{0xfa,0x6b},{0xfc,0xb0},{0x00,0x00},{0xca,0x43}, {0xca,0x44},{0x83,0x5d},{0x8a,0xda},{0xfa,0x6c},{0x84,0xf6}, {0xcb,0x66},{0x00,0x00},{0x00,0x00},{0xcb,0x62},{0xfa,0x6d}, {0xcb,0x61},{0xaa,0xac},{0xcb,0x65},{0xa8,0x67},{0xcb,0x63}, {0xa8,0x66},{0xcb,0x67},{0xcb,0x64},{0x00,0x00},{0x83,0xc1}, {0xcd,0x5f},{0xcf,0xbe},{0xcd,0x5d},{0xcd,0x64},{0xfa,0x6e}, {0xaa,0xad},{0x00,0x00},{0xaa,0xb0},{0xcd,0x65},{0xcd,0x61}, {0x00,0x00},{0xcd,0x62},{0x00,0x00},{0xcd,0x5c},{0xaa,0xaf}, {0xcd,0x5e},{0xaa,0xae},{0xcd,0x63},{0xfa,0x6f},{0xcd,0x60}, {0x00,0x00},{0x89,0xf6},{0xcf,0xc2},{0xac,0xbd},{0xac,0xbe}, {0xfc,0xb1},{0xcf,0xc5},{0xcf,0xbf},{0x00,0x00},{0xcf,0xc4}, {0x00,0x00},{0xcf,0xc0},{0xac,0xbc},{0xcf,0xc3},{0xcf,0xc1}, {0x88,0xfc},{0x83,0xc0},{0x85,0xe2},{0x8e,0xec},{0x84,0x62}, {0x86,0xe2},{0x8e,0x47},{0xd2,0xa8},{0xd2,0xa5},{0x00,0x00}, {0xd2,0xa7},{0xaf,0x58},{0xaf,0x57},{0xaf,0x55},{0xd2,0xa4}, {0xd2,0xa9},{0xaf,0x54},{0xaf,0x56},{0xd2,0xa6},{0xd6,0x67}, {0xd2,0xa3},{0xd2,0xaa},{0xfc,0xb2},{0x8e,0xeb},{0x9c,0x76}, {0x00,0x00},{0x00,0x00},{0xd6,0x62},{0xd6,0x66},{0x00,0x00}, {0xd6,0x65},{0xda,0x6e},{0xda,0x79},{0x00,0x00},{0x8a,0xdb}, {0xd6,0x68},{0x9c,0x77},{0xd6,0x63},{0xda,0x6d},{0xb2,0x74}, {0x00,0x00},{0x8f,0x55},{0xb2,0x73},{0xd6,0x61},{0xd6,0x64}, {0xb2,0x75},{0x00,0x00},{0xb2,0x72},{0xb2,0x71},{0xd6,0x60}, {0xd6,0x69},{0x93,0xe6},{0x00,0x00},{0x8c,0xd3},{0xda,0x70}, {0xda,0x77},{0xfa,0x70},{0xb5,0x54},{0xda,0x76},{0xda,0x73}, {0xfc,0xb4},{0xb5,0x56},{0x95,0xbd},{0x95,0xbc},{0xfc,0xaf}, {0xda,0x75},{0x95,0x52},{0xfa,0x71},{0xda,0x6f},{0xda,0x71}, {0xda,0x74},{0xda,0x72},{0xb5,0x55},{0xda,0x78},{0xb5,0x53}, {0xb7,0xdf},{0xfa,0x72},{0xfa,0x73},{0xde,0xad},{0xde,0xac}, {0xde,0xaa},{0x00,0x00},{0xb7,0xe2},{0xb7,0xe1},{0xde,0xae}, {0x9c,0x78},{0xde,0xab},{0xe2,0xca},{0xba,0xbb},{0xb7,0xe0}, {0x00,0x00},{0x00,0x00},{0xfc,0xb3},{0xde,0xb0},{0xde,0xaf}, {0x00,0x00},{0xe2,0xcd},{0xe2,0xcb},{0xbc,0xfa},{0xfc,0xb5}, {0xba,0xbc},{0xe2,0xcc},{0xe6,0x76},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xbc,0xfb},{0xe6,0x75},{0xe6,0x7e}, {0xe6,0x7d},{0xe6,0x7b},{0x00,0x00},{0xe6,0x7a},{0xe6,0x77}, {0xe6,0x78},{0xe6,0x79},{0xe6,0x7c},{0xe6,0xa1},{0x92,0xde}, {0x00,0x00},{0xea,0x5f},{0xea,0x5c},{0xea,0x5d},{0xbf,0x57}, {0xea,0x5b},{0xea,0x61},{0xea,0x60},{0xea,0x5e},{0x8b,0xa7}, {0xed,0x64},{0xed,0x65},{0xc0,0xf1},{0xfc,0xb6},{0xc0,0xf2}, {0xed,0x63},{0x9c,0x79},{0xc2,0x79},{0xef,0xfe},{0xc2,0x78}, {0xc3,0x7e},{0x00,0x00},{0xc3,0xa1},{0xc4,0x6d},{0xf4,0x6e}, {0xf4,0x6d},{0xf5,0xdd},{0xf6,0xef},{0xc5,0x7a},{0xf7,0xe8}, {0xf7,0xe7},{0xf7,0xe9},{0xa5,0xc8},{0xcf,0xc6},{0xaf,0x59}, {0xb2,0x76},{0xd6,0x6a},{0xa5,0xc9},{0xc9,0xa7},{0xa4,0xfd}, {0x9c,0x7a},{0x00,0x00},{0xca,0x45},{0x9c,0x7b},{0x00,0x00}, {0x88,0xfd},{0xcb,0x6c},{0xcb,0x6a},{0xcb,0x6b},{0xcb,0x68}, {0xa8,0x68},{0xcb,0x69},{0x9c,0x7c},{0x00,0x00},{0x00,0x00}, {0x86,0xe4},{0x9c,0x7d},{0xcd,0x6d},{0x9c,0x7e},{0xaa,0xb3}, {0xcd,0x6b},{0xcd,0x67},{0xcd,0x6a},{0x00,0x00},{0xcd,0x66}, {0xaa,0xb5},{0xcd,0x69},{0x9c,0xa1},{0xaa,0xb2},{0xaa,0xb1}, {0x9c,0xa2},{0xaa,0xb4},{0xcd,0x6c},{0xcd,0x68},{0x8e,0x48}, {0x89,0xf8},{0x84,0x63},{0x00,0x00},{0xac,0xc2},{0xac,0xc5}, {0xcf,0xce},{0xcf,0xcd},{0xcf,0xcc},{0xac,0xbf},{0xcf,0xd5}, {0xcf,0xcb},{0x8b,0xa8},{0xac,0xc1},{0xd2,0xaf},{0xfa,0x74}, {0xcf,0xd2},{0xcf,0xd0},{0xac,0xc4},{0x00,0x00},{0xcf,0xc8}, {0xcf,0xd3},{0x00,0x00},{0xcf,0xca},{0xcf,0xd4},{0xcf,0xd1}, {0xcf,0xc9},{0x95,0xbe},{0xac,0xc0},{0xcf,0xd6},{0xcf,0xc7}, {0xac,0xc3},{0xfa,0x75},{0x95,0xb6},{0x90,0xb2},{0x8b,0xfd}, {0xd2,0xb4},{0xd2,0xab},{0xd2,0xb6},{0x9c,0xa3},{0xd2,0xae}, {0xd2,0xb9},{0xd2,0xba},{0xd2,0xac},{0xd2,0xb8},{0xd2,0xb5}, {0xd2,0xb3},{0xd2,0xb7},{0xaf,0x5f},{0x00,0x00},{0xaf,0x5d}, {0x9c,0xa4},{0x9c,0xa5},{0xd2,0xb1},{0x9c,0xa6},{0xd2,0xad}, {0x9c,0xa7},{0xd2,0xb0},{0xd2,0xbb},{0xd2,0xb2},{0xaf,0x5e}, {0xcf,0xcf},{0x00,0x00},{0xaf,0x5a},{0xaf,0x5c},{0x9c,0xa8}, {0x00,0x00},{0xfa,0x76},{0x85,0xe4},{0x9c,0xa9},{0xd6,0x78}, {0xd6,0x6d},{0xd6,0x6b},{0xfe,0xaa},{0xd6,0x6c},{0x9c,0xab}, {0xd6,0x73},{0x9c,0xac},{0xd6,0x74},{0xd6,0x70},{0xb2,0x7b}, {0xd6,0x75},{0xd6,0x72},{0xd6,0x6f},{0x9c,0xad},{0xb2,0x79}, {0xd6,0x6e},{0xb2,0x77},{0xb2,0x7a},{0xd6,0x71},{0xd6,0x79}, {0xaf,0x5b},{0xb2,0x78},{0xd6,0x77},{0xd6,0x76},{0xb2,0x7c}, {0x00,0x00},{0x8e,0xbf},{0x86,0xe3},{0x9c,0xae},{0x9c,0xaf}, {0x00,0x00},{0x9c,0xb0},{0x9c,0xb1},{0xda,0x7e},{0x9c,0xb2}, {0x00,0x00},{0x9c,0xb3},{0xda,0xa1},{0xb5,0x60},{0x9c,0xb4}, {0xda,0xa7},{0x9c,0xb5},{0x9c,0xb6},{0xda,0xa9},{0xda,0xa2}, {0xb5,0x5a},{0xda,0xa6},{0xda,0xa5},{0xb5,0x5b},{0xb5,0x61}, {0x00,0x00},{0xb5,0x62},{0xda,0xa8},{0xb5,0x58},{0xda,0x7d}, {0xda,0x7b},{0xda,0xa3},{0xda,0x7a},{0xb5,0x5f},{0xda,0x7c}, {0xda,0xa4},{0xda,0xaa},{0xb5,0x59},{0xb5,0x5e},{0xb5,0x5c}, {0xb5,0x5d},{0x9c,0xb7},{0x9c,0xb8},{0x9c,0xb9},{0xb5,0x57}, {0x00,0x00},{0x8b,0xa9},{0x00,0x00},{0x00,0x00},{0xb7,0xe9}, {0xde,0xb7},{0xb7,0xe8},{0xde,0xbb},{0x9c,0xba},{0xde,0xb1}, {0x9c,0xbb},{0xde,0xbc},{0x9c,0xbc},{0x9c,0xbd},{0x9c,0xbe}, {0xde,0xb2},{0xde,0xb3},{0x00,0x00},{0xde,0xbd},{0xde,0xba}, {0xde,0xb8},{0xde,0xb9},{0xde,0xb5},{0xde,0xb4},{0x9c,0xbf}, {0xde,0xbe},{0xb7,0xe5},{0x9c,0xc0},{0xde,0xb6},{0x00,0x00}, {0xb7,0xea},{0xb7,0xe4},{0xb7,0xeb},{0xb7,0xec},{0xfc,0xb9}, {0xb7,0xe7},{0xb7,0xe6},{0xfe,0x75},{0x9d,0x73},{0xe2,0xce}, {0xba,0xbe},{0xba,0xbd},{0x9c,0xc1},{0x00,0x00},{0xe2,0xd3}, {0xfe,0xac},{0xbc,0xfc},{0xba,0xbf},{0x9c,0xc2},{0x9c,0xc3}, {0xba,0xc1},{0xe2,0xd4},{0xb7,0xe3},{0xba,0xc0},{0xe2,0xd0}, {0xe2,0xd2},{0xe2,0xcf},{0x9c,0xc4},{0xe2,0xd1},{0xfa,0x77}, {0x89,0xf9},{0x00,0x00},{0xe6,0xab},{0x9c,0xc5},{0x00,0x00}, {0xe6,0xaa},{0xe6,0xa7},{0xbd,0x40},{0xea,0x62},{0xbd,0x41}, {0xe6,0xa6},{0x9c,0xc6},{0xbc,0xfe},{0x00,0x00},{0xe6,0xa8}, {0xe6,0xa5},{0xe6,0xa2},{0xe6,0xa9},{0xe6,0xa3},{0xe6,0xa4}, {0xbc,0xfd},{0x81,0xd0},{0x81,0xd1},{0x8c,0x7d},{0x00,0x00}, {0xed,0x69},{0x00,0x00},{0xea,0x66},{0x00,0x00},{0xea,0x65}, {0xea,0x67},{0x00,0x00},{0xed,0x66},{0xbf,0x5a},{0x81,0xd2}, {0xea,0x63},{0x81,0xd3},{0xbf,0x58},{0x9d,0x74},{0xbf,0x5c}, {0xbf,0x5b},{0xea,0x64},{0xea,0x68},{0xfa,0x78},{0xbf,0x59}, {0x81,0xd4},{0xed,0x6d},{0xc0,0xf5},{0xc2,0x7a},{0xc0,0xf6}, {0xc0,0xf3},{0xed,0x6a},{0xed,0x68},{0x00,0x00},{0xed,0x6b}, {0x00,0x00},{0xed,0x6e},{0xc0,0xf4},{0xed,0x6c},{0xed,0x67}, {0x00,0x00},{0x81,0xd5},{0xf0,0x42},{0xf0,0x45},{0xf2,0x75}, {0xf0,0x40},{0x81,0xd6},{0xf4,0x6f},{0xf0,0x46},{0x00,0x00}, {0xc3,0xa2},{0xf0,0x44},{0xc2,0x7b},{0xf0,0x41},{0xf0,0x43}, {0xf0,0x47},{0xf2,0x76},{0x00,0x00},{0xf2,0x74},{0x00,0x00}, {0x00,0x00},{0x81,0xd7},{0x00,0x00},{0xc3,0xa3},{0xf2,0x73}, {0x81,0xd8},{0x00,0x00},{0x00,0x00},{0xc4,0x6e},{0x81,0xd9}, {0x00,0x00},{0x8c,0xf9},{0x81,0xda},{0xc4,0xed},{0xf6,0xf1}, {0xc4,0xec},{0xf6,0xf3},{0xf6,0xf0},{0xf6,0xf2},{0xc5,0xd0}, {0xf8,0xb2},{0xa5,0xca},{0xcd,0x6e},{0xd2,0xbc},{0xd2,0xbd}, {0xb2,0x7d},{0xde,0xbf},{0xbf,0x5d},{0xc3,0xa4},{0xc5,0x7b}, {0xf8,0xb3},{0xa5,0xcb},{0x94,0xac},{0xcd,0x6f},{0xa2,0x60}, {0x00,0x00},{0x00,0x00},{0xcf,0xd7},{0x00,0x00},{0xcf,0xd8}, {0x88,0xfe},{0x94,0xae},{0x94,0xaf},{0x94,0xad},{0x00,0x00}, {0xd2,0xbe},{0xd2,0xbf},{0xb2,0x7e},{0xb2,0xa1},{0x94,0xb0}, {0x00,0x00},{0x00,0x00},{0xda,0xab},{0x00,0x00},{0xde,0xc2}, {0xde,0xc1},{0xde,0xc0},{0xe2,0xd5},{0xfa,0x79},{0xe2,0xd6}, {0xe2,0xd7},{0xba,0xc2},{0x94,0xb1},{0x00,0x00},{0xe6,0xad}, {0xe6,0xac},{0x00,0x00},{0x00,0x00},{0xea,0x69},{0xbf,0x5e}, {0xbf,0x5f},{0x95,0xc2},{0xed,0x72},{0xed,0x6f},{0xed,0x70}, {0xed,0x71},{0xf0,0x49},{0xf0,0x48},{0xc2,0x7c},{0xf2,0x77}, {0xf5,0xde},{0xa5,0xcc},{0xfa,0x7a},{0xac,0xc6},{0x00,0x00}, {0xb2,0xa2},{0xde,0xc3},{0xfc,0xbb},{0xa5,0xcd},{0x00,0x00}, {0xd2,0xc0},{0xb2,0xa3},{0xfa,0x7b},{0x00,0x00},{0xb5,0x63}, {0xb5,0x64},{0x00,0x00},{0xa5,0xce},{0xa5,0xcf},{0xca,0x46}, {0xa8,0x6a},{0xa8,0x69},{0xac,0xc7},{0xcf,0xd9},{0xda,0xac}, {0xa5,0xd0},{0xa5,0xd1},{0xa5,0xd2},{0xa5,0xd3},{0xa0,0x59}, {0x86,0x7a},{0x00,0x00},{0xa8,0x6b},{0xa8,0x6c},{0xcb,0x6e}, {0xcb,0x6d},{0x84,0xf8},{0xfa,0x7c},{0xaa,0xb6},{0xcd,0x72}, {0xcd,0x70},{0xcd,0x71},{0x00,0x00},{0x81,0xdb},{0x00,0x00}, {0xfa,0x7d},{0x86,0xd0},{0xfb,0xd1},{0xcf,0xda},{0xcf,0xdb}, {0xfa,0x7e},{0x95,0xbf},{0xac,0xcb},{0xac,0xc9},{0xfa,0xa1}, {0xac,0xca},{0xac,0xc8},{0x00,0x00},{0x94,0x55},{0x00,0x00}, {0xfc,0xbc},{0xaf,0x60},{0x81,0xdc},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xaf,0x64},{0xaf,0x63},{0xd2,0xc1},{0xaf,0x62}, {0xaf,0x61},{0x00,0x00},{0xd2,0xc2},{0x94,0x56},{0x00,0x00}, {0xb2,0xa6},{0xd6,0x7b},{0xd6,0x7a},{0xb2,0xa4},{0xb2,0xa5}, {0x95,0xcc},{0x00,0x00},{0x94,0xb2},{0xb5,0x66},{0xb5,0x65}, {0xda,0xae},{0xfa,0xa2},{0x81,0xdd},{0xda,0xad},{0xb2,0xa7}, {0x00,0x00},{0x8d,0xe2},{0x92,0xec},{0x8b,0xaa},{0x00,0x00}, {0xb7,0xed},{0xde,0xc5},{0xb7,0xee},{0xde,0xc4},{0xfc,0xbd}, {0x00,0x00},{0x00,0x00},{0xe2,0xd8},{0xe6,0xae},{0xbd,0x42}, {0xea,0x6a},{0x00,0x00},{0xfa,0xa3},{0xfa,0xa4},{0xed,0x73}, {0x00,0x00},{0xc3,0xa6},{0xc3,0xa5},{0x00,0x00},{0xfa,0xa5}, {0xc5,0x7c},{0xa5,0xd4},{0xcd,0x73},{0x81,0xde},{0x93,0x51}, {0xb2,0xa8},{0xe2,0xd9},{0xba,0xc3},{0xc6,0xd4},{0x00,0x00}, {0xcb,0x6f},{0xcb,0x70},{0x8f,0x78},{0x89,0xfb},{0xcd,0x74}, {0xaa,0xb8},{0xaa,0xb9},{0x00,0x00},{0x00,0x00},{0xaa,0xb7}, {0x81,0xdf},{0x86,0xe5},{0x8a,0xdd},{0x86,0xe6},{0xac,0xcf}, {0xac,0xd0},{0xac,0xcd},{0xac,0xce},{0x00,0x00},{0xcf,0xdc}, {0x00,0x00},{0x00,0x00},{0xcf,0xdd},{0xac,0xcc},{0xfa,0xa6}, {0x00,0x00},{0x87,0xf4},{0x86,0xe7},{0xd2,0xc3},{0xfe,0x51}, {0xaf,0x68},{0xaf,0x69},{0xfb,0x5c},{0xb2,0xab},{0xd2,0xc9}, {0x00,0x00},{0xaf,0x6e},{0xaf,0x6c},{0xd2,0xca},{0xd2,0xc5}, {0xaf,0x6b},{0xaf,0x6a},{0xaf,0x65},{0xd2,0xc8},{0xd2,0xc7}, {0xd2,0xc4},{0xaf,0x6d},{0xfc,0xd3},{0xd2,0xc6},{0xaf,0x66}, {0x00,0x00},{0xaf,0x67},{0x8f,0xfd},{0x84,0xf9},{0xb2,0xac}, {0xd6,0xa1},{0xd6,0xa2},{0xb2,0xad},{0xd6,0x7c},{0xd6,0x7e}, {0xd6,0xa4},{0xd6,0xa3},{0xd6,0x7d},{0x00,0x00},{0xb2,0xa9}, {0xb2,0xaa},{0xfa,0xa7},{0xda,0xb6},{0xb5,0x6b},{0xb5,0x6a}, {0xda,0xb0},{0xb5,0x68},{0x81,0xe0},{0xda,0xb3},{0xb5,0x6c}, {0xda,0xb4},{0xb5,0x6d},{0xda,0xb1},{0xb5,0x67},{0xb5,0x69}, {0xda,0xb5},{0x00,0x00},{0xda,0xb2},{0xda,0xaf},{0x89,0xfa}, {0xfa,0xa8},{0x86,0xe8},{0x8f,0x58},{0x00,0x00},{0xde,0xd2}, {0x00,0x00},{0xde,0xc7},{0xb7,0xf0},{0xb7,0xf3},{0xb7,0xf2}, {0xb7,0xf7},{0xb7,0xf6},{0xde,0xd3},{0xde,0xd1},{0xde,0xca}, {0xde,0xce},{0xde,0xcd},{0xb7,0xf4},{0xde,0xd0},{0xde,0xcc}, {0xde,0xd4},{0xde,0xcb},{0xb7,0xf5},{0xb7,0xef},{0xb7,0xf1}, {0xfc,0xd5},{0xde,0xc9},{0x00,0x00},{0x8f,0x57},{0x00,0x00}, {0xfc,0xd4},{0xe2,0xdb},{0xba,0xc7},{0xe2,0xdf},{0xba,0xc6}, {0xe2,0xdc},{0xba,0xc5},{0x00,0x00},{0xde,0xc8},{0xde,0xcf}, {0xe2,0xde},{0x00,0x00},{0xba,0xc8},{0xe2,0xe0},{0xe2,0xdd}, {0xe2,0xda},{0x8e,0xc1},{0x89,0x40},{0xe6,0xb1},{0xe6,0xb5}, {0xe6,0xb7},{0xe6,0xb3},{0xe6,0xb2},{0xe6,0xb0},{0xbd,0x45}, {0xbd,0x43},{0xbd,0x48},{0xbd,0x49},{0xe6,0xb4},{0xbd,0x46}, {0xe6,0xaf},{0xbd,0x47},{0xba,0xc4},{0xe6,0xb6},{0xbd,0x44}, {0x8b,0xab},{0x8d,0x54},{0x81,0xe1},{0xea,0x6c},{0x00,0x00}, {0xea,0x6b},{0xea,0x73},{0xea,0x6d},{0xea,0x72},{0xea,0x6f}, {0xbf,0x60},{0xea,0x71},{0x00,0x00},{0x00,0x00},{0xbf,0x61}, {0x00,0x00},{0xbf,0x62},{0x95,0xa9},{0xea,0x70},{0xea,0x6e}, {0x8c,0xd5},{0x90,0x58},{0xfa,0xa9},{0x00,0x00},{0xc0,0xf8}, {0xed,0x74},{0x00,0x00},{0x00,0x00},{0xc0,0xf7},{0xed,0x77}, {0xed,0x75},{0xed,0x76},{0x00,0x00},{0x00,0x00},{0xc0,0xf9}, {0xfa,0xaa},{0x95,0x6f},{0x81,0xe2},{0xf0,0x4d},{0x81,0xe3}, {0xc2,0xa1},{0xf0,0x4e},{0xfa,0xab},{0x00,0x00},{0xc2,0x7d}, {0xf0,0x4f},{0xc2,0x7e},{0xf0,0x4c},{0xf0,0x50},{0x00,0x00}, {0xf0,0x4a},{0x00,0x00},{0x8c,0x7e},{0xc3,0xa7},{0xf2,0x78}, {0xc3,0xa8},{0xc4,0x6f},{0x8c,0xd6},{0xf0,0x4b},{0xc4,0x70}, {0xfb,0x76},{0xfc,0xd7},{0xfa,0xac},{0xc4,0xee},{0xf5,0xdf}, {0x8d,0x55},{0xc5,0x7e},{0xf6,0xf4},{0xc5,0x7d},{0xfc,0xd8}, {0xf7,0xea},{0xc5,0xf5},{0xc5,0xf6},{0x81,0xe4},{0x81,0xe5}, {0xf9,0xcc},{0xc6,0xd5},{0x00,0x00},{0xac,0xd1},{0xcf,0xde}, {0x93,0xb9},{0xb5,0x6e},{0xb5,0x6f},{0xa5,0xd5},{0xa6,0xca}, {0xca,0x47},{0xfa,0xad},{0xcb,0x71},{0xa8,0x6d},{0xfa,0xae}, {0xaa,0xba},{0x00,0x00},{0xac,0xd2},{0xac,0xd3},{0xac,0xd4}, {0xd6,0xa6},{0xd2,0xcb},{0xaf,0x6f},{0x00,0x00},{0x00,0x00}, {0xb2,0xae},{0xd6,0xa5},{0xfa,0xaf},{0x87,0xf5},{0xda,0xb8}, {0xb5,0x71},{0x00,0x00},{0xda,0xb7},{0xb5,0x70},{0x00,0x00}, {0x00,0x00},{0xde,0xd5},{0xbd,0x4a},{0xe6,0xbb},{0xe6,0xb8}, {0xe6,0xb9},{0xe6,0xba},{0x00,0x00},{0x00,0x00},{0xfc,0xbe}, {0x00,0x00},{0x00,0x00},{0xed,0x78},{0x81,0xe6},{0xf0,0x51}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xf4,0x71},{0xf4,0x70}, {0x00,0x00},{0xf6,0xf5},{0xa5,0xd6},{0xcd,0x75},{0xaf,0x70}, {0x87,0xf6},{0x8e,0x77},{0x00,0x00},{0xb5,0x72},{0xde,0xd6}, {0x00,0x00},{0xfa,0xb0},{0xe2,0xe1},{0xfa,0xb1},{0xbd,0x4b}, {0xea,0x74},{0x00,0x00},{0xf0,0x52},{0xf4,0x72},{0xa5,0xd7}, {0x00,0x00},{0x00,0x00},{0xaa,0xbb},{0xac,0xd7},{0xcf,0xdf}, {0xac,0xd8},{0xac,0xd6},{0x00,0x00},{0xac,0xd5},{0xd2,0xcc}, {0xaf,0x71},{0x00,0x00},{0xfc,0xbf},{0xaf,0x72},{0xaf,0x73}, {0x85,0xe6},{0x8d,0x69},{0x86,0xea},{0xb2,0xb0},{0xd6,0xa7}, {0xb2,0xaf},{0x00,0x00},{0x87,0x49},{0x84,0xfb},{0x87,0xf7}, {0x81,0xe7},{0xda,0xb9},{0xb2,0xb1},{0xb5,0x73},{0xde,0xd7}, {0xb7,0xf8},{0xb7,0xf9},{0x00,0x00},{0xba,0xc9},{0x00,0x00}, {0xba,0xca},{0xbd,0x4c},{0xbf,0x64},{0xea,0x75},{0xbf,0x63}, {0x00,0x00},{0xed,0x79},{0xc0,0xfa},{0x00,0x00},{0xf0,0x53}, {0xf4,0x73},{0xa5,0xd8},{0xa8,0x6e},{0xcd,0x78},{0xcd,0x77}, {0xaa,0xbc},{0xcd,0x76},{0xaa,0xbd},{0xcd,0x79},{0x00,0x00}, {0xcf,0xe5},{0xac,0xdb},{0xac,0xda},{0xcf,0xe7},{0xcf,0xe6}, {0xac,0xdf},{0x00,0x00},{0xac,0xde},{0x00,0x00},{0x00,0x00}, {0xac,0xd9},{0x00,0x00},{0xcf,0xe1},{0xcf,0xe2},{0xcf,0xe3}, {0x00,0x00},{0xac,0xe0},{0xcf,0xe0},{0xac,0xdc},{0xcf,0xe4}, {0xac,0xdd},{0x92,0xb1},{0xfa,0xb2},{0x81,0xe8},{0x81,0xe9}, {0xd2,0xcf},{0xd2,0xd3},{0xd2,0xd1},{0xd2,0xd0},{0x00,0x00}, {0xd2,0xd4},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xd2,0xd5}, {0xd2,0xd6},{0xd2,0xce},{0x00,0x00},{0xd2,0xcd},{0xfa,0xb3}, {0xaf,0x75},{0xaf,0x76},{0x00,0x00},{0xd2,0xd7},{0xd2,0xd2}, {0xfc,0xc0},{0xd6,0xb0},{0x8d,0xd2},{0xd2,0xd8},{0xaf,0x77}, {0xaf,0x74},{0x00,0x00},{0xfc,0xc1},{0x00,0x00},{0xd6,0xaa}, {0x00,0x00},{0xd6,0xa9},{0x00,0x00},{0xd6,0xab},{0xd6,0xac}, {0xd6,0xae},{0xd6,0xad},{0xd6,0xb2},{0xb2,0xb5},{0xb2,0xb2}, {0xb2,0xb6},{0xd6,0xa8},{0xb2,0xb7},{0xd6,0xb1},{0xb2,0xb4}, {0xd6,0xaf},{0xb2,0xb3},{0x00,0x00},{0x95,0x4d},{0x85,0xe8}, {0x00,0x00},{0xfa,0xb4},{0xda,0xbc},{0xda,0xbe},{0xda,0xba}, {0xda,0xbb},{0x00,0x00},{0x00,0x00},{0xda,0xbf},{0xda,0xc1}, {0xda,0xc2},{0xda,0xbd},{0xda,0xc0},{0xb5,0x74},{0x85,0xe7}, {0x8a,0xde},{0xde,0xdb},{0x00,0x00},{0xde,0xe0},{0xde,0xd8}, {0xde,0xdc},{0x00,0x00},{0x81,0xea},{0xde,0xe1},{0xde,0xdd}, {0xb7,0xfa},{0xb8,0x43},{0x00,0x00},{0xb7,0xfd},{0xde,0xd9}, {0xde,0xda},{0xba,0xce},{0xb8,0x46},{0xb7,0xfe},{0x00,0x00}, {0xb8,0x44},{0xb7,0xfc},{0xde,0xdf},{0xb8,0x45},{0xde,0xde}, {0xb8,0x41},{0xb7,0xfb},{0xb8,0x42},{0xde,0xe2},{0xe2,0xe6}, {0xe2,0xe8},{0x00,0x00},{0x00,0x00},{0x81,0xeb},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x81,0xec},{0x81,0xed}, {0xb8,0x40},{0x81,0xee},{0x81,0xef},{0xe2,0xe3},{0xba,0xcc}, {0xe2,0xe9},{0xba,0xcd},{0xe2,0xe7},{0xe2,0xe2},{0xe2,0xe5}, {0xe2,0xea},{0xba,0xcb},{0xe2,0xe4},{0x00,0x00},{0xbd,0x4e}, {0xe6,0xbf},{0xe6,0xbe},{0x00,0x00},{0xbd,0x51},{0xbd,0x4f}, {0xe6,0xbc},{0xbd,0x4d},{0xe6,0xbd},{0x00,0x00},{0xbd,0x50}, {0x89,0x42},{0xfb,0x6b},{0x00,0x00},{0xea,0x7d},{0x00,0x00}, {0xea,0xa1},{0x81,0xf0},{0xea,0x7e},{0xea,0x76},{0xea,0x7a}, {0xea,0x79},{0xea,0x77},{0xbf,0x66},{0xbf,0x67},{0xbf,0x65}, {0xea,0x78},{0xea,0x7b},{0xea,0x7c},{0x00,0x00},{0xbf,0x68}, {0x00,0x00},{0xc1,0x40},{0xed,0xa3},{0x8d,0x7c},{0xc0,0xfc}, {0xed,0x7b},{0xc0,0xfe},{0xc1,0x41},{0x00,0x00},{0x81,0xf1}, {0xc0,0xfd},{0xed,0xa2},{0xed,0x7c},{0xc0,0xfb},{0xed,0xa1}, {0xed,0x7a},{0xed,0x7e},{0xed,0x7d},{0x00,0x00},{0xfe,0x5a}, {0xf0,0x55},{0xc2,0xa4},{0xc2,0xa5},{0xc2,0xa2},{0x81,0xf2}, {0xc2,0xa3},{0x00,0x00},{0x00,0x00},{0xf0,0x54},{0x81,0xf3}, {0xf2,0x7b},{0x81,0xf4},{0x00,0x00},{0xc3,0xa9},{0x00,0x00}, {0xf2,0x79},{0xf2,0x7a},{0x81,0xf5},{0xf4,0x74},{0xf4,0x77}, {0xf4,0x75},{0xf4,0x76},{0xf5,0xe0},{0x00,0x00},{0x00,0x00}, {0xc4,0xef},{0xf7,0xeb},{0xf8,0xb4},{0x00,0x00},{0xc5,0xf7}, {0xf8,0xf8},{0xf8,0xf9},{0xc6,0x66},{0xa5,0xd9},{0xac,0xe1}, {0x81,0xf6},{0xda,0xc3},{0x00,0x00},{0xde,0xe3},{0x00,0x00}, {0xa5,0xda},{0xa8,0x6f},{0x00,0x00},{0xaa,0xbe},{0x81,0xf7}, {0xcf,0xe8},{0xcf,0xe9},{0xaf,0x78},{0x00,0x00},{0x89,0xfc}, {0xda,0xc4},{0xb5,0x75},{0xb8,0x47},{0xc1,0x42},{0xed,0xa4}, {0xf2,0x7c},{0xf4,0x78},{0xa5,0xdb},{0x81,0xf8},{0x00,0x00}, {0x89,0xfe},{0xcd,0xa1},{0xcd,0x7a},{0xcd,0x7c},{0xcd,0x7e}, {0xcd,0x7d},{0xcd,0x7b},{0xaa,0xbf},{0x8c,0x41},{0x8b,0xfe}, {0x8e,0x78},{0x87,0xf9},{0xac,0xe2},{0xcf,0xf2},{0x00,0x00}, {0xcf,0xed},{0xcf,0xea},{0x00,0x00},{0x96,0x41},{0xcf,0xf1}, {0x00,0x00},{0x00,0x00},{0xac,0xe4},{0xac,0xe5},{0xcf,0xf0}, {0xcf,0xef},{0xcf,0xee},{0xcf,0xeb},{0xcf,0xec},{0xcf,0xf3}, {0xac,0xe3},{0x92,0xc5},{0x89,0x43},{0x8d,0xe3},{0xfa,0xb5}, {0x00,0x00},{0x84,0xfc},{0x00,0x00},{0xfa,0xb6},{0xaf,0x7c}, {0x81,0xf9},{0xaf,0xa4},{0xaf,0xa3},{0xd2,0xe1},{0xd2,0xdb}, {0xd2,0xd9},{0x00,0x00},{0xaf,0xa1},{0xd6,0xb9},{0xaf,0x7a}, {0xd2,0xde},{0xd2,0xe2},{0xd2,0xe4},{0xd2,0xe0},{0xd2,0xda}, {0xaf,0xa2},{0xd2,0xdf},{0xd2,0xdd},{0xaf,0x79},{0xd2,0xe5}, {0xaf,0xa5},{0xd2,0xe3},{0xaf,0x7d},{0xd2,0xdc},{0x00,0x00}, {0xaf,0x7e},{0xaf,0x7b},{0xfa,0xb7},{0x8c,0x40},{0x90,0x42}, {0xfa,0xb8},{0x81,0xfa},{0x8c,0x42},{0x82,0x5f},{0x8a,0xdf}, {0x00,0x00},{0x81,0xfb},{0xb2,0xb9},{0x81,0xfc},{0xd6,0xba}, {0x00,0x00},{0xfa,0xb9},{0xd6,0xb3},{0xd6,0xb5},{0xd6,0xb7}, {0x81,0xfd},{0xd6,0xb8},{0xd6,0xb6},{0xb2,0xba},{0x00,0x00}, {0xd6,0xbb},{0x81,0xfe},{0xd6,0xb4},{0xfc,0xc3},{0x96,0x4b}, {0x86,0xeb},{0xfa,0xba},{0x8f,0x59},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xda,0xc8},{0xb5,0x76},{0xda,0xd0}, {0x00,0x00},{0xda,0xc5},{0x00,0x00},{0xda,0xd1},{0x00,0x00}, {0xda,0xc6},{0xda,0xc7},{0x96,0x4c},{0x00,0x00},{0xda,0xcf}, {0xda,0xce},{0xda,0xcb},{0xb2,0xb8},{0xb5,0x77},{0xda,0xc9}, {0xda,0xcc},{0xb5,0x78},{0xda,0xcd},{0xda,0xca},{0x94,0x54}, {0x00,0x00},{0x94,0xb4},{0x00,0x00},{0x00,0x00},{0x8d,0x68}, {0x00,0x00},{0xde,0xee},{0xfa,0xbb},{0xde,0xf2},{0xb8,0x4e}, {0x00,0x00},{0xe2,0xf0},{0xb8,0x51},{0xde,0xf0},{0xf9,0xd6}, {0x00,0x00},{0xde,0xed},{0xde,0xe8},{0xde,0xea},{0xde,0xeb}, {0xde,0xe4},{0x96,0x4d},{0xb8,0x4d},{0x00,0x00},{0x00,0x00}, {0xb8,0x4c},{0x8b,0xac},{0xb8,0x48},{0xde,0xe7},{0x00,0x00}, {0xb8,0x4f},{0x00,0x00},{0xb8,0x50},{0xde,0xe6},{0xde,0xe9}, {0xde,0xf1},{0xb8,0x4a},{0xb8,0x4b},{0xde,0xef},{0xde,0xe5}, {0x89,0x44},{0x8e,0xed},{0x00,0x00},{0xe2,0xf2},{0xba,0xd0}, {0xe2,0xf4},{0xde,0xec},{0xe2,0xf6},{0xba,0xd4},{0xe2,0xf7}, {0xe2,0xf3},{0x00,0x00},{0xba,0xd1},{0xe2,0xef},{0xba,0xd3}, {0xe2,0xec},{0xe2,0xf1},{0xe2,0xf5},{0xe2,0xee},{0x00,0x00}, {0xfc,0xc7},{0xb8,0x49},{0x95,0xf0},{0xe2,0xeb},{0xba,0xd2}, {0xe2,0xed},{0xfa,0xbc},{0x96,0x4e},{0x00,0x00},{0x96,0xcd}, {0xfa,0xbd},{0xbd,0x54},{0xe6,0xc1},{0xbd,0x58},{0x00,0x00}, {0xbd,0x56},{0x00,0x00},{0x00,0x00},{0xba,0xcf},{0x00,0x00}, {0xe6,0xc8},{0xe6,0xc9},{0xbd,0x53},{0xfa,0xbe},{0x96,0x4f}, {0xe6,0xc7},{0xe6,0xca},{0xbd,0x55},{0xbd,0x52},{0xe6,0xc3}, {0xe6,0xc0},{0xe6,0xc5},{0xe6,0xc2},{0xbd,0x59},{0xe6,0xc4}, {0x96,0x50},{0xfc,0xc4},{0xe6,0xc6},{0xbd,0x57},{0x00,0x00}, {0x96,0x51},{0xfc,0xc5},{0xfa,0xbf},{0xbf,0x6a},{0xea,0xa8}, {0x00,0x00},{0xea,0xa2},{0xea,0xa6},{0xea,0xac},{0xea,0xad}, {0xea,0xa9},{0xea,0xaa},{0xea,0xa7},{0x96,0x54},{0xea,0xa4}, {0x00,0x00},{0xbf,0x6c},{0xbf,0x69},{0xea,0xa3},{0xea,0xa5}, {0x00,0x00},{0xbf,0x6b},{0xea,0xab},{0x96,0x55},{0xc1,0x46}, {0x96,0x56},{0x96,0x57},{0xed,0xaa},{0xed,0xa5},{0xc1,0x45}, {0x96,0x58},{0x00,0x00},{0xc1,0x43},{0x00,0x00},{0xed,0xac}, {0xc1,0x44},{0xed,0xa8},{0xed,0xa9},{0xed,0xa6},{0xed,0xad}, {0xf0,0x56},{0x00,0x00},{0xc1,0x47},{0xed,0xa7},{0x00,0x00}, {0xed,0xae},{0xed,0xab},{0xfb,0xa8},{0xfa,0xc0},{0x00,0x00}, {0xf0,0x5a},{0x00,0x00},{0x00,0x00},{0xf0,0x57},{0x00,0x00}, {0xc2,0xa6},{0x00,0x00},{0xf0,0x5b},{0xf0,0x5d},{0xf0,0x5c}, {0xf0,0x58},{0xf0,0x59},{0x00,0x00},{0x00,0x00},{0xf2,0xa3}, {0x00,0x00},{0xc3,0xaa},{0x00,0x00},{0xf2,0x7e},{0xf2,0xa2}, {0xf2,0x7d},{0xf2,0xa4},{0x00,0x00},{0x00,0x00},{0xf2,0xa1}, {0x00,0x00},{0xf4,0x7a},{0xf4,0x7d},{0xf4,0x79},{0xc4,0x71}, {0xf4,0x7b},{0xf4,0x7c},{0xf4,0x7e},{0xc4,0x72},{0xc4,0x74}, {0xc4,0x73},{0xf5,0xe1},{0xfe,0x77},{0xf5,0xe3},{0xfa,0xc1}, {0xf5,0xe2},{0x96,0x59},{0x96,0x5a},{0xfa,0xc2},{0xf6,0xf6}, {0x96,0x5b},{0x00,0x00},{0xf8,0xb5},{0xf8,0xfa},{0xa5,0xdc}, {0xfa,0xc3},{0x8a,0xe0},{0xcb,0x72},{0xaa,0xc0},{0xcd,0xa3}, {0xaa,0xc1},{0xaa,0xc2},{0xcd,0xa2},{0x00,0x00},{0xcf,0xf8}, {0xcf,0xf7},{0xac,0xe6},{0xac,0xe9},{0xac,0xe8},{0xac,0xe7}, {0xcf,0xf4},{0xcf,0xf6},{0xcf,0xf5},{0x00,0x00},{0x00,0x00}, {0xd2,0xe8},{0xaf,0xa7},{0xd2,0xec},{0xd2,0xeb},{0xd2,0xea}, {0xd2,0xe6},{0xaf,0xa6},{0xaf,0xaa},{0xaf,0xad},{0x96,0x5c}, {0x96,0x5e},{0xaf,0xae},{0xd2,0xe7},{0xd2,0xe9},{0xaf,0xac}, {0xaf,0xab},{0xaf,0xa9},{0xaf,0xa8},{0xd6,0xc2},{0x8f,0xbe}, {0xd6,0xc0},{0xd6,0xbc},{0xb2,0xbb},{0x00,0x00},{0xd6,0xbd}, {0xb2,0xbc},{0xd6,0xbe},{0xd6,0xbf},{0xd6,0xc1},{0x00,0x00}, {0xb2,0xbd},{0x00,0x00},{0x86,0xec},{0xda,0xd5},{0x96,0x5f}, {0xda,0xd4},{0xda,0xd3},{0xda,0xd2},{0x00,0x00},{0x00,0x00}, {0x82,0x70},{0x86,0xed},{0xde,0xf6},{0xb8,0x52},{0x00,0x00}, {0xde,0xf3},{0xde,0xf5},{0x96,0x60},{0xb8,0x53},{0xfa,0xc4}, {0xb8,0x54},{0xde,0xf4},{0x96,0x61},{0x82,0x77},{0x93,0x50}, {0x96,0x62},{0x96,0x63},{0xe3,0x41},{0x00,0x00},{0xe2,0xf9}, {0xe2,0xfa},{0x00,0x00},{0xba,0xd7},{0xba,0xd5},{0xba,0xd6}, {0xe3,0x43},{0x96,0x64},{0xe3,0x42},{0xe2,0xfe},{0xe2,0xfd}, {0xe2,0xfc},{0xe2,0xfb},{0xe3,0x40},{0xe2,0xf8},{0x96,0x65}, {0xe6,0xcb},{0xe6,0xd0},{0xe6,0xce},{0xfa,0xc5},{0x00,0x00}, {0x96,0x66},{0xe6,0xcd},{0xe6,0xcc},{0xe6,0xcf},{0x00,0x00}, {0xea,0xae},{0x96,0x67},{0xbf,0x6d},{0xc1,0x48},{0xed,0xb0}, {0xfc,0xca},{0xc1,0x49},{0xed,0xaf},{0xf0,0x5f},{0xf0,0x5e}, {0xc2,0xa7},{0x00,0x00},{0xf2,0xa5},{0xc3,0xab},{0xf4,0xa1}, {0xc5,0xa1},{0xf6,0xf7},{0x00,0x00},{0xf8,0xb7},{0xf8,0xb6}, {0xc9,0xa8},{0xac,0xea},{0xac,0xeb},{0xd6,0xc3},{0x00,0x00}, {0xb8,0x56},{0xa5,0xdd},{0xa8,0x72},{0xa8,0x71},{0xa8,0x70}, {0x00,0x00},{0xfa,0xc6},{0xfb,0xa9},{0xcd,0xa4},{0x84,0xfd}, {0x00,0x00},{0xaa,0xc4},{0xaa,0xc3},{0x9d,0xce},{0xac,0xee}, {0xfc,0xa6},{0xcf,0xfa},{0xcf,0xfd},{0xcf,0xfb},{0x00,0x00}, {0xac,0xec},{0xac,0xed},{0x00,0x00},{0xfc,0xcc},{0xcf,0xf9}, {0xcf,0xfc},{0x00,0x00},{0xaf,0xb5},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xd2,0xf3},{0xd2,0xf5},{0xd2,0xf4},{0xaf,0xb2}, {0xd2,0xef},{0xfa,0xc7},{0x96,0x68},{0xaf,0xb0},{0xaf,0xaf}, {0x00,0x00},{0xaf,0xb3},{0xaf,0xb1},{0x00,0x00},{0xaf,0xb4}, {0xd2,0xf2},{0xd2,0xed},{0xd2,0xee},{0xd2,0xf1},{0xd2,0xf0}, {0x85,0xb8},{0x86,0xef},{0x96,0x69},{0x00,0x00},{0x00,0x00}, {0x96,0x6a},{0x00,0x00},{0xd6,0xc6},{0xd6,0xc7},{0xd6,0xc5}, {0x00,0x00},{0xd6,0xc4},{0xb2,0xbe},{0x00,0x00},{0x8a,0xe2}, {0x00,0x00},{0x00,0x00},{0xb5,0x7d},{0x00,0x00},{0xda,0xd6}, {0xda,0xd8},{0xda,0xda},{0xb5,0x7c},{0xfa,0xc8},{0x00,0x00}, {0xb5,0x7a},{0x00,0x00},{0xda,0xd7},{0xb5,0x7b},{0xda,0xd9}, {0xb5,0x79},{0xfa,0xc9},{0x00,0x00},{0xdf,0x41},{0xde,0xf7}, {0xde,0xfa},{0xde,0xfe},{0xb8,0x5a},{0xde,0xfc},{0x00,0x00}, {0xde,0xfb},{0xde,0xf8},{0xde,0xf9},{0xb8,0x58},{0xdf,0x40}, {0xb8,0x57},{0x00,0x00},{0xb8,0x5c},{0xb8,0x5b},{0xb8,0x59}, {0x00,0x00},{0xde,0xfd},{0x89,0x47},{0x00,0x00},{0x00,0x00}, {0xe3,0x49},{0x00,0x00},{0xe3,0x48},{0x00,0x00},{0x96,0x6b}, {0xe3,0x44},{0x00,0x00},{0xfc,0xce},{0xba,0xd8},{0xe3,0x47}, {0xe3,0x46},{0xba,0xd9},{0x93,0xa6},{0x8b,0xae},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xbd,0x5e},{0x00,0x00},{0xe6,0xd2}, {0x96,0x6c},{0xbd,0x5f},{0xbd,0x5b},{0xbd,0x5d},{0xfc,0xcf}, {0xbd,0x5a},{0xbd,0x5c},{0x00,0x00},{0x92,0xf9},{0xfa,0xca}, {0xea,0xaf},{0x96,0x6d},{0xbf,0x70},{0xea,0xb1},{0xea,0xb0}, {0xfc,0xd0},{0xe3,0x45},{0xbf,0x72},{0xbf,0x71},{0xbf,0x6e}, {0xbf,0x6f},{0x92,0x53},{0xfa,0xcb},{0x8a,0xe1},{0x00,0x00}, {0x00,0x00},{0xed,0xb5},{0x00,0x00},{0xed,0xb3},{0xc1,0x4a}, {0xed,0xb4},{0x00,0x00},{0xed,0xb6},{0xed,0xb2},{0xed,0xb1}, {0x00,0x00},{0x00,0x00},{0xf0,0x60},{0xc2,0xaa},{0xc2,0xa8}, {0xc2,0xa9},{0x82,0x67},{0x00,0x00},{0x96,0x6e},{0x00,0x00}, {0xf2,0xa6},{0xf2,0xa7},{0xc3,0xad},{0x00,0x00},{0xc3,0xac}, {0xf4,0xa3},{0xf4,0xa4},{0xf4,0xa2},{0x00,0x00},{0xf6,0xf8}, {0xf6,0xf9},{0x00,0x00},{0x00,0x00},{0xa5,0xde},{0xca,0x48}, {0xa8,0x73},{0x87,0xfb},{0xcd,0xa5},{0xaa,0xc6},{0xaa,0xc5}, {0xcd,0xa6},{0x00,0x00},{0xfc,0x42},{0xd0,0x40},{0xac,0xef}, {0xcf,0xfe},{0xac,0xf0},{0x00,0x00},{0x8c,0xfa},{0xaf,0xb6}, {0xd2,0xf8},{0xd2,0xf6},{0xd2,0xfc},{0xaf,0xb7},{0xd2,0xf7}, {0xd2,0xfb},{0xd2,0xf9},{0xd2,0xfa},{0x8a,0xe4},{0x00,0x00}, {0xd6,0xc8},{0xd6,0xca},{0x87,0xfa},{0xb2,0xbf},{0x93,0x58}, {0xd6,0xc9},{0xb2,0xc0},{0xb5,0xa2},{0xb5,0xa1},{0xb5,0x7e}, {0xda,0xdb},{0x00,0x00},{0x00,0x00},{0x8a,0xe3},{0x86,0xf1}, {0xdf,0x44},{0xb8,0x5d},{0xb8,0x5e},{0x00,0x00},{0xdf,0x43}, {0xdf,0x42},{0x00,0x00},{0x89,0x48},{0x8c,0x43},{0x00,0x00}, {0xe3,0x4a},{0xba,0xdb},{0xba,0xda},{0xe3,0x4b},{0xe3,0x4c}, {0x8e,0xee},{0xbd,0x61},{0xbd,0x60},{0xfe,0xa7},{0xea,0xb5}, {0xe6,0xd3},{0xe6,0xd5},{0xe6,0xd4},{0xea,0xb4},{0xea,0xb2}, {0xea,0xb6},{0xea,0xb3},{0x00,0x00},{0xbf,0x73},{0xfc,0x44}, {0x96,0x6f},{0x00,0x00},{0xed,0xb7},{0xc1,0x4b},{0xed,0xb8}, {0xed,0xb9},{0x96,0x70},{0xfa,0xcc},{0xc2,0xab},{0xc2,0xac}, {0x00,0x00},{0xc4,0x75},{0xfd,0xe5},{0x96,0x71},{0xc5,0xd1}, {0xa5,0xdf},{0x00,0x00},{0x94,0xb5},{0x00,0x00},{0x94,0xb6}, {0x00,0x00},{0xd0,0x41},{0xfa,0xcd},{0x94,0xb8},{0x00,0x00}, {0x94,0xb7},{0x88,0x67},{0x00,0x00},{0xd2,0xfd},{0xaf,0xb8}, {0xfc,0xd2},{0x96,0x72},{0x93,0xe2},{0xfc,0xd1},{0x8c,0x44}, {0xb3,0xba},{0xb3,0xb9},{0x94,0xb9},{0xfa,0xce},{0xb5,0xa4}, {0xda,0xdd},{0xb5,0xa3},{0xda,0xdc},{0xfa,0xcf},{0x00,0x00}, {0x96,0x73},{0x82,0x6d},{0xdf,0x45},{0x00,0x00},{0xba,0xdc}, {0xe3,0x4d},{0xba,0xdd},{0x94,0xba},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc4,0x76},{0xf4,0xa5}, {0xfa,0xd0},{0xa6,0xcb},{0xaa,0xc7},{0xcd,0xa7},{0x00,0x00}, {0xac,0xf2},{0x96,0x74},{0xac,0xf1},{0xd0,0x42},{0xd0,0x43}, {0x94,0xbb},{0x89,0x49},{0xd3,0x40},{0xd3,0x42},{0xaf,0xb9}, {0x00,0x00},{0xd3,0x44},{0xd3,0x47},{0xd3,0x45},{0x85,0x41}, {0x96,0x75},{0x00,0x00},{0xd3,0x46},{0xd3,0x43},{0xd2,0xfe}, {0xaf,0xba},{0xd3,0x48},{0xd3,0x41},{0x85,0x40},{0x85,0xec}, {0x00,0x00},{0x00,0x00},{0xd6,0xd3},{0xb2,0xc6},{0xd6,0xdc}, {0xb2,0xc3},{0x00,0x00},{0xd6,0xd5},{0xb2,0xc7},{0xfc,0xdc}, {0xb2,0xc1},{0x00,0x00},{0xd6,0xd0},{0xd6,0xdd},{0xd6,0xd1}, {0xd6,0xce},{0xb2,0xc5},{0x96,0x76},{0xb2,0xc2},{0x96,0x77}, {0xd6,0xd4},{0xd6,0xd7},{0xb2,0xc4},{0xd6,0xd8},{0xb2,0xc8}, {0xd6,0xd9},{0xd6,0xcf},{0xd6,0xd6},{0xd6,0xda},{0xd6,0xd2}, {0xd6,0xcd},{0xd6,0xcb},{0xfa,0xd1},{0x00,0x00},{0xd6,0xdb}, {0xfe,0x64},{0x86,0xf2},{0xda,0xdf},{0x8c,0xd7},{0x00,0x00}, {0x90,0x7a},{0x00,0x00},{0xda,0xe4},{0x00,0x00},{0x96,0x78}, {0x96,0x79},{0xda,0xe0},{0xda,0xe6},{0xb5,0xa7},{0xd6,0xcc}, {0xda,0xe1},{0xb5,0xa5},{0xda,0xde},{0xb5,0xac},{0xda,0xe2}, {0xb5,0xab},{0xda,0xe3},{0xb5,0xad},{0xb5,0xa8},{0xb5,0xae}, {0xb5,0xa9},{0x00,0x00},{0xb5,0xaa},{0x96,0x7a},{0xb5,0xa6}, {0x00,0x00},{0xda,0xe5},{0x00,0x00},{0x8f,0x5b},{0x89,0x4a}, {0x00,0x00},{0x86,0xf3},{0x00,0x00},{0x00,0x00},{0xb8,0x61}, {0xdf,0x50},{0xfa,0xd2},{0xdf,0x53},{0xdf,0x47},{0xdf,0x4c}, {0xdf,0x46},{0xb8,0x63},{0x00,0x00},{0xdf,0x4a},{0x00,0x00}, {0x00,0x00},{0xfa,0xd3},{0xdf,0x48},{0xb8,0x62},{0x96,0x7b}, {0xdf,0x4f},{0xdf,0x4e},{0xdf,0x4b},{0xdf,0x4d},{0xdf,0x49}, {0xba,0xe1},{0xdf,0x52},{0xb8,0x5f},{0xdf,0x51},{0x8c,0x45}, {0xfa,0xd4},{0xfa,0xd5},{0x00,0x00},{0x00,0x00},{0x8b,0xaf}, {0x00,0x00},{0x8a,0xe9},{0x00,0x00},{0xe3,0x5d},{0x00,0x00}, {0xba,0xe8},{0xe3,0x58},{0x82,0x7a},{0xba,0xe7},{0xe3,0x4e}, {0x00,0x00},{0xe3,0x50},{0xba,0xe0},{0xe3,0x55},{0xe3,0x54}, {0xe3,0x57},{0xba,0xe5},{0xe3,0x52},{0xe3,0x51},{0xfc,0xdd}, {0x00,0x00},{0xba,0xe4},{0xba,0xdf},{0xe3,0x53},{0xba,0xe2}, {0xe3,0x59},{0xe3,0x5b},{0xfa,0xd6},{0xe3,0x56},{0xe3,0x4f}, {0xba,0xe3},{0xfa,0xd7},{0xfa,0xd8},{0xbd,0x69},{0xba,0xde}, {0xfa,0xd9},{0xfc,0xde},{0xe3,0x5c},{0x00,0x00},{0x8f,0x5a}, {0xfa,0xda},{0x90,0x59},{0x8d,0x71},{0x8a,0xe7},{0x8a,0xe5}, {0xe6,0xd9},{0xbd,0x62},{0x00,0x00},{0xe6,0xdb},{0x00,0x00}, {0xbd,0x63},{0x96,0x7c},{0x00,0x00},{0xbd,0x65},{0xe6,0xde}, {0x00,0x00},{0xe6,0xd6},{0xba,0xe6},{0xe6,0xdc},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xe6,0xd8},{0x00,0x00}, {0xb8,0x60},{0xbd,0x68},{0x00,0x00},{0x00,0x00},{0xbd,0x64}, {0x00,0x00},{0xbd,0x66},{0xbd,0x67},{0x00,0x00},{0xbf,0x76}, {0xe6,0xdd},{0xe6,0xd7},{0xbd,0x6a},{0x00,0x00},{0xe6,0xda}, {0xfc,0xdf},{0x96,0xd0},{0x8a,0xe8},{0x00,0x00},{0x8a,0x40}, {0xea,0xc0},{0xea,0xbb},{0x00,0x00},{0x00,0x00},{0xea,0xc5}, {0xbf,0x74},{0xea,0xbd},{0xbf,0x78},{0xea,0xc3},{0xea,0xba}, {0xea,0xb7},{0xea,0xc6},{0xc1,0x51},{0xbf,0x79},{0xea,0xc2}, {0xea,0xb8},{0xbf,0x77},{0xea,0xbc},{0xbf,0x7b},{0xea,0xb9}, {0xea,0xbe},{0xbf,0x7a},{0xea,0xc1},{0xea,0xc4},{0x96,0xd1}, {0x82,0xa1},{0x8c,0x46},{0x00,0x00},{0xed,0xcb},{0xed,0xcc}, {0xed,0xbc},{0xed,0xc3},{0xed,0xc1},{0x00,0x00},{0xfa,0xdb}, {0xc1,0x4f},{0xed,0xc8},{0xea,0xbf},{0x96,0xd2},{0xed,0xbf}, {0xfc,0xe1},{0xed,0xc9},{0xc1,0x4e},{0xed,0xbe},{0xed,0xbd}, {0xed,0xc7},{0xed,0xc4},{0xed,0xc6},{0x00,0x00},{0xed,0xba}, {0xed,0xca},{0xc1,0x4c},{0x00,0x00},{0xed,0xc5},{0xed,0xce}, {0xed,0xc2},{0xc1,0x50},{0xc1,0x4d},{0xed,0xc0},{0xed,0xbb}, {0xed,0xcd},{0xbf,0x75},{0xfa,0xdc},{0x94,0xbc},{0xfa,0xdd}, {0x96,0xd3},{0x90,0x77},{0x94,0xbd},{0x00,0x00},{0xf0,0x63}, {0x00,0x00},{0x96,0xd4},{0xf0,0x61},{0xf0,0x67},{0xc2,0xb0}, {0xf0,0x65},{0xf0,0x64},{0xc2,0xb2},{0xf0,0x6a},{0xc2,0xb1}, {0x00,0x00},{0xf0,0x6b},{0xf0,0x68},{0xc2,0xae},{0xf0,0x69}, {0xf0,0x62},{0xc2,0xaf},{0xc2,0xad},{0xf2,0xab},{0xf0,0x66}, {0x00,0x00},{0x00,0x00},{0xf0,0x6c},{0x00,0x00},{0x00,0x00}, {0xf2,0xa8},{0x00,0x00},{0x96,0xd5},{0x00,0x00},{0xc3,0xb2}, {0xc3,0xb0},{0xf2,0xaa},{0x00,0x00},{0xf2,0xac},{0xf2,0xa9}, {0xc3,0xb1},{0xc3,0xae},{0xc3,0xaf},{0xc3,0xb3},{0x8c,0xd8}, {0xfc,0xe2},{0xc4,0x78},{0x96,0xd6},{0xf4,0xaa},{0x00,0x00}, {0xf4,0xa9},{0xf4,0xa7},{0xf4,0xa6},{0xf4,0xa8},{0x00,0x00}, {0xc4,0x77},{0xc4,0x79},{0x00,0x00},{0xfa,0xde},{0xc4,0xf0}, {0xfc,0xe3},{0x00,0x00},{0xf5,0xe5},{0xf5,0xe4},{0x00,0x00}, {0xfa,0xdf},{0xf6,0xfa},{0xfa,0xe0},{0xf6,0xfc},{0xf6,0xfe}, {0xf6,0xfd},{0xf6,0xfb},{0xfc,0xe4},{0x00,0x00},{0xc5,0xa3}, {0xc5,0xa2},{0x00,0x00},{0x00,0x00},{0xc5,0xd3},{0xc5,0xd2}, {0xc5,0xd4},{0xf7,0xed},{0xf7,0xec},{0x00,0x00},{0xf8,0xfb}, {0xf8,0xb8},{0xf8,0xfc},{0xc6,0x58},{0x96,0xd7},{0xc6,0x59}, {0xf9,0x6d},{0xfc,0xe5},{0x00,0x00},{0xc6,0x7e},{0xa6,0xcc}, {0x90,0x5a},{0xcd,0xa8},{0x00,0x00},{0x00,0x00},{0xd0,0x45}, {0xd0,0x46},{0xd0,0x44},{0x8b,0xdd},{0x83,0x5e},{0xac,0xf3}, {0xfc,0xe6},{0xd0,0x47},{0xd0,0x48},{0xd0,0x49},{0x94,0x43}, {0xfc,0xe8},{0xd3,0x49},{0xd3,0x4f},{0xfc,0xe7},{0x00,0x00}, {0xd3,0x4d},{0xaf,0xbb},{0xd3,0x4b},{0x92,0xf7},{0xd3,0x4c}, {0xd3,0x4e},{0x96,0xd8},{0x00,0x00},{0x94,0xbe},{0xd3,0x4a}, {0xb2,0xc9},{0x00,0x00},{0xd6,0xde},{0xb2,0xcb},{0xd6,0xe0}, {0xb2,0xca},{0xd6,0xdf},{0x00,0x00},{0x00,0x00},{0x92,0xe0}, {0x90,0x7b},{0x90,0x43},{0xda,0xe8},{0xb5,0xaf},{0x00,0x00}, {0xda,0xea},{0xda,0xe7},{0xd6,0xe1},{0x85,0xed},{0xb5,0xb0}, {0xfe,0x63},{0xf9,0xdb},{0xda,0xe9},{0x00,0x00},{0x8a,0x41}, {0xfa,0xe1},{0xfc,0xe9},{0x94,0xbf},{0x8a,0xea},{0xdf,0x56}, {0x00,0x00},{0xb8,0x64},{0xdf,0x54},{0xb8,0x65},{0xdf,0x55}, {0xb8,0x66},{0x00,0x00},{0x00,0x00},{0x96,0xd9},{0xba,0xe9}, {0xe3,0x61},{0xe3,0x5e},{0xe3,0x60},{0xba,0xea},{0xba,0xeb}, {0xe3,0x5f},{0x94,0xc0},{0x8a,0x43},{0xfc,0xeb},{0x96,0xda}, {0x00,0x00},{0xe6,0xdf},{0x00,0x00},{0xfc,0xea},{0xe6,0xe0}, {0x95,0xb2},{0xbd,0x6b},{0xe6,0xe2},{0xe6,0xe1},{0xa0,0x54}, {0xa2,0x61},{0x00,0x00},{0xea,0xca},{0xea,0xcb},{0xea,0xc7}, {0xfb,0x7e},{0xea,0xc8},{0xbf,0x7c},{0xbf,0x7d},{0xea,0xc9}, {0x94,0xc1},{0xc1,0x57},{0xfc,0xed},{0x00,0x00},{0xc1,0x53}, {0xc1,0x58},{0xc1,0x54},{0xc1,0x56},{0xc1,0x52},{0x00,0x00}, {0xc1,0x55},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x96,0xdb}, {0xc2,0xb3},{0xed,0xcf},{0x00,0x00},{0xf2,0xae},{0x00,0x00}, {0xf2,0xad},{0x96,0xdc},{0xf4,0xab},{0xc4,0x7a},{0xc4,0x7b}, {0xf7,0x41},{0xf5,0xe6},{0x96,0xdd},{0xf7,0x40},{0x96,0xde}, {0xf8,0xfd},{0xf9,0xa4},{0xa6,0xcd},{0x96,0xdf},{0xfa,0xe2}, {0xa8,0x74},{0x96,0xe1},{0xcd,0xa9},{0xaa,0xc8},{0x00,0x00}, {0xac,0xf6},{0xd0,0x4c},{0xac,0xf4},{0xd0,0x4a},{0xac,0xf9}, {0xac,0xf5},{0xac,0xfa},{0xac,0xf8},{0xd0,0x4b},{0xac,0xf7}, {0xaf,0xbf},{0xaf,0xbe},{0xd3,0x5a},{0xaf,0xc7},{0xd3,0x53}, {0xd3,0x59},{0xaf,0xc3},{0xd3,0x52},{0xd3,0x58},{0xd3,0x56}, {0xaf,0xc2},{0xaf,0xc4},{0xd3,0x55},{0xaf,0xbd},{0xd3,0x54}, {0xaf,0xc8},{0xaf,0xc5},{0xaf,0xc9},{0xaf,0xc6},{0xd3,0x51}, {0xd3,0x50},{0xd3,0x57},{0xaf,0xc0},{0xaf,0xbc},{0xaf,0xc1}, {0x00,0x00},{0x00,0x00},{0x95,0xe2},{0x00,0x00},{0x86,0xfa}, {0xd6,0xf0},{0xd6,0xe9},{0x00,0x00},{0xb5,0xb5},{0xd6,0xe8}, {0x00,0x00},{0xb2,0xcf},{0xb2,0xd6},{0xb2,0xd3},{0xb2,0xd9}, {0xb2,0xd8},{0xb2,0xd4},{0x00,0x00},{0xd6,0xe2},{0xd6,0xe5}, {0x00,0x00},{0xd6,0xe4},{0xb2,0xd0},{0xd6,0xe6},{0xd6,0xef}, {0xb2,0xd1},{0xd6,0xe3},{0xd6,0xec},{0xd6,0xed},{0xb2,0xd2}, {0xd6,0xea},{0xb2,0xd7},{0xb2,0xcd},{0xb2,0xd5},{0xd6,0xe7}, {0xb2,0xcc},{0xd6,0xeb},{0xfa,0xe3},{0x00,0x00},{0xd6,0xee}, {0xfa,0xe4},{0x92,0xab},{0xfc,0xef},{0xda,0xfb},{0xda,0xf2}, {0xb5,0xb2},{0xda,0xf9},{0xda,0xf6},{0xda,0xee},{0xda,0xf7}, {0xb5,0xb4},{0xda,0xef},{0x00,0x00},{0xda,0xeb},{0x00,0x00}, {0xfc,0xf0},{0xb8,0x6c},{0xda,0xf4},{0xfe,0x60},{0xb5,0xb1}, {0xda,0xfa},{0x00,0x00},{0xb5,0xb8},{0xb5,0xba},{0xda,0xed}, {0x00,0x00},{0x00,0x00},{0xb5,0xb9},{0xda,0xf0},{0xb5,0xb3}, {0xda,0xf8},{0xda,0xf1},{0xda,0xf5},{0x00,0x00},{0xda,0xf3}, {0xb5,0xb6},{0xda,0xec},{0xb5,0xbb},{0xb2,0xce},{0xb5,0xb7}, {0xb5,0xbc},{0x00,0x00},{0x92,0x5b},{0x93,0x46},{0xfa,0xe5}, {0x00,0x00},{0xb8,0x68},{0xdf,0x5d},{0xdf,0x5f},{0xdf,0x61}, {0xdf,0x65},{0x00,0x00},{0xdf,0x5b},{0xdf,0x59},{0xb8,0x6a}, {0x00,0x00},{0xdf,0x60},{0xdf,0x64},{0xdf,0x5c},{0xdf,0x58}, {0x00,0x00},{0xdf,0x57},{0x95,0x68},{0x00,0x00},{0x96,0xe2}, {0xdf,0x62},{0xdf,0x5a},{0xdf,0x5e},{0xb8,0x6b},{0x00,0x00}, {0xb8,0x69},{0xdf,0x66},{0xb8,0x67},{0xdf,0x63},{0x9d,0xb9}, {0xe3,0x72},{0x96,0xe3},{0x00,0x00},{0x92,0xae},{0x93,0x64}, {0x94,0xc2},{0xba,0xee},{0xe3,0x6a},{0xbd,0x78},{0xe3,0x74}, {0xba,0xf1},{0xe3,0x78},{0xba,0xf7},{0xe3,0x65},{0x96,0xe4}, {0x00,0x00},{0xe3,0x75},{0xe3,0x62},{0x96,0xe5},{0xe3,0x77}, {0xe3,0x66},{0x95,0x56},{0xba,0xfe},{0xba,0xfb},{0xe3,0x76}, {0xe3,0x70},{0xba,0xed},{0xba,0xf5},{0xba,0xf4},{0x95,0x6a}, {0xba,0xf3},{0xba,0xf9},{0x00,0x00},{0xe3,0x63},{0xba,0xfa}, {0xe3,0x71},{0xba,0xf6},{0xba,0xec},{0xe3,0x73},{0xba,0xef}, {0xba,0xf0},{0xba,0xf8},{0xe3,0x68},{0xe3,0x67},{0xe3,0x64}, {0x00,0x00},{0xe3,0x6c},{0xe3,0x69},{0xe3,0x6d},{0xba,0xfd}, {0x00,0x00},{0xe3,0x79},{0xba,0xf2},{0xe3,0x6e},{0xe3,0x6f}, {0x96,0xe6},{0xe3,0x6b},{0x93,0x5c},{0x96,0xe7},{0x93,0xe7}, {0xba,0xfc},{0x96,0xe8},{0xfa,0xe6},{0xfa,0xe7},{0xfa,0xe8}, {0xe6,0xe7},{0xbd,0x70},{0xbd,0x79},{0xbd,0x75},{0xe6,0xe4}, {0x95,0xc3},{0xbd,0x72},{0xbd,0x76},{0xe6,0xf0},{0xbd,0x6c}, {0xe6,0xe8},{0x00,0x00},{0xbd,0x74},{0xfa,0xe9},{0x96,0xe9}, {0xe6,0xeb},{0xe6,0xe6},{0xbd,0x73},{0xbd,0x77},{0xe6,0xe5}, {0x00,0x00},{0xbd,0x71},{0x00,0x00},{0xe6,0xef},{0xbd,0x6e}, {0xe6,0xee},{0xe6,0xed},{0xbd,0x7a},{0xe5,0x72},{0xbd,0x6d}, {0xfc,0xf1},{0xe6,0xec},{0xe6,0xe3},{0x00,0x00},{0xbd,0x7b}, {0xe6,0xea},{0xbd,0x6f},{0x00,0x00},{0x96,0xea},{0x9f,0x7e}, {0x00,0x00},{0x00,0x00},{0x92,0x4d},{0x00,0x00},{0xe6,0xe9}, {0x92,0xed},{0x94,0xc3},{0x00,0x00},{0x9f,0xa1},{0xbf,0xa2}, {0xbf,0xa7},{0xbf,0x7e},{0xea,0xd8},{0xea,0xcf},{0xea,0xdb}, {0xea,0xd3},{0xea,0xd9},{0xbf,0xa8},{0xbf,0xa1},{0xea,0xcc}, {0xea,0xd2},{0xea,0xdc},{0xea,0xd5},{0xea,0xda},{0xea,0xce}, {0x00,0x00},{0x00,0x00},{0xea,0xd6},{0xbf,0xa3},{0xea,0xd4}, {0xbf,0xa6},{0xbf,0xa5},{0xea,0xd0},{0xea,0xd1},{0xea,0xcd}, {0xea,0xd7},{0xbf,0xa4},{0xea,0xde},{0xea,0xdd},{0x92,0xdf}, {0xfc,0xf2},{0x00,0x00},{0xed,0xda},{0xed,0xd6},{0xc1,0x5f}, {0x00,0x00},{0xed,0xd0},{0xc1,0x59},{0xc1,0x69},{0xed,0xdc}, {0xc1,0x61},{0xc1,0x5d},{0xed,0xd3},{0xc1,0x64},{0xc1,0x67}, {0xed,0xde},{0xc1,0x5c},{0xed,0xd5},{0xc1,0x65},{0xed,0xe0}, {0xed,0xdd},{0xed,0xd1},{0xc1,0x60},{0xc1,0x5a},{0xc1,0x68}, {0xed,0xd8},{0xc1,0x63},{0xed,0xd2},{0xc1,0x5e},{0xed,0xdf}, {0xc1,0x62},{0xc1,0x5b},{0xed,0xd9},{0xc1,0x66},{0xed,0xd7}, {0x93,0x4f},{0x82,0x5a},{0xed,0xdb},{0xfa,0xea},{0x00,0x00}, {0x00,0x00},{0xf0,0x6e},{0xf0,0x74},{0xc2,0xb9},{0xf0,0x77}, {0xc2,0xb4},{0xc2,0xb5},{0xf0,0x6f},{0xf0,0x76},{0xf0,0x71}, {0xc2,0xba},{0xc2,0xb7},{0x9f,0xa2},{0xf0,0x6d},{0xfa,0xeb}, {0xc2,0xb6},{0xf0,0x73},{0xf0,0x75},{0xc2,0xb8},{0xf0,0x72}, {0xf0,0x70},{0x00,0x00},{0x9f,0xa3},{0x8a,0x50},{0x94,0xc4}, {0xf2,0xb8},{0xc3,0xb7},{0xc3,0xb8},{0xc3,0xb4},{0x9f,0xa4}, {0xc3,0xb5},{0x8c,0xe8},{0xf2,0xb4},{0xf2,0xb2},{0x00,0x00}, {0xf2,0xb6},{0xc3,0xba},{0xf2,0xb7},{0xf2,0xb0},{0xf2,0xaf}, {0xf2,0xb3},{0xf2,0xb1},{0xc3,0xb6},{0xf2,0xb5},{0xf4,0xac}, {0xc4,0x7e},{0xc4,0x7d},{0xf4,0xad},{0xfa,0xec},{0xf4,0xaf}, {0xf4,0xae},{0xc4,0xa1},{0x94,0xc5},{0x00,0x00},{0x00,0x00}, {0xf5,0xeb},{0xf5,0xe8},{0xf5,0xe9},{0xfa,0xed},{0xf5,0xe7}, {0xf5,0xea},{0xc4,0xf2},{0xf5,0xec},{0xfa,0xee},{0xc4,0xf1}, {0x94,0xc6},{0xf7,0x42},{0xfa,0xef},{0xc5,0xd5},{0xc5,0xd7}, {0xf7,0xee},{0xc5,0xd6},{0xf8,0xb9},{0xf9,0x40},{0xf9,0x42}, {0xf8,0xfe},{0xf9,0x41},{0xc6,0x6c},{0x00,0x00},{0x00,0x00}, {0x9c,0xeb},{0x83,0x5f},{0x83,0x76},{0x83,0x71},{0x83,0x70}, {0x8a,0x4e},{0x83,0x74},{0x83,0x75},{0x83,0xcb},{0x8d,0xbe}, {0x90,0x44},{0x83,0x72},{0x83,0x73},{0x87,0xfe},{0x83,0xcc}, {0x00,0x00},{0x83,0xc8},{0x83,0xca},{0x83,0xc6},{0x86,0xfc}, {0x83,0xcd},{0x00,0x00},{0x8a,0x4c},{0x87,0x41},{0x83,0xcf}, {0x83,0xce},{0x83,0xc7},{0x83,0xc5},{0x00,0x00},{0x00,0x00}, {0x83,0xc9},{0x8d,0xc5},{0x88,0x45},{0x8d,0xd3},{0x84,0x71}, {0x84,0x72},{0x87,0xfd},{0x84,0x6f},{0x84,0x6e},{0x84,0x6d}, {0x8a,0xeb},{0x84,0x70},{0x89,0x53},{0x84,0x68},{0x84,0x6b}, {0x84,0x6c},{0x84,0x6a},{0x8b,0xb1},{0x85,0xee},{0x8d,0xd4}, {0x85,0xf0},{0x85,0x44},{0x85,0x43},{0xfa,0xf0},{0x8a,0xed}, {0x85,0x4a},{0x8d,0xe4},{0x8b,0xb3},{0x85,0x48},{0x85,0x49}, {0x85,0x4b},{0x85,0x47},{0x85,0x45},{0x85,0x42},{0x84,0x69}, {0x8e,0x4a},{0x8e,0x4b},{0x85,0xef},{0x8a,0xef},{0x00,0x00}, {0x85,0xf1},{0x85,0xf2},{0x8c,0x49},{0x8e,0x49},{0x8a,0x45}, {0x87,0x43},{0x86,0xf8},{0x00,0x00},{0x8c,0xa2},{0x86,0xfd}, {0x8e,0x7b},{0x86,0xf7},{0xfa,0xf1},{0x8e,0x7a},{0x8b,0xb2}, {0x87,0x42},{0x87,0x40},{0x87,0x45},{0x8a,0x49},{0x86,0xfe}, {0x00,0x00},{0x8e,0x7c},{0x8e,0x79},{0x86,0xf6},{0x86,0xf4}, {0x86,0xf5},{0x86,0xf9},{0x86,0xfb},{0x87,0x44},{0x88,0x49}, {0x8e,0xc2},{0x88,0x40},{0x88,0x41},{0x8d,0xa3},{0x88,0x4b}, {0x88,0x4a},{0x88,0x42},{0x00,0x00},{0x8f,0x79},{0x8e,0xc4}, {0x88,0x48},{0x88,0x46},{0x8e,0xc5},{0x00,0x00},{0x8e,0xc6}, {0xfa,0xf2},{0x88,0x47},{0x87,0xfc},{0x8a,0x47},{0x88,0x43}, {0x8e,0xc3},{0x88,0x44},{0x89,0x52},{0x89,0x4e},{0x8e,0xf0}, {0x89,0x51},{0x8a,0x4a},{0x00,0x00},{0x89,0x50},{0x8c,0xa1}, {0x8f,0x5d},{0x89,0x4b},{0x89,0x4c},{0x8c,0x48},{0x8a,0x4f}, {0x8a,0x51},{0x8a,0x48},{0x8c,0xfb},{0x8a,0x44},{0x8a,0x46}, {0x8a,0x4d},{0x90,0x45},{0x8a,0xee},{0x8a,0xec},{0x8a,0xf0}, {0xfa,0xf3},{0x8f,0xde},{0x8f,0xbf},{0x8f,0xc0},{0x8b,0xb5}, {0x90,0x7c},{0xa6,0xce},{0x9f,0xa5},{0xac,0xfb},{0xd2,0x6f}, {0xaf,0xca},{0x00,0x00},{0x00,0x00},{0xb2,0xda},{0xda,0xfc}, {0xda,0xfd},{0x9f,0xa6},{0x9f,0xa7},{0x8c,0x4a},{0xea,0xdf}, {0xc1,0x6a},{0xed,0xe1},{0x00,0x00},{0x95,0x74},{0xc2,0xbb}, {0x9f,0xa8},{0xf2,0xba},{0xf2,0xb9},{0xc4,0xa2},{0xf5,0xed}, {0xfb,0xaa},{0xf7,0x43},{0xc5,0xf8},{0xca,0x49},{0x9f,0xa9}, {0x9d,0x75},{0xaa,0xc9},{0xa8,0x75},{0x00,0x00},{0x8b,0xb4}, {0xd0,0x4d},{0x00,0x00},{0x87,0x46},{0xd3,0x60},{0xd3,0x5b}, {0xd3,0x5f},{0xd3,0x5d},{0xaf,0xcb},{0xd3,0x5e},{0xd3,0x5c}, {0x88,0x4d},{0xd6,0xf1},{0x00,0x00},{0xda,0xfe},{0xdb,0x40}, {0xdf,0x69},{0xdf,0x6a},{0xb8,0x6e},{0xb8,0x6f},{0xdf,0x68}, {0xdf,0x6b},{0xdf,0x67},{0xb8,0x6d},{0x00,0x00},{0xbb,0x40}, {0xfa,0xf4},{0xb8,0x70},{0xe3,0x7a},{0x8f,0xc1},{0xbd,0x7c}, {0xe6,0xf1},{0xbd,0x7d},{0x95,0x64},{0xbf,0xa9},{0xea,0xe2}, {0xea,0xe0},{0xea,0xe1},{0xed,0xe4},{0xed,0xe3},{0xed,0xe2}, {0x00,0x00},{0x8d,0x56},{0xfa,0xf5},{0xf2,0xbb},{0x00,0x00}, {0xc3,0xb9},{0xf2,0xbc},{0xf7,0x44},{0xc5,0xf9},{0xf8,0xba}, {0xa6,0xcf},{0xaa,0xcb},{0xaa,0xca},{0xd0,0x4f},{0xac,0xfc}, {0x9f,0xaa},{0x00,0x00},{0xd0,0x4e},{0xd3,0x62},{0x9f,0xab}, {0xaf,0xcc},{0xd6,0xf2},{0xd3,0x61},{0x95,0xe0},{0x00,0x00}, {0x00,0x00},{0xb2,0xdc},{0xd6,0xf5},{0xd6,0xf3},{0xd6,0xf4}, {0xb2,0xdb},{0x8e,0x4c},{0xdb,0x42},{0xdb,0x43},{0xdb,0x41}, {0x95,0x55},{0xb8,0x73},{0xdf,0x6d},{0xdf,0x6c},{0xdf,0x6e}, {0xb8,0x72},{0xb8,0x71},{0x00,0x00},{0x00,0x00},{0xe6,0xf2}, {0xe6,0xf4},{0xfa,0xf6},{0xbd,0x7e},{0xe6,0xf3},{0xea,0xe3}, {0xbf,0xaa},{0xf0,0x79},{0x9f,0xac},{0xf0,0x78},{0xc3,0xbb}, {0xf2,0xbd},{0xc3,0xbd},{0xc3,0xbc},{0xf4,0xb0},{0xf5,0xee}, {0xc4,0xf3},{0xa6,0xd0},{0xd0,0x50},{0xac,0xfd},{0xd3,0x65}, {0xaf,0xce},{0xd3,0x64},{0xd3,0x63},{0x00,0x00},{0xaf,0xcd}, {0xfa,0xf7},{0xd6,0xfb},{0x00,0x00},{0xd6,0xfd},{0xd6,0xf6}, {0xd6,0xf7},{0xb2,0xdd},{0xd6,0xf8},{0xb2,0xde},{0xd6,0xfc}, {0xd6,0xf9},{0xd6,0xfa},{0xb2,0xdf},{0x00,0x00},{0xb5,0xbe}, {0xb5,0xbf},{0x00,0x00},{0xdb,0x44},{0x8a,0xf1},{0x00,0x00}, {0x00,0x00},{0xdf,0x6f},{0xdf,0x70},{0x9f,0xad},{0xe3,0x7e}, {0xbb,0x43},{0xbb,0x41},{0xbb,0x42},{0xe3,0x7b},{0xe3,0x7c}, {0x00,0x00},{0xe3,0x7d},{0xe6,0xf9},{0x9f,0xae},{0xe6,0xfa}, {0xbd,0xa1},{0xe6,0xf7},{0xe6,0xf6},{0xe6,0xf8},{0xe6,0xf5}, {0xbf,0xad},{0xea,0xe4},{0xbf,0xab},{0xbf,0xac},{0xed,0xe6}, {0xc1,0x6b},{0xed,0xe5},{0xef,0xa8},{0x00,0x00},{0xf0,0x7a}, {0xf0,0x7b},{0xc2,0xbc},{0x9f,0xaf},{0xc2,0xbd},{0xc1,0x6c}, {0xf2,0xbe},{0xf2,0xbf},{0xf4,0xb1},{0xc4,0xa3},{0xa6,0xd1}, {0x9f,0xb0},{0xa6,0xd2},{0xac,0xfe},{0xaa,0xcc},{0xaf,0xcf}, {0xd0,0x51},{0x9f,0xb1},{0x00,0x00},{0x00,0x00},{0xb5,0xc0}, {0xa6,0xd3},{0xad,0x41},{0xd0,0x52},{0xd0,0x53},{0xad,0x40}, {0xad,0x42},{0xa6,0xd4},{0x00,0x00},{0xd0,0x54},{0xaf,0xd1}, {0xd3,0x66},{0xaf,0xd3},{0xaf,0xd0},{0xaf,0xd2},{0x00,0x00}, {0xd7,0x41},{0xb2,0xe0},{0xfc,0xf6},{0xd7,0x40},{0xd6,0xfe}, {0xfa,0xf8},{0xdf,0x71},{0xfa,0xf9},{0x00,0x00},{0xe3,0xa1}, {0xfa,0xfa},{0xbd,0xa2},{0x8f,0x5e},{0xbf,0xae},{0xea,0xe6}, {0xea,0xe5},{0x00,0x00},{0xed,0xe7},{0x00,0x00},{0x9f,0xb2}, {0x9f,0xb3},{0xf5,0xef},{0xfa,0xfb},{0x00,0x00},{0xa6,0xd5}, {0xcb,0x73},{0xcd,0xaa},{0xad,0x43},{0xd0,0x55},{0x8a,0x55}, {0xd3,0x68},{0x00,0x00},{0x95,0x5c},{0x9f,0xb4},{0xaf,0xd4}, {0xd3,0x67},{0xaf,0xd5},{0x00,0x00},{0x00,0x00},{0x8a,0xf3}, {0xd7,0x43},{0x00,0x00},{0x00,0x00},{0xb2,0xe2},{0xd7,0x42}, {0xd7,0x44},{0x00,0x00},{0xb2,0xe1},{0x8c,0xd9},{0x8a,0xf2}, {0x8f,0xdf},{0x00,0x00},{0xdb,0x46},{0xdb,0x47},{0xdb,0x45}, {0xb5,0xc1},{0x00,0x00},{0x8a,0x54},{0x00,0x00},{0xb8,0x74}, {0x00,0x00},{0xb8,0x75},{0x00,0x00},{0xbb,0x45},{0xfc,0xfa}, {0xe3,0xa3},{0xe3,0xa2},{0xbb,0x44},{0xfa,0xfc},{0x00,0x00}, {0x82,0x6b},{0xfc,0xf7},{0xfc,0xf8},{0xe6,0xfb},{0x00,0x00}, {0xfc,0xf9},{0xe6,0xfc},{0xfa,0xfd},{0x8f,0x7a},{0x8a,0x53}, {0x00,0x00},{0xea,0xe7},{0x00,0x00},{0x00,0x00},{0xc1,0x70}, {0xc1,0x6f},{0xc1,0x6d},{0xc1,0x6e},{0xc1,0x71},{0x93,0x77}, {0xf0,0x7c},{0xc2,0xbf},{0xc2,0xbe},{0xf2,0xc0},{0xf4,0xb2}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc5,0xa5},{0xc5,0xa4}, {0xa6,0xd6},{0x91,0xd5},{0x00,0x00},{0xd1,0xfb},{0x85,0x4c}, {0xb8,0x77},{0xb5,0xc2},{0xb8,0x76},{0xbb,0x46},{0x00,0x00}, {0xa6,0xd7},{0xc9,0xa9},{0xa6,0xd8},{0xa6,0xd9},{0x00,0x00}, {0x00,0x00},{0xcd,0xab},{0xcb,0x76},{0x00,0x00},{0xcb,0x77}, {0xa8,0x77},{0x00,0x00},{0xcb,0x74},{0xa8,0x76},{0x00,0x00}, {0xa8,0x79},{0xcb,0x75},{0xa8,0x7b},{0xa8,0x7a},{0xcb,0x78}, {0xa8,0x78},{0x00,0x00},{0x96,0xaf},{0x85,0xf6},{0xaa,0xd1}, {0xaa,0xcf},{0xcd,0xad},{0x88,0x4f},{0xaa,0xce},{0xfc,0xfb}, {0x9f,0xb5},{0x00,0x00},{0xaa,0xd3},{0xaa,0xd5},{0xaa,0xd2}, {0xfa,0xfe},{0xcd,0xb0},{0xcd,0xac},{0xaa,0xd6},{0x00,0x00}, {0xaa,0xd0},{0xa8,0x7c},{0x00,0x00},{0xaa,0xd4},{0xcd,0xaf}, {0xfb,0x4d},{0xfb,0x40},{0xcd,0xae},{0x00,0x00},{0xaa,0xcd}, {0x00,0x00},{0x96,0xcb},{0x96,0xa6},{0x85,0x4d},{0x85,0xf8}, {0x85,0x4e},{0x83,0xd0},{0xd0,0x5b},{0xad,0x47},{0xad,0x48}, {0xd0,0x5d},{0x8a,0x57},{0xd0,0x57},{0xd0,0x5a},{0xd0,0x63}, {0xd0,0x61},{0x00,0x00},{0xad,0x49},{0xd0,0x67},{0xad,0x4c}, {0xd0,0x64},{0xd0,0x5c},{0xd0,0x59},{0x00,0x00},{0x00,0x00}, {0xdb,0x49},{0xd0,0x62},{0xad,0x44},{0xd0,0x65},{0xd0,0x56}, {0xd0,0x5f},{0xad,0x46},{0xad,0x4b},{0xd0,0x60},{0xad,0x4f}, {0xad,0x4d},{0x00,0x00},{0xd0,0x58},{0xad,0x4a},{0x00,0x00}, {0xd0,0x5e},{0xad,0x4e},{0xad,0x45},{0xd0,0x66},{0x8b,0xf8}, {0xfd,0xfb},{0xfd,0xfc},{0x8c,0x4b},{0x8d,0xd5},{0xfd,0xfd}, {0xaf,0xda},{0x00,0x00},{0xaf,0xe3},{0xaf,0xd8},{0xaf,0xd6}, {0xd3,0x6a},{0xaf,0xde},{0xaf,0xdb},{0xd3,0x6c},{0x88,0x4e}, {0x00,0x00},{0xaf,0xdd},{0xd3,0x6b},{0xd3,0x69},{0xd3,0x6e}, {0xaf,0xe2},{0xaf,0xe0},{0xdb,0x48},{0x00,0x00},{0xd3,0x6f}, {0xd3,0x6d},{0xaf,0xd7},{0xfc,0xfc},{0x00,0x00},{0xaf,0xd9}, {0xaf,0xdc},{0xfe,0x48},{0xaf,0xdf},{0x83,0xd1},{0xaf,0xe1}, {0x00,0x00},{0x9f,0xb6},{0x8a,0x59},{0xfd,0xfe},{0x8c,0xda}, {0x8a,0xf4},{0x85,0xf9},{0xfe,0xee},{0x8a,0x56},{0x90,0x7d}, {0xd7,0x4e},{0xb2,0xe4},{0x95,0xa8},{0xd7,0x45},{0xd7,0x47}, {0x85,0xf7},{0xd7,0x48},{0x00,0x00},{0xd7,0x50},{0xd7,0x4c}, {0xd7,0x4a},{0x00,0x00},{0xd7,0x4d},{0xd7,0x51},{0xb2,0xe5}, {0xb2,0xe9},{0xd7,0x46},{0x00,0x00},{0xd7,0x4f},{0x00,0x00}, {0xb2,0xe7},{0x9f,0xb7},{0xb2,0xe6},{0xd7,0x4b},{0xd7,0x49}, {0x00,0x00},{0xb2,0xe3},{0xb2,0xe8},{0xfe,0xef},{0x96,0xa5}, {0x93,0xb0},{0x9f,0xb8},{0x00,0x00},{0xfe,0xf0},{0xa0,0x42}, {0x8a,0x58},{0xb5,0xc8},{0xdb,0x51},{0x00,0x00},{0x00,0x00}, {0xdb,0x4f},{0xb5,0xca},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x9f,0xb9},{0xdb,0x4a},{0xdf,0xa1},{0x00,0x00},{0xb5,0xc9}, {0xdb,0x4e},{0x96,0xab},{0x00,0x00},{0xdb,0x4b},{0xb5,0xc5}, {0xb5,0xcb},{0xdb,0x50},{0xb5,0xc7},{0xdb,0x4d},{0xbb,0x47}, {0xb5,0xc6},{0xdb,0x4c},{0xb5,0xcc},{0xb5,0xc4},{0xb5,0xc3}, {0x9f,0xba},{0x00,0x00},{0x00,0x00},{0x96,0xae},{0x96,0xa2}, {0xdf,0x77},{0xdf,0x75},{0x00,0x00},{0xdf,0x7b},{0xfe,0xf1}, {0xdf,0x73},{0xdf,0xa2},{0xdf,0x78},{0x00,0x00},{0xdf,0x72}, {0xb8,0x7b},{0xb8,0xa3},{0xdf,0x7d},{0x00,0x00},{0xdf,0x76}, {0x00,0x00},{0xb8,0x7e},{0x9d,0xd0},{0xfe,0xf2},{0xb8,0x7c}, {0xdf,0x7e},{0xb8,0x79},{0xb8,0x78},{0xdf,0x79},{0xb8,0x7d}, {0xb5,0xcd},{0x00,0x00},{0xdf,0x7c},{0xdf,0x74},{0xb8,0x7a}, {0xb8,0xa1},{0xb8,0xa2},{0x89,0x54},{0x89,0xae},{0xfe,0xf3}, {0x8c,0x65},{0xbb,0x4c},{0xbb,0x48},{0x00,0x00},{0xbb,0x4d}, {0xe3,0xa6},{0x9f,0xbb},{0x00,0x00},{0xe3,0xa5},{0xe3,0xa7}, {0xbb,0x4a},{0xe3,0xa4},{0xbb,0x4b},{0xe3,0xaa},{0xe3,0xa9}, {0xe3,0xa8},{0x00,0x00},{0xbb,0x49},{0x00,0x00},{0x8a,0xf5}, {0x00,0x00},{0xfe,0xf4},{0x00,0x00},{0xe7,0x41},{0x00,0x00}, {0xe7,0x44},{0xbd,0xa8},{0xe7,0x43},{0xbd,0xa7},{0xbd,0xa3}, {0xbd,0xa4},{0xbd,0xa5},{0xe7,0x40},{0xe6,0xfe},{0xbd,0xa6}, {0x00,0x00},{0xe7,0x42},{0xe6,0xfd},{0x94,0xc7},{0x9f,0xbc}, {0xea,0xe9},{0xea,0xf3},{0xbf,0xb1},{0xbf,0xb0},{0xfe,0xf5}, {0xea,0xed},{0xea,0xef},{0x00,0x00},{0xea,0xea},{0x00,0x00}, {0xea,0xee},{0xea,0xe8},{0xea,0xf1},{0xbf,0xaf},{0xea,0xf0}, {0xea,0xec},{0xfb,0x6e},{0xea,0xf2},{0xfe,0xf6},{0xea,0xeb}, {0xc1,0x74},{0xed,0xe8},{0xed,0xee},{0xc1,0x78},{0xc1,0x7a}, {0xc1,0x77},{0xc1,0x76},{0xfe,0xf7},{0xc1,0x75},{0xc1,0x73}, {0xed,0xe9},{0xed,0xec},{0xc1,0x72},{0xed,0xed},{0xfc,0xfe}, {0xc1,0x79},{0xed,0xeb},{0x00,0x00},{0xed,0xea},{0xc2,0xc0}, {0x00,0x00},{0xc2,0xc1},{0xf0,0xa1},{0xf0,0x7d},{0xf0,0x7e}, {0x93,0x62},{0x00,0x00},{0xf2,0xc2},{0x00,0x00},{0xf2,0xc1}, {0xc3,0xbe},{0xf4,0xb4},{0xc4,0xa4},{0xf4,0xb3},{0x00,0x00}, {0xf5,0xf0},{0xf7,0x45},{0xc5,0xa6},{0xf9,0x43},{0xf9,0x44}, {0xc5,0xd8},{0xa6,0xda},{0x9f,0xbd},{0xaa,0xd7},{0xdb,0x52}, {0xbb,0x4e},{0xc1,0x7b},{0xed,0xef},{0xa6,0xdb},{0x00,0x00}, {0xaf,0xe5},{0xaf,0xe4},{0xdb,0x53},{0x95,0xd3},{0x00,0x00}, {0x00,0x00},{0xea,0xf4},{0xa6,0xdc},{0xad,0x50},{0x00,0x00}, {0xfd,0x42},{0xdb,0x54},{0xdb,0x55},{0xdb,0x56},{0xbb,0x4f}, {0xbf,0xb2},{0xa6,0xdd},{0x00,0x00},{0xaa,0xd8},{0xd0,0x68}, {0xaf,0xe6},{0xd3,0x70},{0xb2,0xea},{0x00,0x00},{0xdb,0x57}, {0xb8,0xa4},{0x8a,0x77},{0xbb,0x50},{0xbf,0xb3},{0xc1,0x7c}, {0xc2,0xc2},{0xf4,0xb5},{0xa6,0xde},{0xaa,0xd9},{0x92,0xd6}, {0x00,0x00},{0xaf,0xe7},{0xd7,0x52},{0xb5,0xce},{0x00,0x00}, {0xbb,0x51},{0xe3,0xab},{0xe7,0x45},{0x93,0xc6},{0x95,0xec}, {0x00,0x00},{0xfd,0x43},{0xa6,0xdf},{0xb5,0xcf},{0xdf,0xa3}, {0xbb,0x52},{0xa6,0xe0},{0xcd,0xb1},{0xd0,0x69},{0xad,0x51}, {0x8f,0xc2},{0x00,0x00},{0xd3,0x72},{0xfb,0x53},{0x00,0x00}, {0xaf,0xea},{0xfe,0xf8},{0xaf,0xe8},{0xaf,0xe9},{0xaf,0xeb}, {0xfe,0xf9},{0xfe,0xfa},{0xd3,0x71},{0x8c,0x4c},{0x89,0x56}, {0xd7,0x57},{0xd7,0x54},{0xd7,0x56},{0xb2,0xeb},{0xb2,0xed}, {0xb2,0xec},{0xd7,0x53},{0xb2,0xee},{0xd7,0x55},{0x90,0x5b}, {0xdb,0x58},{0xdb,0x59},{0xfe,0xfb},{0xdb,0x5a},{0xdf,0xa6}, {0x00,0x00},{0xdf,0xa7},{0x00,0x00},{0xdf,0xa5},{0xdf,0xa8}, {0x00,0x00},{0xb8,0xa5},{0x00,0x00},{0xdf,0xa4},{0x00,0x00}, {0xbb,0x53},{0x00,0x00},{0x00,0x00},{0xe7,0x4a},{0xe7,0x46}, {0xe7,0x49},{0xe7,0x4b},{0xe7,0x48},{0xe7,0x47},{0x9f,0xbe}, {0xea,0xf5},{0xea,0xf6},{0xea,0xf7},{0xbf,0xb4},{0xbf,0xb5}, {0xed,0xf1},{0xed,0xf0},{0xed,0xf2},{0x94,0xc8},{0xf0,0xa3}, {0xf0,0xa2},{0x00,0x00},{0xf2,0xc4},{0xfe,0xfc},{0xf2,0xc5}, {0xf2,0xc3},{0x9f,0xbf},{0xc4,0xa5},{0x00,0x00},{0xf4,0xb6}, {0xf4,0xb7},{0xfe,0xfd},{0xf7,0x46},{0xf7,0xef},{0xf8,0xbb}, {0xa6,0xe1},{0xa8,0x7d},{0x8a,0x5c},{0xc1,0x7d},{0xa6,0xe2}, {0x8d,0x5b},{0xd7,0x58},{0xdb,0x5b},{0x82,0x45},{0xc6,0x41}, {0xca,0x4a},{0x9c,0xd2},{0x8b,0xb7},{0x9f,0xc0},{0xca,0x4b}, {0xca,0x4d},{0xa6,0xe3},{0xca,0x4e},{0xca,0x4c},{0x00,0x00}, {0x85,0xeb},{0xcb,0xa2},{0xcb,0xa3},{0xcb,0x7b},{0x00,0x00}, {0x9f,0xc1},{0xfe,0xfe},{0x00,0x00},{0xcb,0xa1},{0xa8,0xa1}, {0x00,0x00},{0xa8,0xa2},{0xcb,0x7c},{0xcb,0x7a},{0xcb,0x79}, {0xcb,0x7d},{0xa8,0x7e},{0xcb,0x7e},{0xd0,0x6a},{0x00,0x00}, {0x00,0x00},{0x8e,0xf6},{0xcd,0xb6},{0xaa,0xdc},{0xcd,0xb5}, {0xcd,0xb7},{0x89,0x59},{0xaa,0xdb},{0xcd,0xbc},{0xaa,0xdf}, {0xcd,0xb2},{0xcd,0xc0},{0xcd,0xc6},{0xaa,0xe6},{0xcd,0xc3}, {0xaa,0xe3},{0x8c,0x4f},{0xcd,0xb9},{0xcd,0xbf},{0xcd,0xc1}, {0xfb,0xa5},{0xcd,0xb4},{0xaa,0xe2},{0xaa,0xdd},{0xcd,0xba}, {0xaa,0xe4},{0xaa,0xe7},{0xaa,0xe1},{0x00,0x00},{0xaa,0xda}, {0xcd,0xbe},{0xcd,0xb8},{0xcd,0xc5},{0xaa,0xe9},{0xaa,0xe5}, {0xaa,0xe0},{0xcd,0xbd},{0xaf,0xec},{0xcd,0xbb},{0xaa,0xde}, {0xaa,0xe8},{0x9f,0xc2},{0xcd,0xb3},{0x8e,0xca},{0xcd,0xc2}, {0xcd,0xc4},{0x96,0xbe},{0x91,0x40},{0x00,0x00},{0x85,0xfb}, {0x8f,0xe1},{0x00,0x00},{0x91,0x41},{0x84,0x79},{0x85,0x51}, {0x87,0x4b},{0x83,0x78},{0x84,0xf7},{0xfd,0x5f},{0xad,0x62}, {0xad,0x5c},{0xad,0x64},{0xad,0x61},{0xd0,0x71},{0xd0,0x74}, {0xad,0x5d},{0x91,0x42},{0xd0,0x6b},{0x00,0x00},{0xad,0x56}, {0xad,0x60},{0x00,0x00},{0xad,0x63},{0xad,0x65},{0xd0,0xa2}, {0xd0,0x77},{0x9f,0xc3},{0xad,0x55},{0xd0,0xa1},{0xad,0x59}, {0xad,0x57},{0xad,0x52},{0xd0,0x6f},{0x00,0x00},{0xd0,0x7e}, {0xd0,0x73},{0xd0,0x76},{0xd0,0xa5},{0x9f,0xc4},{0xad,0x66}, {0xd0,0x7d},{0xad,0x5e},{0xd0,0x78},{0xd0,0xa4},{0xd0,0x75}, {0xd0,0x79},{0xd0,0x7c},{0x96,0xa3},{0x9f,0xc5},{0xd0,0x6d}, {0xd0,0xa3},{0xd0,0x7b},{0x9f,0xc6},{0xfd,0x5d},{0xd0,0x6c}, {0x9f,0xc7},{0xd0,0x70},{0xad,0x5f},{0xad,0x5a},{0xad,0x53}, {0xad,0x58},{0xad,0x54},{0xad,0x67},{0xd0,0x6e},{0xd3,0xa5}, {0xad,0x5b},{0x00,0x00},{0x9f,0xc8},{0xd0,0x7a},{0xce,0x41}, {0x92,0xa7},{0x8f,0xe0},{0x00,0x00},{0x8e,0xc9},{0x00,0x00}, {0x00,0x00},{0x85,0xc3},{0x8e,0x46},{0xd3,0xa8},{0xaf,0xfa}, {0x91,0x43},{0xd3,0x76},{0x91,0x44},{0xd3,0xa3},{0xd3,0x7d}, {0x9f,0xc9},{0xd3,0xb2},{0x00,0x00},{0xd3,0xaa},{0x00,0x00}, {0xd3,0x7e},{0x91,0x45},{0xd3,0xa9},{0xd3,0x78},{0xd3,0x7c}, {0xd3,0xb5},{0xaf,0xfd},{0xd3,0xad},{0xd3,0xa4},{0xaf,0xed}, {0xd3,0xb3},{0xd3,0x74},{0x00,0x00},{0xd3,0xac},{0x00,0x00}, {0xaf,0xfc},{0xaf,0xf7},{0xd3,0x73},{0xaf,0xf5},{0xaf,0xf4}, {0xaf,0xf9},{0xd3,0xab},{0xaf,0xf1},{0xaf,0xf8},{0xd0,0x72}, {0xdb,0x5c},{0xd3,0xa6},{0x9f,0xca},{0x00,0x00},{0xd3,0x7a}, {0xaf,0xfb},{0xd3,0x7b},{0xd3,0xa1},{0xaf,0xfe},{0xd3,0x75}, {0xd3,0xaf},{0x91,0x46},{0xd3,0xae},{0xd3,0xb6},{0xaf,0xf3}, {0xaf,0xf0},{0xd3,0xb4},{0xd3,0xb0},{0xd3,0xa7},{0xd3,0xa2}, {0xaf,0xf6},{0xaf,0xf2},{0xd3,0x77},{0xaf,0xee},{0xd3,0xb1}, {0xaf,0xef},{0x00,0x00},{0xd3,0x79},{0x9f,0xcb},{0x93,0x54}, {0x00,0x00},{0x84,0x75},{0x91,0x47},{0x8e,0xc7},{0x00,0x00}, {0x8e,0xf4},{0x8f,0x5f},{0x8a,0xf9},{0x89,0x57},{0x91,0x48}, {0x86,0xd1},{0x85,0xfa},{0x8e,0x73},{0x86,0xe1},{0x86,0xdf}, {0x8e,0xf2},{0x8f,0x7b},{0x87,0x4a},{0x88,0x51},{0x91,0x49}, {0x8e,0x4d},{0x91,0x4a},{0x8b,0xb9},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xd7,0x5e},{0xd7,0x60},{0xd7,0x65},{0xd7,0x79}, {0xb2,0xfc},{0xb2,0xf2},{0x00,0x00},{0xd7,0x5d},{0xb2,0xfd}, {0xb2,0xfe},{0xd7,0x68},{0xd7,0x6f},{0xd7,0x75},{0x00,0x00}, {0xd7,0x62},{0x00,0x00},{0xd7,0x69},{0x00,0x00},{0x87,0x48}, {0xb3,0x40},{0xd7,0x77},{0xd7,0x72},{0xb2,0xfa},{0xb2,0xf8}, {0xd7,0x6e},{0xd7,0x6a},{0xd7,0x5c},{0xb2,0xef},{0xd7,0x61}, {0xd7,0x59},{0x9f,0xcc},{0xb2,0xf7},{0xb2,0xf9},{0xd7,0x66}, {0xd7,0x63},{0xb2,0xf4},{0xd7,0x73},{0xb2,0xf1},{0xd7,0x64}, {0xd7,0x7a},{0xd7,0x6c},{0x91,0x4b},{0xd7,0x6b},{0xb2,0xf0}, {0x91,0x4c},{0xb2,0xfb},{0x00,0x00},{0xb2,0xf3},{0xd7,0x5a}, {0xd7,0x5f},{0xd7,0x70},{0xd7,0x76},{0xb3,0x41},{0xd7,0x5b}, {0xd7,0x67},{0xd7,0x6d},{0xb2,0xf6},{0x9f,0xcd},{0x00,0x00}, {0xd7,0x78},{0xd7,0x71},{0xd7,0x74},{0x85,0x50},{0x88,0x50}, {0x8e,0x7d},{0x85,0xfd},{0x91,0x4d},{0x8f,0x60},{0x89,0xf7}, {0x8e,0xf5},{0x87,0xf3},{0x8c,0xc2},{0x00,0x00},{0x91,0x4e}, {0xb2,0xf5},{0xfb,0xad},{0xdb,0x6c},{0xdb,0x60},{0xb5,0xd7}, {0xdb,0x7d},{0xdb,0xa7},{0xdb,0xaa},{0xb5,0xd5},{0xdb,0x68}, {0xdb,0xa3},{0xdb,0x69},{0xdb,0x77},{0xb5,0xe2},{0xdb,0x73}, {0xb5,0xdf},{0x9f,0xce},{0xdb,0x74},{0xdb,0x5d},{0x00,0x00}, {0xdb,0xa4},{0x00,0x00},{0xfe,0x52},{0xb5,0xe8},{0xdb,0xa1}, {0xdb,0x75},{0xdb,0xac},{0xdb,0x70},{0xdf,0xc8},{0x00,0x00}, {0xdb,0xaf},{0xb5,0xe6},{0xdb,0x6e},{0xdb,0x7a},{0xb5,0xe9}, {0xb5,0xd4},{0xdb,0x72},{0xdb,0xad},{0xdb,0x6b},{0xdb,0x64}, {0xdb,0x6f},{0x00,0x00},{0xdb,0x63},{0xdb,0x61},{0xb5,0xd0}, {0xdb,0xa5},{0xdb,0x6a},{0xdb,0xa8},{0x9f,0xcf},{0xdb,0xa9}, {0xb5,0xd8},{0xb5,0xdd},{0xb5,0xd9},{0xb5,0xe1},{0xdb,0x7e}, {0xb5,0xda},{0xdb,0x76},{0xdb,0x66},{0x91,0x4f},{0xb5,0xd2}, {0xdb,0x5e},{0xdb,0xa2},{0xdb,0xab},{0xdb,0x65},{0xb5,0xe0}, {0xdb,0xb0},{0xdb,0x71},{0x00,0x00},{0xdb,0x6d},{0x00,0x00}, {0xb5,0xd1},{0xb5,0xe5},{0x9f,0xd0},{0xdb,0x7c},{0xb5,0xe7}, {0x00,0x00},{0xdb,0x78},{0xb5,0xdc},{0xb5,0xd6},{0xb5,0xde}, {0xb5,0xd3},{0xb5,0xe4},{0xdb,0x79},{0xdb,0x67},{0xdb,0x7b}, {0xdb,0x62},{0xdb,0xa6},{0x9f,0xd1},{0x00,0x00},{0x9f,0xd2}, {0x00,0x00},{0x96,0xa7},{0x00,0x00},{0x00,0x00},{0xdb,0xae}, {0x96,0xbd},{0x8c,0xfd},{0x00,0x00},{0x00,0x00},{0xfd,0x63}, {0x9f,0xd3},{0x94,0xc9},{0xdb,0x5f},{0x89,0x5b},{0x89,0xf1}, {0x89,0x4d},{0x89,0x58},{0x8a,0xf7},{0xdf,0xc7},{0x91,0x50}, {0xdf,0xdd},{0xb8,0x55},{0xdf,0xcc},{0x9f,0xd4},{0xdf,0xca}, {0xdf,0xb5},{0xb8,0xa9},{0xdf,0xc5},{0xdf,0xd9},{0xdf,0xc1}, {0xb8,0xb1},{0xdf,0xd8},{0xdf,0xbf},{0xb5,0xe3},{0xdf,0xcf}, {0xdf,0xc0},{0xdf,0xd6},{0xb8,0xb0},{0xb8,0xa8},{0x9f,0xd5}, {0xdf,0xaa},{0xdf,0xb2},{0x00,0x00},{0xdf,0xcb},{0xdf,0xc3}, {0xdf,0xdc},{0xdf,0xc6},{0xb8,0xb6},{0xdf,0xd7},{0x91,0x51}, {0xb8,0xad},{0x9f,0xd6},{0xdf,0xc9},{0xdf,0xd1},{0xdf,0xb6}, {0xdf,0xd0},{0x00,0x00},{0xdf,0xe1},{0xdf,0xb1},{0xdf,0xd2}, {0x9f,0xd7},{0xdf,0xdf},{0x9f,0xd8},{0xdf,0xab},{0xb5,0xdb}, {0x9f,0xd9},{0xdf,0xb9},{0xdf,0xb8},{0xb8,0xaf},{0x91,0x52}, {0xdf,0xbc},{0xdf,0xbe},{0xdf,0xcd},{0xdf,0xde},{0xb8,0xb2}, {0x91,0x53},{0xb8,0xb3},{0x9f,0xda},{0xdf,0xb0},{0xb8,0xab}, {0xdf,0xb4},{0xdf,0xda},{0xb8,0xb4},{0x00,0x00},{0xb8,0xac}, {0xb8,0xae},{0xb8,0xb5},{0xdf,0xe0},{0xdf,0xd3},{0xdf,0xce}, {0x95,0xf5},{0x9f,0xdb},{0xdf,0xbb},{0xdf,0xba},{0xb8,0xaa}, {0xdf,0xac},{0xb8,0xa7},{0xdf,0xc4},{0xdf,0xad},{0xdf,0xc2}, {0x96,0xc0},{0x00,0x00},{0xdf,0xb7},{0xdf,0xdb},{0x9f,0xdc}, {0x9f,0xdd},{0x00,0x00},{0xb8,0xa6},{0x00,0x00},{0x91,0x54}, {0x00,0x00},{0xdf,0xb3},{0x8e,0xf1},{0x91,0x55},{0x8e,0xf3}, {0x00,0x00},{0x88,0x52},{0x8e,0xc8},{0xdf,0xaf},{0xdf,0xd5}, {0xdf,0xae},{0xbb,0x60},{0xe3,0xd3},{0x9f,0xde},{0x9f,0xdf}, {0xe3,0xc2},{0x00,0x00},{0x9f,0xe0},{0xe3,0xac},{0xe3,0xca}, {0xbb,0x58},{0xe3,0xbb},{0xe3,0xc5},{0xbb,0x5b},{0xe3,0xbe}, {0xbb,0x59},{0xe3,0xaf},{0xe3,0xcd},{0xe3,0xae},{0xe3,0xc1}, {0x9f,0xe1},{0xe3,0xad},{0x00,0x00},{0x00,0x00},{0xe3,0xbf}, {0xe3,0xc8},{0xe3,0xc6},{0xe3,0xba},{0xe3,0xb5},{0xe3,0xb3}, {0xfd,0x66},{0xe3,0xb4},{0xe3,0xc7},{0xe3,0xd2},{0xe3,0xbc}, {0xbb,0x5a},{0x00,0x00},{0xe3,0xb7},{0x00,0x00},{0xe3,0xcb}, {0x00,0x00},{0xbb,0x5d},{0xe3,0xb6},{0xe3,0xb0},{0xe3,0xc0}, {0xbb,0x61},{0x96,0xbc},{0x9f,0xe2},{0xbb,0x55},{0xbb,0x5e}, {0xe3,0xb8},{0xe3,0xb2},{0x00,0x00},{0xbb,0x57},{0xdf,0xd4}, {0xbb,0x56},{0xe3,0xc3},{0x00,0x00},{0xbb,0x54},{0xbb,0x63}, {0xbb,0x5c},{0xe3,0xc4},{0xe3,0xb9},{0xe3,0xb1},{0xe3,0xcc}, {0xe3,0xbd},{0xbb,0x62},{0xe3,0xd0},{0xbb,0x5f},{0xe3,0xcf}, {0x00,0x00},{0xe3,0xc9},{0xe3,0xce},{0x00,0x00},{0x94,0xca}, {0xfd,0x65},{0xe3,0xd1},{0x91,0x56},{0x8a,0xf8},{0x9f,0xe3}, {0x8a,0x5e},{0x90,0x6c},{0x9f,0xe4},{0x9f,0xe5},{0x91,0x57}, {0x9f,0xe6},{0x8f,0xaa},{0x8c,0xbd},{0xe7,0x73},{0xe7,0x74}, {0xe7,0x67},{0xe7,0x66},{0xe7,0x62},{0xbd,0xb4},{0x00,0x00}, {0xbd,0xac},{0xe7,0x76},{0xe7,0x75},{0xdf,0xa9},{0xe7,0x5f}, {0xe7,0x63},{0xe7,0x5d},{0x00,0x00},{0xe7,0x70},{0xe7,0x61}, {0x9f,0xe7},{0xe7,0x77},{0xe7,0x5a},{0xe7,0x58},{0xe7,0x64}, {0xe7,0x6e},{0xe7,0x69},{0xbd,0xb6},{0xe7,0x4f},{0x00,0x00}, {0xe7,0x6d},{0x9f,0xe8},{0x00,0x00},{0x9f,0xe9},{0xbd,0xb7}, {0xdf,0xbd},{0xe7,0x5b},{0xe7,0x52},{0xe7,0x55},{0xe7,0x7b}, {0xe7,0x5c},{0xe7,0x53},{0xe7,0x51},{0xe7,0x4e},{0x9f,0xea}, {0xbd,0xb0},{0xe7,0x65},{0xbd,0xaf},{0xbd,0xb3},{0xe7,0x60}, {0xe7,0x68},{0xbd,0xa9},{0xe7,0x78},{0xe7,0x7c},{0xbd,0xab}, {0x00,0x00},{0xe7,0x57},{0xe7,0x6b},{0xe7,0x6f},{0xe7,0x54}, {0xe7,0x79},{0xbd,0xb2},{0x00,0x00},{0xbd,0xb1},{0xe7,0x4c}, {0xbd,0xb5},{0xe7,0x72},{0xe7,0x56},{0xe7,0x6a},{0xe7,0x50}, {0xe7,0x5e},{0xe7,0x59},{0xbd,0xad},{0xbd,0xae},{0xe7,0x6c}, {0xe7,0x7d},{0xe7,0x7a},{0xe7,0x71},{0x00,0x00},{0x9f,0xeb}, {0xfe,0x4c},{0x93,0x60},{0x00,0x00},{0x8a,0x5d},{0x91,0x58}, {0x90,0x46},{0x8c,0x4e},{0xe7,0x4d},{0x8c,0x4d},{0xbd,0xaa}, {0xeb,0x49},{0x00,0x00},{0xeb,0x40},{0xeb,0x43},{0x9f,0xed}, {0xbf,0xbb},{0xeb,0x45},{0xea,0xf9},{0xeb,0x41},{0xeb,0x47}, {0xbf,0xb8},{0xbf,0xbc},{0xbf,0xb6},{0xfd,0x68},{0x9f,0xee}, {0xea,0xfb},{0xeb,0x4c},{0x00,0x00},{0x00,0x00},{0xeb,0x46}, {0x9f,0xef},{0xea,0xfc},{0xeb,0x55},{0xeb,0x4f},{0xea,0xf8}, {0xee,0x46},{0xea,0xfe},{0xbf,0xb7},{0x91,0x59},{0xeb,0x4a}, {0x00,0x00},{0xeb,0x54},{0xbf,0xbf},{0x9f,0xf0},{0xeb,0x51}, {0xea,0xfd},{0xeb,0x44},{0xeb,0x48},{0xeb,0x42},{0xeb,0x56}, {0xeb,0x53},{0xeb,0x50},{0xbf,0xb9},{0xbf,0xba},{0xbf,0xbe}, {0xea,0xfa},{0xeb,0x57},{0xbf,0xbd},{0xeb,0x4d},{0x9f,0xf1}, {0x9f,0xf2},{0xeb,0x4b},{0x8f,0xe2},{0x9f,0xf3},{0x8c,0x51}, {0xeb,0x4e},{0xee,0x53},{0xee,0x40},{0xee,0x45},{0xee,0x52}, {0xee,0x44},{0xed,0xfb},{0xee,0x41},{0x00,0x00},{0xc1,0xa2}, {0x00,0x00},{0xed,0xf4},{0xee,0x4d},{0xee,0x4f},{0xed,0xf3}, {0xc1,0xa1},{0xee,0x51},{0xee,0x49},{0xc1,0xa8},{0xee,0x50}, {0xee,0x42},{0xc1,0xaa},{0xed,0xf9},{0xeb,0x52},{0xee,0x4a}, {0xee,0x47},{0xed,0xf5},{0xee,0x55},{0xc1,0xa4},{0x00,0x00}, {0x9d,0x76},{0xc1,0xa5},{0xed,0xf7},{0xee,0x48},{0x91,0x5a}, {0xee,0x54},{0xee,0x4b},{0xed,0xfd},{0xc1,0xa7},{0xc1,0xa3}, {0xee,0x4c},{0xed,0xfe},{0xee,0x56},{0xed,0xf8},{0xee,0x43}, {0xee,0x4e},{0xed,0xfa},{0xed,0xfc},{0x00,0x00},{0xc2,0xcb}, {0xed,0xf6},{0xc1,0xa9},{0xc2,0xc4},{0xc1,0x7e},{0x91,0x5b}, {0x93,0xd6},{0x00,0x00},{0x82,0x7e},{0xc1,0xa6},{0xc2,0xc8}, {0xf0,0xb3},{0x00,0x00},{0xf0,0xa9},{0xf0,0xa4},{0xf0,0xaa}, {0xf0,0xb4},{0xf0,0xb8},{0xf0,0xb7},{0xc2,0xca},{0xc2,0xc9}, {0x00,0x00},{0x00,0x00},{0xf0,0xab},{0xf0,0xb9},{0xf0,0xae}, {0xf0,0xa6},{0x91,0x5c},{0xf0,0xa8},{0xf0,0xa7},{0xf0,0xad}, {0xf0,0xb2},{0xf0,0xa5},{0xf0,0xac},{0xf0,0xb1},{0xc2,0xc7}, {0x00,0x00},{0xf0,0xaf},{0x00,0x00},{0xc2,0xc5},{0xf0,0xb0}, {0xc2,0xc3},{0xc2,0xc6},{0xf2,0xd5},{0xf0,0xb5},{0x8c,0xa4}, {0x00,0x00},{0xc3,0xc2},{0x9f,0xf4},{0xf2,0xcd},{0xf2,0xd1}, {0xf2,0xc9},{0xf2,0xcc},{0x00,0x00},{0xf2,0xd4},{0xc3,0xc0}, {0xf2,0xd9},{0xf2,0xd2},{0x9f,0xf5},{0xf2,0xca},{0xf2,0xda}, {0xf2,0xd3},{0xc3,0xc3},{0xc3,0xc4},{0xf2,0xd7},{0x00,0x00}, {0xf2,0xcb},{0xc3,0xbf},{0xc3,0xc1},{0xf2,0xc6},{0xf2,0xce}, {0xf2,0xc8},{0x9f,0xf6},{0xf2,0xd8},{0xf2,0xd6},{0xf2,0xc7}, {0xf2,0xcf},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xf4,0xbe}, {0xc3,0xc5},{0xf2,0xd0},{0xc4,0xa7},{0xc4,0xa9},{0xc4,0xa6}, {0x9f,0xf7},{0xf4,0xc3},{0xf4,0xbb},{0xf4,0xb9},{0xf4,0xbd}, {0xf4,0xba},{0xfd,0x6a},{0x00,0x00},{0xf4,0xbf},{0xf4,0xc1}, {0xc4,0xaa},{0xc4,0xac},{0x00,0x00},{0xf4,0xc0},{0xc4,0xad}, {0xc4,0xab},{0xf4,0xc2},{0x9f,0xf8},{0x00,0x00},{0x9f,0xf9}, {0xfd,0x6b},{0xc4,0xa8},{0x00,0x00},{0x91,0x5d},{0x9f,0xfa}, {0x00,0x00},{0x91,0x5e},{0xc4,0xf4},{0xf5,0xf1},{0xf5,0xf7}, {0xc4,0xf6},{0xf4,0xbc},{0xf5,0xf6},{0x00,0x00},{0xf5,0xfd}, {0xf5,0xf4},{0xf5,0xfb},{0xf5,0xfa},{0xf4,0xb8},{0xf5,0xf5}, {0xf0,0xb6},{0xf5,0xfe},{0xf5,0xf3},{0xf5,0xf8},{0x9f,0xfb}, {0xf5,0xfc},{0xf5,0xf2},{0x00,0x00},{0xf7,0x4a},{0xc4,0xf5}, {0xf5,0xf9},{0xfb,0xae},{0x94,0xcb},{0xf7,0xf4},{0xf7,0x4b}, {0xf7,0x49},{0xf7,0x47},{0xf7,0x48},{0xf7,0x4c},{0x00,0x00}, {0xc5,0xd9},{0xf7,0xf2},{0xf7,0xf0},{0xf7,0xf5},{0xf7,0xf3}, {0x00,0x00},{0xf7,0xf6},{0xc5,0xda},{0xf7,0xf1},{0x00,0x00}, {0x9f,0xfc},{0xf8,0xbc},{0x00,0x00},{0x9f,0xfd},{0xf9,0x45}, {0xf9,0x46},{0xf9,0x47},{0x00,0x00},{0x00,0x00},{0xf9,0xc7}, {0xf9,0xbd},{0xca,0x4f},{0xaa,0xea},{0x86,0x40},{0xad,0x68}, {0x87,0xcb},{0xd3,0xb8},{0xd3,0xb7},{0xb0,0x40},{0xb3,0x42}, {0xd7,0x7c},{0x00,0x00},{0x00,0x00},{0xd7,0x7b},{0x85,0x52}, {0xb5,0xea},{0xb8,0xb8},{0x00,0x00},{0xb8,0xb7},{0xb8,0xb9}, {0x00,0x00},{0xe3,0xd4},{0xe7,0x7e},{0xeb,0x58},{0xeb,0x5a}, {0xeb,0x59},{0x00,0x00},{0xc1,0xab},{0xee,0x57},{0xf0,0xba}, {0xf9,0xa5},{0xa6,0xe4},{0x95,0x78},{0xcd,0xc9},{0xcd,0xca}, {0xcd,0xc8},{0xcd,0xc7},{0xaa,0xeb},{0x9f,0xfe},{0xd0,0xa9}, {0xd0,0xa7},{0x00,0x00},{0x00,0x00},{0xd0,0xa6},{0x00,0x00}, {0xad,0x69},{0xad,0x6b},{0xad,0x6a},{0xd0,0xa8},{0x8a,0xaf}, {0x88,0x53},{0x8f,0xc4},{0x87,0x4c},{0x8b,0xba},{0x89,0x5a}, {0x00,0x00},{0x00,0x00},{0xd3,0xc4},{0xd3,0xc1},{0xd3,0xbf}, {0x00,0x00},{0x00,0x00},{0xb0,0x41},{0xd3,0xc2},{0xb0,0x46}, {0xd3,0xbc},{0xd3,0xcb},{0x00,0x00},{0xd3,0xcd},{0xd3,0xbd}, {0xfe,0xbb},{0xb0,0x43},{0xd3,0xce},{0xd3,0xc9},{0xd3,0xbb}, {0xd3,0xc0},{0xd3,0xca},{0xd3,0xc6},{0xd3,0xc3},{0x00,0x00}, {0xb0,0x48},{0xd3,0xcc},{0xd3,0xbe},{0x00,0x00},{0xfe,0xbc}, {0xd3,0xc7},{0xd3,0xb9},{0xb0,0x47},{0xb0,0x44},{0xd3,0xc5}, {0x00,0x00},{0xd3,0xc8},{0xd3,0xba},{0xb0,0x45},{0xb0,0x42}, {0x94,0xcc},{0x86,0x43},{0xfe,0xbd},{0x00,0x00},{0xb3,0x4c}, {0xd7,0xa5},{0xb3,0x4b},{0xfe,0xbe},{0xd7,0xa8},{0xd7,0xab}, {0xb3,0x48},{0xb3,0x46},{0xd7,0x7e},{0xd7,0xa9},{0xd7,0xa7}, {0xd7,0xa4},{0xd7,0xac},{0xd7,0xad},{0xd7,0xaf},{0xd7,0xb0}, {0xd7,0x7d},{0xb3,0x45},{0xd7,0xa2},{0xd7,0xa1},{0xd7,0xae}, {0xb3,0x47},{0xd7,0xa3},{0xb3,0x49},{0xb3,0x44},{0xd7,0xa6}, {0xb3,0x4d},{0x8c,0xfe},{0xb3,0x4a},{0xd7,0xaa},{0x92,0xac}, {0x82,0x4c},{0x8f,0xc3},{0xb5,0xf1},{0xdb,0xbf},{0x00,0x00}, {0xdb,0xb4},{0xb5,0xee},{0x00,0x00},{0xdf,0xe7},{0xdb,0xbd}, {0xdb,0xb1},{0xb5,0xec},{0xdb,0xb6},{0xb5,0xef},{0xdb,0xba}, {0xdb,0xb8},{0xb5,0xf2},{0xb5,0xeb},{0x00,0x00},{0x00,0x00}, {0xdb,0xb2},{0xdb,0xb5},{0xb5,0xf0},{0x00,0x00},{0xdb,0xb3}, {0x00,0x00},{0xdb,0xbe},{0xdb,0xbc},{0xdb,0xb7},{0xdb,0xb9}, {0xdb,0xbb},{0xb5,0xed},{0x8d,0x72},{0x94,0xcd},{0x8f,0x61}, {0x8e,0x4e},{0x8a,0xfa},{0x8e,0xf7},{0x8f,0xe3},{0xdf,0xe8}, {0xdf,0xee},{0xdf,0xe4},{0xdf,0xea},{0xb8,0xba},{0xdf,0xe6}, {0xb8,0xc0},{0x00,0x00},{0x00,0x00},{0xb8,0xbf},{0x00,0x00}, {0xb8,0xbe},{0xdf,0xed},{0xb8,0xc1},{0xb8,0xc2},{0xdf,0xe3}, {0xdf,0xf0},{0xb8,0xc3},{0xb8,0xbd},{0xb8,0xbc},{0xdf,0xec}, {0xb8,0xc4},{0xdf,0xe2},{0xdf,0xe5},{0xdf,0xef},{0xdf,0xeb}, {0x00,0x00},{0x00,0x00},{0xe3,0xf4},{0xe3,0xe9},{0xb8,0xbb}, {0x00,0x00},{0x91,0x60},{0x00,0x00},{0x88,0x54},{0xbb,0x6a}, {0xe3,0xdd},{0xe3,0xf2},{0xe3,0xde},{0xbb,0x65},{0x00,0x00}, {0xe3,0xdb},{0x00,0x00},{0xe3,0xe4},{0xe3,0xdc},{0xbb,0x67}, {0xe3,0xd6},{0xe3,0xf1},{0xbb,0x68},{0xe3,0xee},{0xe3,0xef}, {0xe3,0xd7},{0xbb,0x6d},{0xe3,0xe6},{0x00,0x00},{0xe3,0xe0}, {0xe3,0xe7},{0xe3,0xda},{0x00,0x00},{0xe3,0xf3},{0xe3,0xeb}, {0xe3,0xe5},{0xe3,0xd5},{0xbb,0x69},{0xe3,0xec},{0x00,0x00}, {0xbb,0x6c},{0xe3,0xf0},{0x00,0x00},{0xe3,0xea},{0xbb,0x66}, {0xe3,0xe8},{0x00,0x00},{0xe3,0xe2},{0xbb,0x64},{0xe3,0xd9}, {0xe3,0xe1},{0xe3,0xed},{0xe3,0xdf},{0x00,0x00},{0x00,0x00}, {0xe3,0xe3},{0x8b,0xbb},{0x8a,0x61},{0x8a,0xfb},{0x00,0x00}, {0x82,0xa2},{0xbd,0xc1},{0xdf,0xe9},{0xe7,0xb2},{0xe7,0xbb}, {0xe7,0xb1},{0xe7,0xad},{0xe7,0xaa},{0xbd,0xc2},{0xe7,0xa8}, {0xbb,0x6b},{0xe7,0xa1},{0xbd,0xc0},{0xe7,0xa7},{0xbd,0xbf}, {0xe7,0xac},{0xe7,0xa9},{0xe7,0xb9},{0xe7,0xb4},{0xe7,0xae}, {0xe7,0xb3},{0xbd,0xbb},{0xe7,0xab},{0xe7,0xbe},{0xe7,0xa2}, {0xe7,0xa3},{0xe7,0xba},{0xbd,0xbc},{0xe7,0xbf},{0xbd,0xbe}, {0xe7,0xc0},{0xe7,0xb0},{0xe3,0xd8},{0xe7,0xb6},{0xe7,0xaf}, {0xe7,0xb8},{0xe7,0xb5},{0x91,0x61},{0xfd,0x45},{0x00,0x00}, {0xe7,0xa6},{0xbd,0xb9},{0xe7,0xbd},{0xbd,0xba},{0xe7,0xa4}, {0xbd,0xbd},{0xeb,0x64},{0xe7,0xb7},{0xe7,0xbc},{0x8a,0x60}, {0x91,0x62},{0x8f,0xe4},{0x82,0x75},{0x00,0x00},{0xeb,0x61}, {0xbd,0xb8},{0xbf,0xc0},{0xeb,0x6b},{0xeb,0x67},{0xfb,0x6c}, {0xeb,0x65},{0xeb,0x60},{0xeb,0x6f},{0x00,0x00},{0x91,0x63}, {0xfd,0x47},{0xbf,0xc4},{0x00,0x00},{0xeb,0x5c},{0xeb,0x68}, {0xeb,0x69},{0xeb,0x5f},{0xeb,0x5e},{0xeb,0x6c},{0x00,0x00}, {0xeb,0x62},{0xeb,0x5d},{0xeb,0x63},{0x00,0x00},{0xeb,0x6e}, {0xeb,0x5b},{0xeb,0x6d},{0xeb,0x6a},{0xbf,0xc2},{0xbf,0xc1}, {0x00,0x00},{0x00,0x00},{0xbf,0xc3},{0xeb,0x66},{0xf0,0xcb}, {0xfe,0xbf},{0x00,0x00},{0x00,0x00},{0x91,0x64},{0xfd,0x46}, {0xee,0x59},{0xc1,0xb1},{0xee,0x5d},{0xee,0x5a},{0xee,0x61}, {0xee,0x67},{0xee,0x5c},{0xfe,0xc0},{0xee,0x70},{0xc1,0xae}, {0xee,0x6a},{0xee,0x5f},{0xee,0x6b},{0xee,0x66},{0xee,0x6d}, {0xee,0x5e},{0xc1,0xb3},{0xc1,0xb2},{0xee,0x60},{0xee,0x6e}, {0xee,0x58},{0xee,0x6c},{0xc1,0xac},{0xfd,0x49},{0xee,0x64}, {0xee,0x63},{0xee,0x68},{0xee,0x5b},{0xc1,0xb0},{0x91,0x65}, {0xc1,0xb4},{0xee,0x62},{0xee,0x69},{0xc1,0xb5},{0xee,0x65}, {0x00,0x00},{0x96,0xc7},{0x00,0x00},{0x91,0x66},{0xc1,0xad}, {0xc1,0xaf},{0xf0,0xc7},{0xf0,0xc5},{0x00,0x00},{0xfd,0x4c}, {0xf0,0xcc},{0xf0,0xc9},{0xf0,0xcd},{0xfe,0xc5},{0xf0,0xbe}, {0xf0,0xc6},{0xf0,0xd1},{0xee,0x6f},{0xf0,0xc2},{0xc2,0xcf}, {0xe7,0xa5},{0xf0,0xbd},{0xf0,0xca},{0xf0,0xc4},{0xf0,0xc1}, {0xf0,0xbc},{0xf0,0xbb},{0xf0,0xd0},{0x00,0x00},{0xf0,0xc0}, {0xf0,0xbf},{0xc2,0xcd},{0xf0,0xc8},{0xfb,0xab},{0xc2,0xcc}, {0x00,0x00},{0x00,0x00},{0xc2,0xce},{0xf0,0xc3},{0xf0,0xcf}, {0xfd,0x4d},{0xf2,0xde},{0xf2,0xdf},{0x00,0x00},{0xc3,0xc9}, {0xf2,0xdc},{0xc3,0xc6},{0xf2,0xe4},{0x00,0x00},{0xc3,0xca}, {0xf2,0xe6},{0xf2,0xdb},{0xf0,0xce},{0xf2,0xe8},{0xf2,0xdd}, {0xfb,0x72},{0xc3,0xc7},{0xf2,0xe3},{0x91,0x67},{0xf2,0xe5}, {0xf2,0xe0},{0xf2,0xe7},{0xf2,0xe2},{0xf2,0xe1},{0xc3,0xc8}, {0x91,0x68},{0xfd,0x4e},{0xf4,0xc5},{0xf4,0xc6},{0x00,0x00}, {0xf4,0xc8},{0xc4,0xae},{0xc4,0xaf},{0xf4,0xc9},{0xf4,0xc7}, {0xfd,0x4f},{0xf4,0xc4},{0x00,0x00},{0xf6,0x42},{0xf6,0x45}, {0xf6,0x41},{0x00,0x00},{0xc4,0xfa},{0xf6,0x43},{0xc4,0xf9}, {0xc4,0xf8},{0xc4,0xf7},{0xf6,0x44},{0xf7,0x51},{0xf7,0x4f}, {0x91,0x69},{0xf7,0x4e},{0xf6,0x40},{0xf7,0x50},{0xf6,0x46}, {0xf7,0x4d},{0xfd,0x50},{0xf7,0xf9},{0xf7,0xd7},{0xf7,0xf7}, {0xc5,0xdb},{0xf7,0xf8},{0xf7,0xfa},{0x00,0x00},{0xf8,0xbf}, {0xc5,0xfa},{0xf8,0xbe},{0xf8,0xbd},{0xc5,0xfb},{0x00,0x00}, {0xc6,0x5a},{0xf9,0x6e},{0xf9,0xa7},{0xf9,0xa6},{0xf9,0xa8}, {0xa6,0xe5},{0xd0,0xaa},{0xfd,0x51},{0xd3,0xcf},{0xd3,0xd0}, {0x8d,0x75},{0x92,0xdb},{0x00,0x00},{0xdb,0xc0},{0x00,0x00}, {0xf6,0x47},{0xf8,0xc0},{0xa6,0xe6},{0xad,0x6c},{0xd0,0xab}, {0xfe,0xc6},{0x00,0x00},{0x00,0x00},{0xd7,0xb1},{0xb3,0x4e}, {0x83,0xf5},{0xdb,0xc2},{0xdb,0xc1},{0xb5,0xf3},{0x00,0x00}, {0xb8,0xc5},{0xe7,0xc1},{0xbd,0xc3},{0x00,0x00},{0xbd,0xc4}, {0xfd,0x5b},{0x00,0x00},{0xfe,0xc7},{0xbf,0xc5},{0xc5,0xfc}, {0xa6,0xe7},{0x91,0xd6},{0x86,0x44},{0x00,0x00},{0xd0,0xac}, {0xaa,0xed},{0xd0,0xae},{0xd0,0xad},{0xad,0x6d},{0x8c,0xdc}, {0xd3,0xd1},{0x84,0x7c},{0xd3,0xd8},{0xb0,0x49},{0xd3,0xd6}, {0xd3,0xd4},{0x00,0x00},{0xd3,0xdb},{0xd3,0xd2},{0xd3,0xd3}, {0xb0,0x4a},{0x00,0x00},{0xb0,0x4e},{0x00,0x00},{0x00,0x00}, {0xd3,0xdc},{0xb0,0x4d},{0xd3,0xda},{0xd3,0xd7},{0xd3,0xd5}, {0xb0,0x4b},{0xb0,0x4c},{0xd3,0xd9},{0x8b,0xbd},{0x88,0xd3}, {0x00,0x00},{0xfe,0xc8},{0xb3,0x50},{0xd7,0xb2},{0x00,0x00}, {0xb3,0x55},{0xd7,0xc2},{0xb3,0x54},{0xd7,0xc4},{0xfe,0xc9}, {0xfe,0xca},{0xd7,0xb8},{0xb3,0x52},{0xd7,0xc3},{0x00,0x00}, {0xd7,0xb3},{0xb3,0x53},{0xd7,0xbf},{0xd7,0xbb},{0xd7,0xbd}, {0xd7,0xb7},{0xd7,0xbe},{0x90,0xba},{0x00,0x00},{0xb3,0x4f}, {0xd7,0xba},{0xfd,0x56},{0xd7,0xb9},{0xd7,0xb5},{0x00,0x00}, {0xd7,0xc0},{0x00,0x00},{0x00,0x00},{0xd7,0xbc},{0xd7,0xb4}, {0x00,0x00},{0xd7,0xb6},{0xb3,0x51},{0xd7,0xc1},{0x8c,0xdb}, {0x91,0x6a},{0x00,0x00},{0x94,0xce},{0xb5,0xf6},{0xdb,0xcd}, {0x00,0x00},{0x95,0xdd},{0x91,0x6c},{0xdb,0xc9},{0xdb,0xcb}, {0xdb,0xc6},{0xdb,0xc5},{0xdb,0xc3},{0x00,0x00},{0xdb,0xca}, {0xdb,0xcc},{0xdb,0xc8},{0x91,0x6d},{0xdb,0xc7},{0xb5,0xf4}, {0xb5,0xf5},{0x94,0xcf},{0x94,0xd0},{0x86,0x45},{0x8b,0xbc}, {0xfb,0x63},{0x00,0x00},{0xdb,0xcf},{0xb8,0xcd},{0xdf,0xf2}, {0xdf,0xf8},{0xdf,0xf3},{0xdf,0xf4},{0xf9,0xd8},{0xdf,0xf9}, {0x00,0x00},{0xb8,0xcf},{0x00,0x00},{0xb8,0xc7},{0xb8,0xce}, {0xdf,0xf1},{0xdb,0xc4},{0xb8,0xca},{0xb8,0xc8},{0xdf,0xf7}, {0xdf,0xf6},{0xb8,0xc9},{0xb8,0xcb},{0xdf,0xf5},{0xb8,0xc6}, {0x00,0x00},{0xb8,0xcc},{0x8f,0x62},{0x8f,0xc5},{0x89,0x5c}, {0x91,0x6e},{0xfe,0xcb},{0xe3,0xf6},{0xbb,0x74},{0x00,0x00}, {0x00,0x00},{0xe4,0x42},{0xe4,0x41},{0x00,0x00},{0xe3,0xfb}, {0xbb,0x76},{0xe4,0x40},{0xe3,0xf7},{0xe3,0xf8},{0xbb,0x6e}, {0xbb,0x70},{0x91,0x6f},{0xe3,0xfd},{0xe3,0xf5},{0xbb,0x72}, {0xbb,0x71},{0xe3,0xf9},{0xe3,0xfe},{0xe3,0xfc},{0xbb,0x73}, {0xe3,0xfa},{0xfe,0xcc},{0xfe,0xcd},{0xdb,0xce},{0xbb,0x6f}, {0x00,0x00},{0x94,0xd1},{0xe7,0xc2},{0xe7,0xc9},{0xbd,0xc6}, {0x00,0x00},{0xe7,0xcd},{0xbd,0xca},{0xe7,0xc5},{0xe7,0xc3}, {0x00,0x00},{0xe7,0xcc},{0x00,0x00},{0xbd,0xc5},{0xe7,0xcb}, {0xbd,0xc7},{0xbd,0xc8},{0xe7,0xc4},{0xbd,0xc9},{0xe7,0xca}, {0xe7,0xc6},{0xe7,0xc7},{0xe7,0xc8},{0xbb,0x75},{0x8a,0x63}, {0x91,0x70},{0x91,0x71},{0xeb,0x70},{0xeb,0x7c},{0x00,0x00}, {0xbf,0xca},{0xeb,0x77},{0xeb,0x79},{0xfe,0xce},{0xbf,0xc8}, {0xeb,0x71},{0xeb,0x75},{0x00,0x00},{0xeb,0x78},{0xbf,0xc6}, {0xbf,0xc9},{0xeb,0x7b},{0xeb,0x73},{0xeb,0x74},{0xeb,0x7a}, {0xeb,0x72},{0xeb,0x76},{0xbf,0xc7},{0xee,0x72},{0x8c,0x53}, {0xee,0x71},{0xc1,0xb7},{0xee,0x77},{0xc1,0xb9},{0x00,0x00}, {0x00,0x00},{0xc1,0xb6},{0xee,0x73},{0xc1,0xba},{0xee,0x74}, {0x00,0x00},{0x00,0x00},{0xee,0x75},{0xee,0x78},{0xfd,0x58}, {0xc1,0xb8},{0x00,0x00},{0xf0,0xd6},{0xfe,0xcf},{0x00,0x00}, {0xf0,0xd9},{0x00,0x00},{0xf0,0xd3},{0xf0,0xd5},{0xfd,0x59}, {0x00,0x00},{0xf0,0xd4},{0xf0,0xd7},{0xf0,0xd8},{0xee,0x76}, {0xf0,0xd2},{0xfe,0xd0},{0x00,0x00},{0xc3,0xcd},{0xf2,0xec}, {0xf2,0xef},{0xf2,0xf1},{0xf2,0xea},{0xf2,0xeb},{0xf2,0xee}, {0xf2,0xf0},{0xc3,0xce},{0xc3,0xcc},{0xc3,0xcb},{0xf2,0xed}, {0xf2,0xe9},{0xf4,0xca},{0xc4,0xb0},{0xfe,0xd1},{0xf4,0xcb}, {0x00,0x00},{0x00,0x00},{0xf6,0x49},{0xc4,0xfb},{0xf6,0x4b}, {0xc4,0xfc},{0xf6,0x48},{0xf6,0x4a},{0xc5,0xa8},{0x00,0x00}, {0xf7,0x52},{0xc5,0xa7},{0xf7,0xfd},{0xf7,0xfc},{0x00,0x00}, {0xf7,0xfb},{0x91,0x72},{0x00,0x00},{0xf9,0x48},{0xf9,0x49}, {0xf9,0x4b},{0xf9,0x4a},{0x00,0x00},{0xca,0x50},{0xa6,0xe8}, {0xfe,0xd2},{0xad,0x6e},{0xd7,0xc5},{0xb5,0xf7},{0x00,0x00}, {0xdf,0xfa},{0xc2,0xd0},{0x95,0xf6},{0xf2,0xf2},{0xfd,0x6d}, {0xfd,0x6e},{0xa8,0xa3},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xb3,0x57},{0x00,0x00},{0xfe,0xd3},{0x00,0x00},{0xb3,0x56}, {0xfd,0x6f},{0xdb,0xd0},{0xb5,0xf8},{0xdb,0xd2},{0xdb,0xd1}, {0x00,0x00},{0x92,0x60},{0xdf,0xfb},{0xb8,0xd0},{0xe4,0x43}, {0xe4,0x46},{0xe4,0x45},{0x00,0x00},{0xe4,0x44},{0xe7,0xce}, {0xe7,0xd0},{0xe7,0xcf},{0xfb,0xaf},{0xbf,0xcc},{0x93,0xe1}, {0x00,0x00},{0x95,0xc5},{0xbf,0xcb},{0x00,0x00},{0xc1,0xbb}, {0xee,0x79},{0xee,0x7b},{0xee,0x7a},{0x00,0x00},{0x00,0x00}, {0xc2,0xd1},{0x92,0x6d},{0x00,0x00},{0x00,0x00},{0xf2,0xf4}, {0xf2,0xf3},{0x00,0x00},{0xf4,0xcc},{0xc4,0xb1},{0x00,0x00}, {0xfd,0x71},{0xc4,0xfd},{0xf7,0x54},{0xf7,0x53},{0xc6,0x5b}, {0x83,0x4e},{0x8d,0x73},{0x00,0x00},{0x84,0x7e},{0x84,0x7d}, {0x85,0x53},{0x8d,0xe6},{0x8c,0xa6},{0x8c,0x54},{0x8a,0x64}, {0x8e,0x7e},{0x90,0x5c},{0x00,0x00},{0x89,0x5e},{0x8f,0x63}, {0x8a,0xfc},{0x8f,0xc6},{0xa8,0xa4},{0xd0,0xaf},{0xad,0x6f}, {0xd7,0xc8},{0xd7,0xc6},{0x00,0x00},{0x00,0x00},{0xd7,0xc7}, {0xdb,0xd4},{0xdb,0xd5},{0xe0,0x43},{0xdb,0xd3},{0x8a,0xfd}, {0xdf,0xfc},{0xe0,0x41},{0xe0,0x40},{0xe0,0x42},{0xb8,0xd1}, {0xdf,0xfe},{0xdf,0xfd},{0xe0,0x44},{0x91,0x73},{0xe4,0x49}, {0xe4,0x47},{0x00,0x00},{0xe4,0x48},{0xe7,0xd3},{0xe7,0xd1}, {0x00,0x00},{0x8f,0xc7},{0xe7,0xd2},{0xeb,0x7d},{0xee,0x7c}, {0xee,0x7d},{0xc2,0xd2},{0x00,0x00},{0xf2,0xf5},{0xf4,0xcd}, {0xc4,0xb2},{0x00,0x00},{0xf6,0x4c},{0xf7,0x55},{0xc5,0xa9}, {0x00,0x00},{0xf7,0xfe},{0xf9,0x4c},{0xa8,0xa5},{0x00,0x00}, {0xad,0x71},{0xad,0x72},{0xd0,0xb0},{0x00,0x00},{0x00,0x00}, {0xd0,0xb1},{0xad,0x70},{0x00,0x00},{0xb0,0x54},{0x00,0x00}, {0xb0,0x52},{0x00,0x00},{0xb0,0x51},{0xb0,0x58},{0xb0,0x50}, {0xb0,0x59},{0xd3,0xdd},{0xb0,0x56},{0x00,0x00},{0xb0,0x53}, {0xb0,0x57},{0xb0,0x55},{0xb0,0x4f},{0x00,0x00},{0x00,0x00}, {0xb3,0x5f},{0xfe,0xd4},{0xb3,0x59},{0xd7,0xcc},{0xb3,0x5e}, {0x00,0x00},{0x00,0x00},{0xb3,0x60},{0xb3,0x5a},{0x00,0x00}, {0xb3,0x5b},{0x00,0x00},{0xd7,0xca},{0x00,0x00},{0xfe,0xd5}, {0xb3,0x58},{0xfe,0xd6},{0xd7,0xcb},{0xb3,0x5d},{0x00,0x00}, {0x00,0x00},{0xd7,0xc9},{0xb3,0x5c},{0x00,0x00},{0x93,0xd5}, {0xb6,0x44},{0x00,0x00},{0xb6,0x46},{0x91,0x74},{0xfe,0xd7}, {0xdb,0xd8},{0xb6,0x45},{0xb5,0xf9},{0xb5,0xfd},{0xfe,0xd8}, {0xb8,0xe4},{0xe0,0x49},{0xdb,0xda},{0xb5,0xfe},{0x00,0x00}, {0x00,0x00},{0xdb,0xdd},{0xdb,0xde},{0xb6,0x43},{0x00,0x00}, {0xdb,0xe0},{0xfd,0x73},{0xdb,0xe2},{0x00,0x00},{0xdb,0xe3}, {0xdb,0xd7},{0xdb,0xd6},{0xdb,0xe4},{0xb6,0x42},{0xdb,0xe1}, {0xdb,0xdf},{0x00,0x00},{0xb6,0x40},{0xb5,0xfb},{0xb6,0x47}, {0xdb,0xdb},{0xdb,0xdc},{0xdb,0xd9},{0x00,0x00},{0xb6,0x41}, {0x00,0x00},{0x00,0x00},{0xb5,0xfc},{0x00,0x00},{0xb5,0xfa}, {0xe0,0x48},{0xb8,0xdf},{0xb8,0xda},{0x00,0x00},{0x00,0x00}, {0xb8,0xd5},{0xfc,0xda},{0xb8,0xe5},{0xb8,0xd6},{0x00,0x00}, {0xb8,0xd2},{0xb8,0xe1},{0xb8,0xde},{0xb8,0xe0},{0x00,0x00}, {0xb8,0xd7},{0xb8,0xdc},{0xb8,0xd3},{0xb8,0xd4},{0xe0,0x50}, {0xe0,0x4d},{0xe0,0x45},{0xe0,0x4a},{0x00,0x00},{0xb8,0xe2}, {0xe0,0x51},{0xb8,0xe3},{0xb8,0xd9},{0x00,0x00},{0xfd,0x72}, {0xe0,0x47},{0x00,0x00},{0xe0,0x4f},{0xe0,0x4b},{0xe0,0x4e}, {0xe0,0x4c},{0xb8,0xdd},{0xe0,0x46},{0xb8,0xd8},{0x00,0x00}, {0x8c,0xa9},{0x8a,0x6c},{0xe4,0x4c},{0xbb,0x78},{0xbb,0x7b}, {0x00,0x00},{0xe4,0x4e},{0xfe,0xda},{0xbb,0xa5},{0xe4,0x4d}, {0xbb,0x7d},{0xfe,0xdb},{0xbd,0xcf},{0xe4,0x4f},{0x00,0x00}, {0xbb,0xa4},{0xe4,0x4b},{0xbb,0xa6},{0x00,0x00},{0xfe,0xdc}, {0x00,0x00},{0xbb,0x79},{0x00,0x00},{0xb8,0xdb},{0xbb,0x7c}, {0x00,0x00},{0xbb,0x7a},{0xbb,0x7e},{0xbb,0xa2},{0xbb,0x77}, {0xbb,0xa7},{0xbb,0xa3},{0xfe,0xdd},{0xbb,0xa1},{0xe4,0x4a}, {0x91,0x75},{0x93,0xab},{0x00,0x00},{0xfe,0xde},{0xbd,0xd6}, {0x00,0x00},{0xbd,0xd2},{0x00,0x00},{0xfe,0xdf},{0x00,0x00}, {0xbd,0xd9},{0x00,0x00},{0xe7,0xd6},{0xbd,0xda},{0xe7,0xe2}, {0xe7,0xdb},{0xbd,0xcb},{0xe7,0xe3},{0xe7,0xdd},{0xbd,0xd5}, {0xe7,0xde},{0x00,0x00},{0xbd,0xd4},{0xe7,0xe1},{0xbd,0xce}, {0xe7,0xdf},{0xe7,0xd5},{0xbd,0xcd},{0xeb,0xaa},{0xbd,0xd3}, {0x00,0x00},{0xbd,0xd0},{0x82,0x51},{0xbd,0xd8},{0x00,0x00}, {0xe7,0xd4},{0x00,0x00},{0xe7,0xd8},{0xbd,0xcc},{0xe7,0xd7}, {0xe7,0xd9},{0xe7,0xda},{0xbd,0xd7},{0xe7,0xdc},{0xe7,0xe0}, {0xe7,0xe4},{0x91,0x76},{0xbd,0xdb},{0xbf,0xd2},{0xeb,0xa5}, {0xeb,0xab},{0xeb,0xa8},{0xeb,0x7e},{0xeb,0xac},{0xeb,0xa1}, {0x00,0x00},{0xeb,0xa7},{0x00,0x00},{0xbf,0xcd},{0xbf,0xd3}, {0xeb,0xad},{0x00,0x00},{0xfe,0xe0},{0xbf,0xcf},{0x00,0x00}, {0xbf,0xd9},{0xbf,0xd4},{0xeb,0xaf},{0xeb,0xa9},{0xbf,0xd0}, {0xeb,0xa2},{0xbf,0xda},{0xeb,0xa3},{0xeb,0xa4},{0xbf,0xdb}, {0xbf,0xd8},{0xbd,0xd1},{0x9d,0xd1},{0xbf,0xce},{0xeb,0xb0}, {0xbf,0xdc},{0x00,0x00},{0xbf,0xd5},{0xeb,0xae},{0xbf,0xd1}, {0xbf,0xd6},{0xbf,0xd7},{0x00,0x00},{0xc1,0xc3},{0xee,0xa4}, {0xee,0xad},{0xee,0xaa},{0xee,0xac},{0x00,0x00},{0xc1,0xc0}, {0xee,0xa5},{0xfd,0x74},{0xee,0xab},{0xc1,0xbc},{0xee,0xa7}, {0xc1,0xc4},{0xee,0xa3},{0xee,0xa8},{0xee,0xaf},{0xeb,0xa6}, {0xee,0xa9},{0xee,0xa2},{0xc1,0xbd},{0xee,0xa1},{0xc1,0xbe}, {0xee,0xb0},{0xc1,0xbf},{0xee,0xae},{0xc1,0xc2},{0xee,0x7e}, {0xfe,0xe1},{0xc1,0xc1},{0x93,0xdc},{0xee,0xa6},{0xf0,0xdc}, {0xf0,0xea},{0xf0,0xe5},{0xf0,0xe7},{0xf0,0xdb},{0xc2,0xd3}, {0x00,0x00},{0xf0,0xda},{0xc2,0xd6},{0xc2,0xd5},{0x96,0xc1}, {0xf0,0xe9},{0xf0,0xe1},{0xf0,0xde},{0xf0,0xe4},{0x00,0x00}, {0xf0,0xdd},{0x00,0x00},{0xf0,0xdf},{0xf0,0xe8},{0xf0,0xe6}, {0x00,0x00},{0xc2,0xd4},{0xf0,0xed},{0xf0,0xeb},{0xf0,0xe2}, {0xf0,0xec},{0xf0,0xe3},{0xfe,0xe3},{0xf2,0xf9},{0xc3,0xcf}, {0xf3,0x41},{0xfd,0x75},{0x00,0x00},{0xf6,0x4f},{0xc3,0xd6}, {0xf0,0xe0},{0xf2,0xf7},{0xc3,0xd2},{0xf2,0xf8},{0xf2,0xfd}, {0xfd,0x77},{0xfe,0xe4},{0xc3,0xd4},{0xc3,0xd5},{0xf2,0xf6}, {0xf3,0x40},{0xf3,0x42},{0xf2,0xfa},{0xf2,0xfc},{0xf2,0xfe}, {0xf2,0xfb},{0xf3,0x43},{0xc3,0xd1},{0xc3,0xd7},{0xc3,0xd3}, {0x91,0x77},{0xc3,0xd0},{0xf4,0xd0},{0xfe,0xe5},{0xc4,0xb7}, {0xf4,0xce},{0x00,0x00},{0xfe,0xe6},{0xf4,0xd2},{0x00,0x00}, {0xf4,0xd3},{0xc4,0xb5},{0xf4,0xd4},{0xf4,0xd1},{0xfe,0xe7}, {0xf4,0xcf},{0xc4,0xb8},{0xc4,0xb4},{0xf4,0xd5},{0x00,0x00}, {0xc4,0xb6},{0xc4,0xb3},{0x91,0x78},{0x92,0xf0},{0x00,0x00}, {0xc4,0xfe},{0x00,0x00},{0x00,0x00},{0xc5,0x40},{0xf6,0x4e}, {0xf6,0x4d},{0xf6,0x50},{0xf6,0x51},{0x00,0x00},{0xc5,0x41}, {0xf7,0x56},{0xf7,0x5b},{0xc5,0xaa},{0xfd,0x76},{0xf7,0x58}, {0x82,0x63},{0xf7,0x57},{0xf7,0x5a},{0xf7,0x59},{0x00,0x00}, {0xf8,0x43},{0x00,0x00},{0xc5,0xdc},{0xf8,0x42},{0xf8,0x40}, {0x00,0x00},{0xf8,0x41},{0x00,0x00},{0x95,0xf8},{0x00,0x00}, {0xc5,0xfe},{0xc5,0xfd},{0xf8,0xc1},{0xf8,0xc2},{0xc6,0x40}, {0x00,0x00},{0xf9,0x4d},{0xf9,0x4e},{0xc6,0x67},{0xfe,0xe8}, {0xc6,0x6d},{0x00,0x00},{0xf9,0xa9},{0xf9,0xc8},{0x9c,0xec}, {0x83,0x79},{0x83,0x7a},{0x83,0x7b},{0x87,0x50},{0x8b,0xc2}, {0x83,0xd4},{0x83,0xd6},{0x83,0xd5},{0x8d,0x58},{0x83,0xd7}, {0x83,0xda},{0x00,0x00},{0x83,0xd9},{0x8c,0x56},{0x83,0xd8}, {0x83,0xd3},{0x00,0x00},{0x8a,0x68},{0x89,0x62},{0x8f,0x7e}, {0x8d,0xe7},{0x84,0xa2},{0x84,0xa4},{0x84,0xa5},{0x84,0xa8}, {0x88,0x62},{0x00,0x00},{0x84,0xa7},{0x89,0x6a},{0x84,0xa6}, {0x84,0xa1},{0x84,0xa3},{0x85,0x56},{0x85,0x57},{0x85,0x5e}, {0x85,0x54},{0x85,0x59},{0x8b,0xbf},{0x00,0x00},{0x85,0x5a}, {0x85,0x5c},{0x85,0x5d},{0x85,0x5b},{0x8f,0x65},{0x85,0x55}, {0x8d,0xe8},{0x85,0x58},{0x00,0x00},{0x8c,0x57},{0x8d,0xe9}, {0x8e,0x4f},{0x8e,0x52},{0x86,0x49},{0x8e,0x50},{0x86,0x4a}, {0x86,0x4b},{0x86,0x4c},{0x86,0x4e},{0x86,0x50},{0x8e,0x53}, {0x86,0x4f},{0x88,0x5a},{0x86,0x54},{0x86,0x53},{0x86,0x51}, {0x86,0x52},{0x86,0x4d},{0x88,0x63},{0x86,0x47},{0x86,0x48}, {0x86,0x46},{0x8e,0xf8},{0x8e,0x51},{0x00,0x00},{0x87,0x51}, {0x87,0x4f},{0x87,0x4e},{0x87,0x58},{0x87,0x52},{0x87,0x54}, {0x87,0x56},{0x87,0x55},{0x87,0x57},{0x87,0x53},{0x87,0x4d}, {0x8e,0xa1},{0x88,0x5b},{0x88,0x5c},{0x8e,0xcb},{0x89,0x67}, {0x8c,0xdd},{0x8e,0xcc},{0x88,0x65},{0x88,0x5d},{0x88,0x5e}, {0x88,0x66},{0x88,0x61},{0x8e,0xcd},{0x88,0x60},{0x88,0x5f}, {0x88,0x57},{0x88,0x59},{0x88,0x64},{0x88,0x58},{0x00,0x00}, {0x88,0x56},{0x89,0x63},{0x89,0x6d},{0x89,0x64},{0x8a,0x69}, {0x89,0x61},{0x89,0x65},{0x8e,0xf9},{0x89,0x68},{0x89,0x69}, {0x8e,0xfa},{0x89,0x6b},{0x89,0x6e},{0x8d,0x59},{0x89,0x66}, {0x89,0x6c},{0x89,0x60},{0x89,0x5f},{0x8a,0x65},{0x8e,0xfb}, {0x00,0x00},{0x8a,0xfe},{0x8d,0xa4},{0x8f,0x64},{0x8a,0x6b}, {0x8a,0x6a},{0x8a,0x66},{0x8f,0x66},{0x8a,0x67},{0x8a,0x6d}, {0x8b,0x40},{0x8f,0xa1},{0x8b,0x42},{0x91,0x79},{0x8b,0x41}, {0x8b,0xc0},{0x8f,0xc8},{0x8b,0xc3},{0x90,0x78},{0x8b,0xbe}, {0x8b,0xc1},{0x90,0xa6},{0x8c,0xa7},{0x8c,0x58},{0x8d,0x5a}, {0xa8,0xa6},{0x00,0x00},{0xd7,0xcd},{0x91,0x7a},{0xd7,0xce}, {0xe0,0x52},{0xe4,0x50},{0xe7,0xe5},{0xc1,0xc6},{0x00,0x00}, {0xc1,0xc5},{0xf0,0xee},{0xf3,0x44},{0x00,0x00},{0xf8,0x44}, {0xa8,0xa7},{0xd3,0xde},{0xb0,0x5a},{0xb3,0x61},{0xe0,0x54}, {0xe0,0x53},{0xbd,0xdc},{0xe7,0xe6},{0xbd,0xdd},{0xee,0xb1}, {0xc2,0xd7},{0xfe,0xe9},{0x00,0x00},{0x00,0x00},{0xc6,0x76}, {0xa8,0xa8},{0xcd,0xcb},{0xd3,0xdf},{0x00,0x00},{0x00,0x00}, {0xb3,0x62},{0x00,0x00},{0xd7,0xcf},{0xd7,0xd0},{0x00,0x00}, {0xdb,0xe5},{0x00,0x00},{0xb6,0x48},{0xb8,0xe6},{0x00,0x00}, {0xe0,0x56},{0xe0,0x55},{0xe0,0x57},{0x00,0x00},{0xe4,0x51}, {0xe4,0x52},{0xbb,0xa8},{0xbf,0xdd},{0xbd,0xde},{0xbf,0xde}, {0x00,0x00},{0xee,0xb5},{0xee,0xb2},{0xee,0xb4},{0xee,0xb3}, {0xc1,0xc7},{0x00,0x00},{0xf0,0xef},{0xf3,0x46},{0xf3,0x45}, {0xcb,0xa4},{0xb0,0x5c},{0xb0,0x5b},{0xd3,0xe0},{0x91,0x7b}, {0xd7,0xd1},{0x00,0x00},{0x00,0x00},{0xdb,0xe7},{0xdb,0xe6}, {0xb6,0x49},{0x00,0x00},{0xe0,0x59},{0xe0,0x5a},{0xe0,0x58}, {0x00,0x00},{0x00,0x00},{0xb8,0xe8},{0xb8,0xe7},{0x00,0x00}, {0xbb,0xaa},{0xbb,0xa9},{0x91,0x7c},{0xe7,0xe7},{0xeb,0xb3}, {0xeb,0xb1},{0xeb,0xb2},{0xbf,0xdf},{0xee,0xb7},{0xee,0xb6}, {0x00,0x00},{0xf0,0xf2},{0xf0,0xf1},{0xf0,0xf0},{0xf3,0x47}, {0xfe,0xea},{0xf9,0xaa},{0xa8,0xa9},{0xad,0x73},{0xfe,0xeb}, {0xad,0x74},{0xb0,0x5d},{0xb0,0x5e},{0xd3,0xe2},{0xd3,0xe1}, {0xd7,0xd2},{0x00,0x00},{0xb3,0x68},{0xb3,0x66},{0xb3,0x63}, {0xb3,0x67},{0xb3,0x65},{0xb3,0x64},{0xfd,0x79},{0x91,0x7d}, {0xb6,0x4a},{0xdb,0xea},{0x00,0x00},{0xb8,0xed},{0xb6,0x4c}, {0xb6,0x51},{0xdb,0xec},{0xb6,0x53},{0xb6,0x52},{0xb6,0x55}, {0xdb,0xeb},{0xdb,0xe8},{0xb6,0x4f},{0xb6,0x4b},{0xb6,0x4d}, {0xdb,0xe9},{0xb6,0x54},{0xb6,0x50},{0xb6,0x4e},{0xb8,0xef}, {0xb8,0xee},{0xb8,0xec},{0xb8,0xf0},{0x00,0x00},{0xb8,0xea}, {0xb8,0xeb},{0x00,0x00},{0xb8,0xe9},{0x00,0x00},{0xe0,0x5b}, {0x95,0x60},{0x82,0x62},{0xe4,0x54},{0x00,0x00},{0xbb,0xac}, {0xbb,0xad},{0xbb,0xab},{0xfe,0xec},{0xe4,0x53},{0xfe,0xed}, {0xe4,0x55},{0x00,0x00},{0xe7,0xea},{0xe7,0xec},{0x92,0xce}, {0xbd,0xe7},{0xe7,0xed},{0xbd,0xe0},{0xe7,0xe9},{0xbd,0xdf}, {0xbd,0xe9},{0xbd,0xe5},{0xbd,0xe6},{0xbd,0xe2},{0xe7,0xe8}, {0xbd,0xe1},{0xe7,0xee},{0xe7,0xeb},{0x9e,0x40},{0xbd,0xe8}, {0xfd,0x7a},{0xbd,0xe3},{0xbd,0xe4},{0xeb,0xb5},{0x00,0x00}, {0xeb,0xb7},{0xeb,0xb6},{0x9e,0x41},{0xeb,0xb8},{0xbf,0xe0}, {0xeb,0xb4},{0x00,0x00},{0xfd,0x7b},{0xc1,0xcb},{0xee,0xb8}, {0xc1,0xc8},{0xc1,0xcc},{0xc1,0xca},{0xc1,0xc9},{0xf0,0xf3}, {0x00,0x00},{0xf0,0xf6},{0x00,0x00},{0xf0,0xf5},{0x9e,0x42}, {0xf0,0xf4},{0xc2,0xd8},{0xf3,0x48},{0xf3,0x49},{0xc3,0xd8}, {0xf3,0x4a},{0xc3,0xd9},{0x82,0x57},{0xfd,0x7c},{0xc4,0xba}, {0x00,0x00},{0xc4,0xb9},{0xf6,0x52},{0x9e,0x43},{0x91,0x7e}, {0xc5,0x42},{0xf6,0x53},{0xf7,0x5c},{0xc5,0xab},{0xc5,0xac}, {0x95,0x76},{0xf8,0x45},{0x00,0x00},{0xc6,0x42},{0x9e,0x44}, {0x83,0x50},{0x83,0x7c},{0x83,0x7d},{0x00,0x00},{0x83,0xdd}, {0x83,0xdc},{0x84,0xaa},{0x88,0x6e},{0x84,0x50},{0x88,0x6c}, {0x84,0xac},{0x88,0x71},{0x84,0xa9},{0x84,0xad},{0x84,0xae}, {0x85,0x68},{0x8a,0x70},{0x85,0x5f},{0x84,0xab},{0x85,0x61}, {0x88,0x6b},{0x85,0x63},{0x8d,0xeb},{0x85,0x60},{0x85,0x66}, {0x8d,0xea},{0x85,0x6a},{0x85,0x69},{0x85,0x64},{0x85,0x65}, {0x85,0x62},{0x86,0x55},{0x8f,0xa3},{0x86,0x57},{0x86,0x58}, {0x86,0x59},{0x86,0x5a},{0x86,0x5b},{0x8c,0xaa},{0x86,0x56}, {0x86,0x5c},{0x90,0x47},{0x8e,0xa2},{0x87,0x5a},{0x91,0xa1}, {0x87,0x5b},{0x88,0x6a},{0x88,0x6d},{0x91,0xa2},{0x8c,0xde}, {0x88,0x69},{0x88,0x70},{0x00,0x00},{0x00,0x00},{0x88,0x72}, {0x88,0x68},{0x8e,0xce},{0x89,0x6f},{0x00,0x00},{0x8b,0x43}, {0x8a,0x71},{0x8a,0x6e},{0x8a,0x6f},{0x8f,0xa2},{0x8c,0xdf}, {0x8b,0xc5},{0x00,0x00},{0x8b,0xc4},{0x8c,0x5a},{0x8c,0x59}, {0x8d,0x5c},{0xa8,0xaa},{0x00,0x00},{0xb3,0x6a},{0xb3,0x69}, {0xe0,0x5c},{0xe0,0x5d},{0x00,0x00},{0xbb,0xae},{0xeb,0xb9}, {0xbd,0xea},{0xeb,0xba},{0xee,0xb9},{0xa8,0xab},{0x91,0xa3}, {0xd0,0xb2},{0xad,0x76},{0xad,0x75},{0x87,0x5c},{0xd3,0xe3}, {0xb0,0x5f},{0xd3,0xe4},{0xd7,0xd5},{0x9e,0x45},{0xd7,0xd4}, {0x00,0x00},{0xd7,0xd3},{0x00,0x00},{0x00,0x00},{0xdb,0xee}, {0xb6,0x58},{0xfd,0x7d},{0x00,0x00},{0xdb,0xed},{0xb6,0x57}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xdb,0xef},{0xb6,0x56}, {0x8a,0x72},{0xe0,0x5f},{0xe0,0x62},{0xe0,0x60},{0xe0,0x61}, {0xe0,0x65},{0xe0,0x5e},{0xe0,0x66},{0xe0,0x63},{0xe0,0x64}, {0xbb,0xb0},{0xe4,0x56},{0x00,0x00},{0x00,0x00},{0xbb,0xaf}, {0x00,0x00},{0xe7,0xf2},{0xe7,0xf0},{0x00,0x00},{0x00,0x00}, {0xbd,0xeb},{0xe7,0xef},{0xe7,0xf1},{0x00,0x00},{0xbd,0xec}, {0x00,0x00},{0xeb,0xbb},{0xfd,0x7e},{0xeb,0xbc},{0xc1,0xcd}, {0x9e,0x46},{0xf3,0x4c},{0xf3,0x4e},{0xf3,0x4b},{0xf3,0x4d}, {0xf4,0xd6},{0xf6,0x54},{0x00,0x00},{0x90,0xa3},{0xf9,0x6f}, {0xa8,0xac},{0xad,0x77},{0xd3,0xe5},{0xd3,0xe7},{0xd3,0xe6}, {0x8c,0x5b},{0xd7,0xd8},{0xb3,0x6c},{0x00,0x00},{0xd7,0xd6}, {0x00,0x00},{0xb3,0x6b},{0xd7,0xd9},{0x9e,0x47},{0xd7,0xda}, {0xd7,0xd7},{0x8c,0xac},{0x8f,0x67},{0xdb,0xfb},{0xb6,0x60}, {0xdb,0xf3},{0xdb,0xf9},{0x00,0x00},{0x00,0x00},{0xb6,0x5b}, {0xb6,0x5e},{0xdb,0xf2},{0xb6,0x59},{0xdb,0xf6},{0xe0,0x6c}, {0xb6,0x5d},{0x00,0x00},{0xdb,0xf1},{0xfd,0xa1},{0xdb,0xf7}, {0xdb,0xf4},{0xdb,0xfa},{0xdb,0xf0},{0xdb,0xf8},{0xb6,0x5c}, {0xb6,0x5f},{0xdb,0xf5},{0xb6,0x5a},{0x90,0x5e},{0xb8,0xf2}, {0xe0,0x68},{0xb8,0xf1},{0xe0,0x6f},{0xe0,0x6e},{0xb8,0xf8}, {0x00,0x00},{0xb8,0xf9},{0xe0,0x70},{0xb8,0xf3},{0xe0,0x6d}, {0xb8,0xf7},{0xe0,0x72},{0xe0,0x69},{0x00,0x00},{0xe0,0x6b}, {0xb8,0xf4},{0xe0,0x67},{0xe0,0x6a},{0xe0,0x71},{0xb8,0xf5}, {0xe0,0x73},{0x88,0x73},{0x00,0x00},{0x8b,0xc6},{0x8b,0x46}, {0x90,0x5d},{0xb8,0xf6},{0x8c,0xad},{0xbb,0xb1},{0xe4,0x5b}, {0xe4,0x61},{0xe4,0x59},{0xe4,0x62},{0x9e,0x48},{0xe4,0x58}, {0xe4,0x5d},{0xe4,0x63},{0xe4,0x60},{0xe4,0x5f},{0xe4,0x5e}, {0x91,0xa4},{0xe4,0x57},{0xe4,0x5c},{0x00,0x00},{0x8c,0xab}, {0xe4,0x5a},{0x9e,0x49},{0xbd,0xf1},{0xbd,0xee},{0xe7,0xfb}, {0xe8,0x41},{0xe8,0x43},{0xe8,0x40},{0xe7,0xf8},{0xe7,0xfa}, {0xe8,0x45},{0xe8,0x42},{0xe7,0xfc},{0xe8,0x46},{0xe7,0xf9}, {0xe8,0x44},{0xbd,0xef},{0xbd,0xf5},{0xbd,0xf3},{0xe7,0xf3}, {0xbd,0xf4},{0xbd,0xf0},{0xe7,0xf4},{0xe7,0xf6},{0xe7,0xf5}, {0xe7,0xfd},{0xe7,0xfe},{0xfd,0xa2},{0xbd,0xf2},{0x95,0x57}, {0xbd,0xed},{0x8c,0xe1},{0xfb,0x6d},{0xe7,0xf7},{0x8c,0xe0}, {0xeb,0xc6},{0xbf,0xe2},{0x00,0x00},{0xeb,0xbd},{0xbf,0xe3}, {0xbf,0xe6},{0xeb,0xc2},{0x00,0x00},{0xeb,0xbf},{0xbf,0xe5}, {0x91,0xa5},{0x00,0x00},{0xeb,0xc3},{0xeb,0xc4},{0xeb,0xbe}, {0xeb,0xc7},{0xeb,0xc0},{0xeb,0xc5},{0xbf,0xe4},{0x00,0x00}, {0xbf,0xe1},{0xeb,0xc1},{0x9e,0x4a},{0xee,0xbf},{0xc1,0xd0}, {0xc1,0xce},{0xc1,0xd1},{0xc1,0xcf},{0xee,0xbe},{0xee,0xbb}, {0xee,0xba},{0xfd,0xa3},{0xee,0xbd},{0x8d,0x74},{0x8b,0x44}, {0xee,0xbc},{0xf1,0x45},{0xc2,0xde},{0xf0,0xfb},{0xf0,0xfa}, {0x00,0x00},{0xc2,0xd9},{0xf1,0x41},{0xf1,0x40},{0xf0,0xf7}, {0xf1,0x43},{0xf0,0xfc},{0xc2,0xdd},{0xf0,0xf9},{0xf1,0x42}, {0xf0,0xf8},{0xc2,0xda},{0xc2,0xdc},{0xf0,0xfd},{0xc2,0xdb}, {0xf0,0xfe},{0x9e,0x4b},{0xf1,0x44},{0xf3,0x52},{0x00,0x00}, {0xc3,0xde},{0xf3,0x4f},{0x00,0x00},{0xf3,0x53},{0x91,0xa6}, {0x9e,0x4c},{0xc3,0xdb},{0xf3,0x51},{0xc3,0xe0},{0xfd,0xa5}, {0xc3,0xdd},{0xfd,0xa4},{0xf3,0x50},{0x00,0x00},{0xc3,0xdf}, {0xf3,0x54},{0xc3,0xda},{0x00,0x00},{0x9e,0x4d},{0x90,0x7e}, {0x9e,0x4e},{0xc4,0xbc},{0xc4,0xbe},{0x00,0x00},{0xf4,0xd9}, {0xc4,0xbd},{0xf4,0xd7},{0xc3,0xdc},{0xf4,0xd8},{0xc4,0xbb}, {0xc5,0x43},{0xc5,0x45},{0xf6,0x56},{0xc5,0x44},{0xf6,0x55}, {0x8d,0xa5},{0xf7,0x61},{0xc5,0xad},{0xf7,0x60},{0xc5,0xae}, {0xf7,0x5e},{0xf7,0x5d},{0xf7,0x62},{0xf7,0x63},{0xf8,0x46}, {0x91,0xa7},{0xf7,0x5f},{0x00,0x00},{0x90,0xa4},{0xf8,0xc6}, {0xf8,0xc3},{0xf8,0xc4},{0xf8,0xc5},{0xc6,0x5c},{0x00,0x00}, {0xf9,0x51},{0xf9,0x50},{0xf9,0x4f},{0xf9,0x70},{0xfd,0xa6}, {0xf9,0xbe},{0xf9,0xab},{0xc6,0x6e},{0xa8,0xad},{0xb0,0x60}, {0x95,0xdf},{0x00,0x00},{0x82,0x49},{0x91,0xa8},{0x91,0xa9}, {0xb8,0xfa},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9e,0x4f}, {0x00,0x00},{0x00,0x00},{0x9e,0x50},{0xbd,0xf6},{0x00,0x00}, {0x9e,0x51},{0xeb,0xc8},{0x94,0xd3},{0x00,0x00},{0xc2,0xdf}, {0x00,0x00},{0xf3,0x55},{0x9e,0x52},{0x00,0x00},{0x91,0xaa}, {0x91,0xab},{0x00,0x00},{0x94,0xd4},{0xf9,0xac},{0xa8,0xae}, {0xaa,0xee},{0xad,0x79},{0xad,0x78},{0x91,0xac},{0xb0,0x63}, {0x00,0x00},{0xd3,0xe8},{0xb0,0x61},{0xd3,0xe9},{0xb0,0x62}, {0x00,0x00},{0x00,0x00},{0xd7,0xdf},{0xd7,0xdb},{0x00,0x00}, {0xfb,0xa1},{0xb3,0x6d},{0xd7,0xde},{0xd7,0xdd},{0xd7,0xdc}, {0xb3,0x6e},{0xd7,0xe0},{0xd7,0xe1},{0x93,0x7d},{0x91,0xad}, {0x9e,0x53},{0xdc,0x43},{0xdc,0x41},{0xdc,0x45},{0xdc,0x46}, {0xdc,0x4c},{0x00,0x00},{0xdc,0x48},{0xdc,0x4a},{0x9e,0x54}, {0xdc,0x42},{0xdb,0xfc},{0x00,0x00},{0xdc,0x49},{0x9e,0x55}, {0x00,0x00},{0xdc,0x4b},{0xdc,0x44},{0xdc,0x47},{0xdb,0xfd}, {0xb6,0x62},{0xdc,0x40},{0xdb,0xfe},{0xb6,0x61},{0xb6,0x63}, {0x92,0xad},{0xb8,0xfd},{0xe0,0x75},{0xe0,0x77},{0xe0,0x76}, {0xe0,0x7b},{0xb8,0xfb},{0x00,0x00},{0xe0,0x78},{0xe0,0x74}, {0xe0,0x79},{0xe0,0x7a},{0xb8,0xfc},{0xb8,0xfe},{0xe0,0x7c}, {0x91,0xae},{0xe4,0x67},{0xe4,0x66},{0x00,0x00},{0xe4,0x64}, {0xe4,0x65},{0xbb,0xb3},{0xbb,0xb5},{0xbb,0xb2},{0xbb,0xb4}, {0xe8,0x4d},{0xe8,0x4e},{0xe8,0x49},{0xfd,0xa7},{0xe8,0x4a}, {0xbd,0xf8},{0xbd,0xfd},{0xbd,0xf7},{0xbd,0xfe},{0xbd,0xf9}, {0xe8,0x4b},{0x00,0x00},{0x00,0x00},{0xe8,0x4c},{0xe8,0x48}, {0xbe,0x40},{0xbd,0xfb},{0x00,0x00},{0x00,0x00},{0xbd,0xfa}, {0xbd,0xfc},{0x00,0x00},{0xe8,0x47},{0x95,0x70},{0xeb,0xca}, {0xbf,0xe8},{0x9e,0x56},{0x00,0x00},{0xeb,0xcc},{0xbf,0xea}, {0xeb,0xcf},{0xeb,0xcb},{0xeb,0xc9},{0xeb,0xce},{0xbf,0xe9}, {0xeb,0xcd},{0x00,0x00},{0xbf,0xe7},{0x00,0x00},{0x00,0x00}, {0xc1,0xd3},{0xc1,0xd6},{0xee,0xc1},{0x9e,0x57},{0xc1,0xd4}, {0xee,0xc0},{0xc1,0xd2},{0xc1,0xd5},{0xf1,0x46},{0xf1,0x47}, {0xf1,0x48},{0xc2,0xe0},{0x9e,0x58},{0xf1,0x49},{0x94,0xd5}, {0xc2,0xe1},{0xc3,0xe2},{0xf3,0x58},{0xf3,0x59},{0xf3,0x57}, {0xf3,0x56},{0xf3,0x5a},{0xc3,0xe1},{0xf4,0xdd},{0xf4,0xdb}, {0xf4,0xdc},{0xf4,0xde},{0xf4,0xda},{0xf4,0xdf},{0xf6,0x58}, {0xfd,0xa9},{0xf6,0x59},{0xf6,0x57},{0xc5,0x46},{0xf7,0x64}, {0xc5,0xaf},{0xf7,0x65},{0xf8,0x48},{0xf8,0x47},{0x00,0x00}, {0x83,0x51},{0x83,0x61},{0x83,0xa1},{0x83,0xde},{0x00,0x00}, {0x83,0xdf},{0x8b,0x48},{0x84,0xaf},{0x88,0x79},{0x84,0xb0}, {0x8c,0xae},{0x91,0xaf},{0x85,0x6b},{0x90,0x6e},{0x85,0x6c}, {0x8d,0xed},{0x85,0x6d},{0x91,0xb0},{0x8d,0xee},{0x90,0x5f}, {0x8d,0xec},{0x87,0x60},{0x86,0x5f},{0x86,0x5e},{0x86,0x60}, {0x8b,0xc8},{0x00,0x00},{0x8e,0x56},{0x8e,0x55},{0x86,0x5d}, {0x87,0x5f},{0x87,0x5e},{0x88,0x75},{0x88,0x78},{0x88,0x77}, {0x88,0x74},{0x88,0x7c},{0x88,0x7b},{0x00,0x00},{0x88,0x76}, {0x88,0x7a},{0x89,0x73},{0x89,0x70},{0x89,0x71},{0x00,0x00}, {0x89,0x72},{0x8c,0xe2},{0x8a,0x76},{0x8a,0x73},{0x8a,0x74}, {0x8f,0xa4},{0x8b,0x49},{0x8b,0xc7},{0xa8,0xaf},{0xb6,0x64}, {0x00,0x00},{0x8b,0xc9},{0xb9,0x40},{0xfd,0x41},{0x00,0x00}, {0x00,0x00},{0xbb,0xb6},{0x00,0x00},{0x9e,0x59},{0xbf,0xec}, {0x91,0xb1},{0xbf,0xeb},{0x8c,0xaf},{0x00,0x00},{0x8c,0x47}, {0x00,0x00},{0xc3,0xe3},{0xc4,0x7c},{0xc5,0x47},{0xa8,0xb0}, {0xb0,0x64},{0xb9,0x41},{0x9e,0x5a},{0xf3,0x5b},{0xc6,0xd6}, {0x9c,0xe0},{0x94,0xd6},{0x9e,0x5b},{0x8b,0xca},{0x93,0xc3}, {0x94,0x4e},{0x94,0x44},{0x89,0x77},{0x86,0x63},{0xcb,0xa6}, {0x00,0x00},{0x88,0x7e},{0xa8,0xb1},{0x00,0x00},{0xa8,0xb4}, {0xa8,0xb3},{0xa8,0xb2},{0x86,0x65},{0x8a,0x79},{0xcb,0xa5}, {0x9e,0x5c},{0xcd,0xcd},{0xa0,0xa4},{0xcd,0xcf},{0xaa,0xef}, {0x9e,0x5d},{0x86,0x62},{0xaa,0xf1},{0xcd,0xcc},{0xcd,0xce}, {0xaa,0xf0},{0xcd,0xd1},{0xcd,0xd0},{0xcd,0xd2},{0x8a,0x78}, {0x84,0xb1},{0x94,0xd7},{0x85,0x6e},{0x87,0x61},{0x86,0x64}, {0x84,0xb2},{0x89,0x76},{0xd0,0xb6},{0xd0,0xb4},{0xad,0x7c}, {0xd0,0xb3},{0xad,0xa3},{0xad,0x7e},{0xad,0x7b},{0x00,0x00}, {0xad,0xa4},{0x8b,0x4a},{0xad,0x7d},{0xad,0xa2},{0x00,0x00}, {0xad,0xa1},{0xd0,0xb5},{0x91,0xb2},{0xad,0x7a},{0x00,0x00}, {0x00,0x00},{0x84,0xb3},{0xb0,0x6a},{0xd3,0xeb},{0xd3,0xf1}, {0xb0,0x67},{0xb0,0x6e},{0x95,0xd9},{0xb0,0x69},{0xd3,0xee}, {0xd3,0xf0},{0xb0,0x6c},{0xd3,0xea},{0xd3,0xed},{0xb0,0x68}, {0xb0,0x65},{0xd3,0xec},{0xb0,0x6b},{0xd3,0xef},{0xb0,0x6d}, {0xb0,0x66},{0x00,0x00},{0x9e,0x5e},{0x89,0x75},{0x87,0x62}, {0xd7,0xe3},{0xd7,0xe6},{0xb3,0x70},{0x91,0xb3},{0xb3,0x7a}, {0xb3,0x76},{0xd7,0xe4},{0x87,0x63},{0x93,0x7a},{0xb3,0x7e}, {0xb3,0x77},{0xb3,0x7c},{0xb3,0x72},{0x00,0x00},{0xb3,0x6f}, {0xb3,0x71},{0xb3,0x7d},{0xd7,0xe5},{0xb3,0x75},{0xb3,0x78}, {0xb3,0x74},{0xb3,0x79},{0xd7,0xe7},{0xb3,0x7b},{0xb3,0x73}, {0xd7,0xe2},{0x00,0x00},{0x8d,0x41},{0x94,0xd8},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xdc,0x4d}, {0xb6,0x65},{0xdc,0x4f},{0x00,0x00},{0xb6,0x67},{0xb6,0x69}, {0x9e,0x5f},{0xdc,0x4e},{0xb6,0x66},{0xb6,0x6a},{0x9e,0x60}, {0xb6,0x68},{0x91,0xb4},{0x00,0x00},{0x8d,0x42},{0xb9,0x47}, {0xe0,0xa3},{0xb9,0x4f},{0xe0,0x7e},{0x00,0x00},{0xb9,0x50}, {0xb9,0x45},{0x00,0x00},{0xe0,0xa1},{0x93,0x72},{0x00,0x00}, {0xb9,0x4a},{0x00,0x00},{0xe0,0xa2},{0xb9,0x43},{0xb9,0x42}, {0xfd,0xb6},{0xb9,0x4d},{0xb9,0x4c},{0xb9,0x4b},{0xb9,0x49}, {0xb9,0x4e},{0xe0,0x7d},{0xb9,0x44},{0xb9,0x46},{0xb9,0x48}, {0xfd,0xb5},{0x89,0x78},{0xbb,0xb8},{0xbb,0xbb},{0x00,0x00}, {0xbb,0xbf},{0xbb,0xb9},{0xbb,0xbe},{0xbb,0xbc},{0x00,0x00}, {0xbb,0xb7},{0xfe,0x61},{0xbb,0xbd},{0xbb,0xba},{0x9e,0x61}, {0x91,0xb5},{0x00,0x00},{0xe8,0x52},{0xbe,0x43},{0xbe,0x41}, {0x00,0x00},{0xe8,0x53},{0x9e,0x62},{0xbe,0x44},{0xbe,0x42}, {0xe8,0x51},{0xe8,0x50},{0x00,0x00},{0xbf,0xf0},{0xe8,0x4f}, {0xbf,0xee},{0xbf,0xed},{0xeb,0xd0},{0xbe,0x45},{0xbf,0xef}, {0xeb,0xd1},{0xbf,0xf2},{0xeb,0xd2},{0xbf,0xf1},{0xc1,0xd8}, {0xee,0xc3},{0xc1,0xd7},{0xc1,0xdc},{0xc1,0xda},{0xc1,0xdb}, {0xc2,0xe3},{0xc1,0xd9},{0xee,0xc2},{0xeb,0xd3},{0xc2,0xe2}, {0xc2,0xe4},{0x91,0xb6},{0xc3,0xe4},{0xc3,0xe5},{0x00,0x00}, {0xf4,0xe0},{0x00,0x00},{0xc5,0xde},{0xc5,0xdd},{0xa8,0xb6}, {0x00,0x00},{0x88,0xa3},{0xca,0x55},{0xb0,0x6f},{0x00,0x00}, {0xca,0x52},{0xca,0x53},{0xca,0x51},{0x00,0x00},{0xca,0x54}, {0x00,0x00},{0x8f,0xa5},{0xcb,0xaa},{0xcb,0xa7},{0xcb,0xac}, {0xcb,0xa8},{0xa8,0xb7},{0xa8,0xba},{0x00,0x00},{0xcb,0xa9}, {0xa8,0xb9},{0xcb,0xab},{0x95,0x40},{0x00,0x00},{0xa8,0xb8}, {0x00,0x00},{0x8e,0x57},{0x00,0x00},{0x85,0x6f},{0xcd,0xd5}, {0xcd,0xd7},{0xaa,0xf4},{0xcd,0xd3},{0xcd,0xd6},{0xcd,0xd4}, {0xaa,0xf2},{0xaa,0xf5},{0x00,0x00},{0xaa,0xf3},{0x86,0x66}, {0x89,0x79},{0x88,0xa1},{0x00,0x00},{0xd0,0xb8},{0xd0,0xbc}, {0xd0,0xb9},{0x00,0x00},{0xad,0xa7},{0x00,0x00},{0xad,0xa8}, {0xfd,0xab},{0xd0,0xbb},{0x00,0x00},{0xd0,0xbd},{0xd0,0xbf}, {0x00,0x00},{0xad,0xa5},{0xd0,0xbe},{0x00,0x00},{0x00,0x00}, {0xad,0xa6},{0x8d,0xc6},{0x8e,0xfc},{0x88,0xa2},{0x00,0x00}, {0x8d,0xf0},{0xd7,0xee},{0xd0,0xba},{0xd3,0xf2},{0xd3,0xfb}, {0xd3,0xf9},{0xd3,0xf4},{0xd3,0xf5},{0xd3,0xfa},{0xd3,0xfc}, {0xb0,0x71},{0x91,0xb7},{0xd3,0xf7},{0xd3,0xf3},{0xb0,0x70}, {0xb0,0x72},{0xd3,0xf6},{0xd3,0xfd},{0xd3,0xf8},{0x8c,0xe3}, {0x90,0xbb},{0xb3,0xa1},{0xd7,0xf1},{0xd7,0xe9},{0xd7,0xef}, {0xd7,0xf0},{0xb3,0xa2},{0x00,0x00},{0xd7,0xe8},{0xd7,0xea}, {0xd0,0xb7},{0xd7,0xec},{0xd7,0xed},{0xd7,0xeb},{0xb6,0x6c}, {0x00,0x00},{0x92,0x7b},{0x8e,0xcf},{0xdc,0x56},{0xeb,0xd4}, {0xdc,0x57},{0xdc,0x54},{0xb3,0xa3},{0xb6,0x6e},{0xdc,0x53}, {0xdc,0x59},{0xdc,0x58},{0xb6,0x6b},{0xdc,0x5c},{0xdc,0x52}, {0xdc,0x5b},{0xdc,0x50},{0xdc,0x5a},{0xdc,0x55},{0xb6,0x6d}, {0x00,0x00},{0xe0,0xaa},{0x00,0x00},{0xe0,0xa5},{0xe0,0xab}, {0xe0,0xa6},{0xe0,0xa4},{0xe0,0xa7},{0xb9,0x51},{0x00,0x00}, {0xe0,0xa9},{0x91,0xb8},{0xe0,0xa8},{0xb9,0x52},{0xbb,0xc1}, {0xbb,0xc0},{0xe4,0x6e},{0xe4,0x71},{0xe4,0x69},{0xe4,0x6d}, {0xbb,0xc2},{0xe4,0x6c},{0xe4,0x6a},{0xe4,0x70},{0xe4,0x6b}, {0xe4,0x68},{0xe4,0x6f},{0x00,0x00},{0xe8,0x59},{0xbe,0x48}, {0xf1,0x4a},{0xe8,0x56},{0xe8,0x57},{0xe8,0x55},{0xdc,0x51}, {0xbe,0x47},{0xe8,0x5a},{0xe8,0x54},{0xbe,0x46},{0xbe,0x49}, {0xe8,0x58},{0xeb,0xd5},{0xbf,0xf3},{0xeb,0xd6},{0xeb,0xd7}, {0x00,0x00},{0xee,0xc4},{0xc1,0xdd},{0xf1,0x4b},{0xf1,0x4c}, {0x00,0x00},{0x00,0x00},{0xf1,0x4d},{0xf3,0x5d},{0xf3,0x5c}, {0xf4,0xe2},{0x00,0x00},{0xf4,0xe1},{0xf6,0x5b},{0xf6,0x5c}, {0xf6,0x5a},{0xf7,0x66},{0xc5,0xb0},{0xa8,0xbb},{0xad,0xaa}, {0xad,0xa9},{0xb0,0x75},{0xb0,0x74},{0xd4,0x40},{0xd4,0x41}, {0xd3,0xfe},{0xfd,0xac},{0xb0,0x73},{0xd7,0xf5},{0x92,0xf8}, {0xd7,0xf6},{0xd7,0xf2},{0xb3,0xa4},{0xd7,0xf3},{0xfd,0xaf}, {0xd7,0xf4},{0x00,0x00},{0xfd,0xae},{0x8a,0x7a},{0x96,0xa8}, {0xdc,0x5f},{0xdc,0x61},{0xdc,0x5d},{0xdc,0x60},{0xb6,0x6f}, {0xdc,0x5e},{0xb6,0x70},{0x00,0x00},{0xfd,0xb0},{0xdd,0x73}, {0xb9,0x55},{0xb9,0x54},{0x00,0x00},{0xb9,0x53},{0x00,0x00}, {0xe0,0xac},{0xe0,0xad},{0x96,0xa9},{0x8b,0x4c},{0xe4,0x73}, {0xe4,0x75},{0xbb,0xc6},{0xbb,0xc3},{0x96,0xa1},{0xbb,0xc5}, {0xbb,0xc4},{0xe4,0x74},{0xe4,0x72},{0x00,0x00},{0xfd,0xb1}, {0x8d,0xa6},{0x90,0xa5},{0x8d,0x5d},{0xe8,0x61},{0xe8,0x5e}, {0xe8,0x5f},{0xbe,0x4d},{0xe8,0x60},{0xe8,0x5b},{0xe8,0x5c}, {0xbe,0x4a},{0x00,0x00},{0xbe,0x4b},{0xe8,0x5d},{0xbe,0x4c}, {0x96,0xaa},{0xeb,0xdb},{0xfd,0xb2},{0xeb,0xdc},{0xeb,0xd9}, {0xeb,0xda},{0xbf,0xf4},{0xeb,0xd8},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x82,0x79},{0x00,0x00},{0xee,0xc8},{0xee,0xc5}, {0xee,0xc7},{0xc1,0xe0},{0xee,0xcb},{0xc1,0xdf},{0xee,0xc9}, {0xee,0xcc},{0xee,0xca},{0xee,0xc6},{0xc1,0xde},{0x82,0x66}, {0xf1,0x4f},{0x00,0x00},{0xf1,0x50},{0xf1,0x4e},{0x9e,0x63}, {0xf1,0x52},{0xc2,0xe5},{0xc2,0xe6},{0xf3,0x5f},{0xc3,0xe7}, {0xf1,0x51},{0xf3,0x5e},{0xc3,0xe6},{0xf4,0xe5},{0xf4,0xe6}, {0xc4,0xbf},{0xf4,0xe4},{0x9e,0x64},{0xf4,0xe3},{0x92,0xf1}, {0xf6,0x5d},{0xc5,0x48},{0xfd,0xb3},{0xf8,0x49},{0xf8,0xc8}, {0xf8,0xc7},{0x00,0x00},{0xc6,0x43},{0xc6,0x5d},{0xf8,0xc9}, {0xf9,0x71},{0x9e,0x65},{0xc6,0x6f},{0xa8,0xbc},{0xaa,0xf6}, {0x92,0xd8},{0xb9,0x56},{0x8c,0x5c},{0xc4,0xc0},{0xa8,0xbd}, {0xad,0xab},{0xb3,0xa5},{0xb6,0x71},{0xc2,0xe7},{0xaa,0xf7}, {0x00,0x00},{0xd0,0xc1},{0xd0,0xc0},{0xd4,0x42},{0x91,0xb9}, {0xb0,0x78},{0xb0,0x76},{0xb0,0x7a},{0xd4,0x44},{0x91,0xba}, {0xb0,0x79},{0xb0,0x77},{0x91,0xbb},{0x96,0x49},{0x00,0x00}, {0x91,0xbc},{0xd4,0x43},{0xb3,0xa8},{0xd7,0xfc},{0x91,0xbd}, {0xb3,0xa7},{0xb3,0xa9},{0xd8,0x42},{0xb3,0xab},{0xd7,0xfe}, {0xd8,0x40},{0xd7,0xf7},{0xb3,0xaa},{0xd8,0x43},{0x00,0x00}, {0x00,0x00},{0xd7,0xf9},{0x00,0x00},{0xd7,0xfa},{0xd7,0xf8}, {0xb3,0xa6},{0x91,0xbe},{0xd8,0x41},{0xd7,0xfb},{0xd7,0xfd}, {0x9e,0x66},{0x00,0x00},{0x91,0xbf},{0xdc,0x6d},{0xfd,0xb7}, {0xdc,0x6c},{0xdc,0x6a},{0xdc,0x62},{0xdc,0x71},{0xdc,0x65}, {0xdc,0x6f},{0xdc,0x76},{0xdc,0x6e},{0xb6,0x79},{0x9e,0x67}, {0xb6,0x75},{0xdc,0x63},{0x00,0x00},{0xdc,0x69},{0xb6,0x77}, {0x95,0x4c},{0xdc,0x68},{0xb6,0x78},{0xb6,0x7a},{0xdc,0x6b}, {0x9e,0x68},{0xb6,0x72},{0xb6,0x73},{0xdc,0x77},{0xdc,0x75}, {0x00,0x00},{0xdc,0x74},{0xdc,0x66},{0x00,0x00},{0xdc,0x72}, {0x00,0x00},{0xb6,0x76},{0x00,0x00},{0x00,0x00},{0x9e,0x69}, {0x00,0x00},{0xb6,0x74},{0xdc,0x73},{0xdc,0x64},{0xdc,0x67}, {0xdc,0x70},{0x9e,0x6a},{0x91,0xc0},{0xfb,0x5f},{0x9e,0x6b}, {0x91,0xc1},{0xe4,0xba},{0xe0,0xb7},{0x00,0x00},{0xe0,0xb0}, {0xe0,0xc3},{0xe0,0xcc},{0xe0,0xb3},{0xb9,0x61},{0x9e,0x6c}, {0xe0,0xc0},{0xb9,0x57},{0xb9,0x59},{0xb9,0x65},{0xe0,0xb1}, {0x00,0x00},{0x9e,0x6d},{0xb9,0x5a},{0xb9,0x5c},{0xb9,0x66}, {0xb9,0x5b},{0x9e,0x6e},{0x00,0x00},{0x00,0x00},{0x93,0x7b}, {0xb9,0x64},{0xe0,0xb9},{0x00,0x00},{0xe0,0xae},{0xb9,0x62}, {0xe0,0xb8},{0xb9,0x5e},{0xe0,0xca},{0xb9,0x63},{0xe0,0xc8}, {0xe0,0xbc},{0xe0,0xc6},{0xb9,0x60},{0xe0,0xaf},{0xe0,0xc9}, {0xe0,0xc4},{0x96,0x40},{0xe0,0xcb},{0xb9,0x58},{0x9e,0x6f}, {0x91,0xc3},{0xb9,0x67},{0xb9,0x5d},{0x00,0x00},{0x9e,0x70}, {0xe0,0xb5},{0x9e,0x71},{0xe0,0xbd},{0xe0,0xc1},{0x95,0xf1}, {0xe0,0xc5},{0xb9,0x5f},{0xe0,0xb4},{0xe0,0xb2},{0xe0,0xbe}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x9e,0x72},{0xe0,0xbb}, {0xe0,0xba},{0x9e,0x73},{0xe0,0xbf},{0xe0,0xc2},{0x92,0xc0}, {0xe0,0xc7},{0x96,0x43},{0x8c,0xe5},{0x00,0x00},{0xe4,0x78}, {0x91,0xc4},{0xbb,0xc7},{0xe4,0xa4},{0xe4,0x7a},{0xbb,0xcc}, {0xbb,0xd0},{0xe4,0xad},{0xe4,0xb5},{0xe4,0xa6},{0xbb,0xc8}, {0x9e,0x74},{0xe4,0xaa},{0xe0,0xb6},{0x9e,0x75},{0xbb,0xc9}, {0xe4,0xb1},{0xe4,0xb6},{0xe4,0xae},{0x9e,0x76},{0xe4,0xb0}, {0xe4,0xb9},{0xe4,0xb2},{0xe4,0x7e},{0xe4,0xa9},{0x9e,0x77}, {0x00,0x00},{0xbb,0xd1},{0x00,0x00},{0xbb,0xcd},{0xe4,0x7c}, {0xe4,0xab},{0xbb,0xcb},{0xe4,0xa5},{0xbb,0xca},{0xe4,0xb3}, {0xe4,0xa2},{0xe4,0x79},{0xbb,0xce},{0xe4,0xb8},{0x00,0x00}, {0x00,0x00},{0xe4,0x7b},{0xe4,0xaf},{0xe4,0xac},{0xe4,0xa7}, {0xe4,0x77},{0xe4,0x76},{0xe4,0xa1},{0xe4,0xb4},{0xbb,0xcf}, {0xe4,0xb7},{0xe4,0x7d},{0xe4,0xa3},{0xbe,0x52},{0x93,0x4b}, {0x8d,0xa8},{0x00,0x00},{0x00,0x00},{0x9e,0x78},{0xbe,0x5a}, {0xbe,0x55},{0xe8,0xa4},{0xe8,0xa1},{0xe8,0x67},{0xbe,0x50}, {0x00,0x00},{0xf9,0xd7},{0x9e,0x79},{0xbe,0x4f},{0xbe,0x56}, {0x00,0x00},{0xfd,0xb9},{0x9e,0x7a},{0xe8,0x65},{0xbe,0x54}, {0xe8,0x71},{0xe8,0x63},{0xe8,0x64},{0xbe,0x4e},{0xe8,0xa3}, {0xbe,0x58},{0xe8,0x74},{0xe8,0x79},{0xe8,0x73},{0xeb,0xee}, {0xe8,0x6f},{0xe8,0x77},{0xe8,0x75},{0xe8,0x68},{0xe8,0x62}, {0xe8,0x7d},{0xbe,0x57},{0xe8,0x7e},{0x9e,0x7b},{0xe8,0x78}, {0x00,0x00},{0xe8,0x6d},{0xe8,0x6b},{0xe8,0x66},{0x00,0x00}, {0x9e,0x7c},{0x00,0x00},{0xe8,0x6e},{0xe8,0x7b},{0xe8,0x6a}, {0xe8,0x7a},{0xe8,0xa2},{0x00,0x00},{0x9e,0x7d},{0xbe,0x53}, {0x9e,0x7e},{0xe8,0x76},{0xe8,0x7c},{0xe8,0x72},{0xe8,0x6c}, {0xbe,0x51},{0x9e,0xa1},{0x9e,0xa2},{0x91,0xc5},{0xe4,0xa8}, {0xe8,0x70},{0xbe,0x59},{0xe8,0x69},{0x94,0x58},{0x93,0x74}, {0x9e,0xa3},{0x00,0x00},{0x9e,0xa4},{0xeb,0xf4},{0xbf,0xf7}, {0xeb,0xf3},{0xeb,0xf0},{0xec,0x44},{0xbf,0xfb},{0x9e,0xa5}, {0xec,0x41},{0xeb,0xf8},{0xec,0x43},{0xeb,0xe9},{0xeb,0xf6}, {0x9e,0xa6},{0xbf,0xfd},{0x00,0x00},{0xeb,0xe1},{0x9e,0xa7}, {0xeb,0xdf},{0xec,0x42},{0x00,0x00},{0xec,0x40},{0xeb,0xfe}, {0xeb,0xed},{0xeb,0xec},{0xeb,0xe2},{0xc0,0x40},{0x00,0x00}, {0xeb,0xe8},{0xeb,0xf2},{0xeb,0xfd},{0xc0,0x43},{0xec,0x45}, {0x00,0x00},{0xc1,0xe8},{0xc0,0x45},{0xbf,0xfe},{0xeb,0xe6}, {0x00,0x00},{0xeb,0xef},{0xeb,0xde},{0xeb,0xe0},{0xbf,0xf5}, {0xc0,0x42},{0xbf,0xfa},{0xeb,0xe7},{0xeb,0xf7},{0xeb,0xf1}, {0xc0,0x41},{0xeb,0xdd},{0xc1,0xe3},{0xeb,0xf9},{0xeb,0xfc}, {0xbf,0xfc},{0x93,0xf3},{0xeb,0xeb},{0xc0,0x44},{0xbf,0xf9}, {0x9e,0xa8},{0x9e,0xa9},{0x93,0xf7},{0xbf,0xf8},{0xeb,0xf5}, {0xeb,0xfb},{0xbf,0xf6},{0x00,0x00},{0xeb,0xe4},{0xeb,0xfa}, {0x91,0xc6},{0x94,0xdb},{0xeb,0xe5},{0x00,0x00},{0x8b,0xd6}, {0x00,0x00},{0x9e,0xaa},{0xfe,0x7c},{0x9e,0xab},{0x9e,0xac}, {0x97,0x55},{0x96,0x42},{0xeb,0xea},{0xee,0xd2},{0xfe,0x79}, {0xee,0xd7},{0xc1,0xe5},{0xc1,0xe7},{0xee,0xdd},{0xc1,0xe1}, {0xee,0xec},{0xee,0xe3},{0xee,0xd8},{0xee,0xd9},{0xee,0xe2}, {0x00,0x00},{0xc1,0xee},{0xee,0xe1},{0xee,0xd1},{0xee,0xe0}, {0xee,0xd4},{0xee,0xed},{0xc1,0xed},{0xc1,0xeb},{0xee,0xd5}, {0x00,0x00},{0xee,0xe8},{0x9e,0xad},{0xee,0xda},{0xee,0xe7}, {0x9e,0xae},{0xee,0xe9},{0xee,0xd0},{0xc1,0xe6},{0x9e,0xaf}, {0xee,0xea},{0x9e,0xb0},{0x96,0x44},{0xee,0xde},{0xfd,0xba}, {0xc1,0xea},{0xee,0xdb},{0xfd,0xbb},{0x00,0x00},{0xc1,0xec}, {0xee,0xe4},{0x00,0x00},{0x9e,0xb1},{0x9e,0xb2},{0xc1,0xe4}, {0xee,0xd6},{0xee,0xe5},{0x9e,0xb3},{0xee,0xdf},{0xeb,0xe3}, {0xee,0xe6},{0xee,0xd3},{0x9e,0xb4},{0xc1,0xe9},{0x00,0x00}, {0xee,0xeb},{0x9e,0xb5},{0xc1,0xe2},{0xee,0xce},{0x9e,0xb6}, {0xfb,0x73},{0x9e,0xb7},{0x9e,0xb8},{0xf1,0x60},{0xf1,0x59}, {0xc2,0xe9},{0x00,0x00},{0xf1,0x54},{0xf1,0x63},{0xf1,0x5b}, {0xee,0xdc},{0x9e,0xb9},{0xf1,0x65},{0xf1,0x55},{0x00,0x00}, {0xc2,0xe8},{0xf1,0x5f},{0xc2,0xea},{0xc2,0xf2},{0xc2,0xf0}, {0xf1,0x61},{0xc2,0xf1},{0xf1,0x57},{0x9e,0xba},{0xf1,0x58}, {0xf1,0x5d},{0xf1,0x62},{0x9e,0xbb},{0xee,0xcd},{0xc2,0xeb}, {0xf1,0x6a},{0xf1,0x67},{0xf1,0x6b},{0xf1,0x5e},{0xf1,0x5a}, {0xf1,0x68},{0xf3,0x6a},{0xf1,0x5c},{0x00,0x00},{0xc2,0xee}, {0x97,0x56},{0xc2,0xed},{0xee,0xcf},{0xc2,0xef},{0xf1,0x64}, {0xf1,0x66},{0xc2,0xec},{0xf1,0x69},{0xf1,0x53},{0x00,0x00}, {0xf1,0x56},{0x9e,0xbc},{0x94,0xdc},{0xfd,0xbc},{0x9e,0xbd}, {0x00,0x00},{0x9e,0xbe},{0x00,0x00},{0x9e,0xbf},{0xf3,0x73}, {0x00,0x00},{0xf3,0x63},{0xc3,0xeb},{0xf3,0x71},{0x00,0x00}, {0x97,0x57},{0xf3,0x61},{0xc3,0xec},{0x00,0x00},{0xf3,0x6c}, {0x9e,0xc0},{0xf3,0x68},{0xc3,0xf1},{0xf3,0x72},{0xf3,0x62}, {0xf3,0x65},{0xc3,0xe9},{0xf3,0x74},{0x9e,0xc1},{0xf3,0x6d}, {0xf3,0x70},{0xc3,0xef},{0xc3,0xf4},{0xc3,0xf2},{0xf3,0x69}, {0xf3,0x64},{0x9e,0xc2},{0xc3,0xed},{0xc3,0xee},{0xf3,0x60}, {0xc3,0xea},{0x9e,0xc3},{0xc3,0xe8},{0xc3,0xf0},{0xf3,0x6f}, {0xc3,0xf3},{0x97,0x58},{0xf3,0x6b},{0xf3,0x75},{0xc3,0xf5}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xf3,0x67},{0x00,0x00}, {0xf3,0x6e},{0x00,0x00},{0x9e,0xc4},{0x9e,0xc5},{0x00,0x00}, {0x9e,0xc6},{0x9e,0xc7},{0xf4,0xf3},{0xf5,0x42},{0xf4,0xf5}, {0xf4,0xfc},{0xf3,0x66},{0xf4,0xfa},{0xf4,0xe9},{0xf5,0x40}, {0xc4,0xc3},{0xf4,0xed},{0xf4,0xfe},{0xf4,0xf4},{0x9e,0xc8}, {0x00,0x00},{0xc4,0xc2},{0x9e,0xc9},{0x00,0x00},{0xf5,0x44}, {0xf4,0xf6},{0x9e,0xca},{0xf4,0xfb},{0xf4,0xfd},{0xf4,0xe7}, {0xf5,0x41},{0xf4,0xf2},{0xf4,0xf7},{0xf4,0xeb},{0xf4,0xef}, {0xf5,0x43},{0xf4,0xf9},{0xf4,0xe8},{0xf4,0xec},{0xf4,0xee}, {0xf4,0xf8},{0x9e,0xcb},{0xc4,0xc1},{0xf4,0xf1},{0x97,0x59}, {0x9e,0xcc},{0x00,0x00},{0x9e,0xcd},{0x00,0x00},{0x00,0x00}, {0xf4,0xea},{0x97,0x5a},{0x00,0x00},{0x00,0x00},{0x9e,0xce}, {0x9e,0xcf},{0x9e,0xd0},{0xfd,0xbd},{0xf4,0xf0},{0xf6,0x61}, {0xf6,0x66},{0xc5,0x4f},{0xf6,0x68},{0x9e,0xd1},{0xc5,0x49}, {0x00,0x00},{0xf6,0x64},{0xf6,0x6a},{0xc5,0x4e},{0xc5,0x4a}, {0x00,0x00},{0xc5,0x4b},{0xf6,0x60},{0xf6,0x67},{0xc5,0x4d}, {0xf6,0x65},{0xc5,0x4c},{0xf6,0x5f},{0xf6,0x63},{0xf6,0x62}, {0x97,0x5b},{0xf6,0x5e},{0xf6,0x69},{0x97,0x5c},{0x9e,0xd2}, {0x9e,0xd3},{0xc5,0xb1},{0xf7,0x6d},{0xf7,0x70},{0xf7,0x6c}, {0xf7,0x6e},{0xf7,0x6f},{0xf7,0x69},{0xf7,0x6a},{0xf7,0x67}, {0x9e,0xd4},{0x00,0x00},{0xf7,0x6b},{0xf7,0x68},{0xc5,0xb2}, {0xc5,0xb3},{0x97,0x5d},{0x9e,0xd5},{0xf8,0x4b},{0x00,0x00}, {0xf8,0x4d},{0x9e,0xd6},{0x00,0x00},{0x97,0x5e},{0x95,0x58}, {0x00,0x00},{0xf8,0x4c},{0xf8,0x4e},{0x00,0x00},{0xc5,0xe0}, {0x00,0x00},{0xf8,0x4a},{0xc5,0xdf},{0xc5,0xe1},{0x9e,0xd7}, {0x00,0x00},{0x9e,0xd8},{0xf8,0xcb},{0xf8,0xcc},{0xc6,0x44}, {0xf8,0xca},{0x9e,0xd9},{0xf9,0x53},{0xf9,0x52},{0xf9,0x54}, {0xc6,0x5f},{0xf9,0x55},{0xc6,0x5e},{0xf9,0x56},{0xf9,0x72}, {0xf9,0x75},{0xf9,0x74},{0xc6,0x68},{0xf9,0x73},{0x9e,0xda}, {0x00,0x00},{0x9e,0xdb},{0xc6,0x72},{0xc6,0x70},{0xc6,0x71}, {0xc6,0x77},{0xf9,0xc0},{0xf9,0xc1},{0xf9,0xbf},{0xf9,0xc9}, {0x00,0x00},{0x9c,0xf0},{0x8d,0xc1},{0x8d,0xc0},{0x83,0xe1}, {0x83,0xe0},{0x83,0xe2},{0x83,0xe3},{0x8d,0xc7},{0x8d,0xd9}, {0x8d,0xd6},{0x84,0xb6},{0x8d,0xd7},{0x00,0x00},{0x84,0xb7}, {0x84,0xb5},{0x8f,0x46},{0x8d,0xd8},{0x00,0x00},{0x84,0xb4}, {0x00,0x00},{0x85,0x73},{0x97,0x5f},{0x8d,0xf4},{0x86,0x73}, {0x85,0x76},{0x85,0x71},{0x8c,0x5d},{0x85,0x74},{0x88,0xae}, {0x89,0xa1},{0x85,0x78},{0x85,0x77},{0x8d,0x76},{0x84,0xe8}, {0x85,0x75},{0x8b,0x4f},{0x86,0x6e},{0x8d,0xf7},{0x8d,0xf2}, {0x8d,0xf3},{0x8d,0xf6},{0x85,0x72},{0x8d,0xf5},{0x8e,0x5a}, {0x89,0x7e},{0x8e,0x5b},{0x86,0x68},{0x86,0x67},{0x84,0x73}, {0x8e,0x5c},{0x97,0x60},{0x86,0x6a},{0x86,0x69},{0x8d,0xb2}, {0x8d,0xa7},{0x8e,0x60},{0x8e,0x5f},{0x86,0x6b},{0x86,0x75}, {0x86,0x6c},{0x8c,0xb2},{0x86,0x6f},{0x86,0x70},{0x8d,0x44}, {0x86,0x6d},{0x86,0x76},{0x00,0x00},{0x8e,0x59},{0x86,0x71}, {0x8e,0x58},{0x86,0x72},{0x8e,0x5e},{0x86,0x74},{0x8c,0xb4}, {0x00,0x00},{0x88,0xa8},{0x8e,0xa5},{0x8e,0xa4},{0x00,0x00}, {0x00,0x00},{0x8e,0xa6},{0x8e,0xac},{0x8e,0xd1},{0x97,0x61}, {0x8c,0x5e},{0x00,0x00},{0x8c,0xb3},{0x87,0x66},{0x88,0xaa}, {0x97,0x62},{0x8e,0xa7},{0x8f,0xa7},{0x8f,0x6a},{0x87,0x68}, {0x87,0x6c},{0x8e,0xd5},{0x8e,0xad},{0x00,0x00},{0x8f,0xec}, {0x87,0x6a},{0x8f,0xcd},{0x8e,0xaa},{0x8e,0xa8},{0x87,0x69}, {0x87,0x67},{0x89,0xa4},{0x8e,0xa9},{0x87,0x64},{0x8e,0xa3}, {0x85,0xb6},{0x97,0x63},{0x8f,0xe5},{0x87,0x6b},{0x87,0x65}, {0x8e,0xab},{0x8c,0xe4},{0x8f,0xee},{0x88,0xa7},{0x00,0x00}, {0x8f,0x42},{0x8e,0xd2},{0x8b,0xce},{0x8b,0xd5},{0x88,0xa6}, {0x8b,0x4e},{0x88,0xaf},{0x97,0x64},{0x88,0xa9},{0x8a,0xa2}, {0x8e,0xd6},{0x8e,0xd7},{0x8c,0x5f},{0x88,0xac},{0x8e,0xd4}, {0x88,0xad},{0x88,0xa4},{0x8e,0x5d},{0x97,0x65},{0x97,0x66}, {0x88,0xab},{0x88,0xa5},{0x8e,0xd0},{0x8e,0xd3},{0x8e,0xd8}, {0x8f,0x44},{0x8f,0x40},{0x8f,0x41},{0x97,0x67},{0x89,0x7d}, {0x8a,0x7d},{0x8f,0x43},{0x00,0x00},{0x97,0x68},{0x8f,0x45}, {0x89,0xa7},{0x00,0x00},{0x89,0xa2},{0x89,0xa8},{0x8d,0xa9}, {0x8a,0xa3},{0x89,0xa5},{0x89,0xa6},{0x00,0x00},{0x90,0xf1}, {0x8e,0xfd},{0x97,0x69},{0x97,0x6a},{0x8e,0xfe},{0x89,0x7a}, {0x8a,0x7e},{0x89,0x7b},{0x89,0x7c},{0x89,0xa9},{0x8a,0xa1}, {0x00,0x00},{0x8f,0x69},{0x8b,0xd3},{0x8f,0x6b},{0x8a,0xa8}, {0x8f,0x68},{0x8a,0xa5},{0x8a,0xa4},{0x8a,0xa6},{0x8f,0xa8}, {0x00,0x00},{0x8a,0xa7},{0x97,0x6b},{0x8a,0x7b},{0x8a,0x7c}, {0x8b,0xd4},{0x00,0x00},{0x8f,0xea},{0x97,0x6c},{0x8a,0x42}, {0x8b,0x51},{0x00,0x00},{0x8b,0x54},{0x8d,0x7d},{0x00,0x00}, {0x8c,0xb6},{0x8b,0x50},{0x97,0x6d},{0x8f,0xa9},{0x8b,0x52}, {0x8b,0x4d},{0x8b,0x53},{0x8f,0xa6},{0x90,0x60},{0x00,0x00}, {0x8b,0xd1},{0x8b,0xcf},{0x8b,0xd0},{0x8b,0xd2},{0x00,0x00}, {0x8f,0xc9},{0x8b,0xcb},{0x8b,0xcc},{0x8b,0xcd},{0x8f,0xca}, {0x00,0x00},{0x8f,0xe8},{0x97,0x6e},{0x8f,0xe9},{0x8f,0xed}, {0x97,0x6f},{0x8f,0xe6},{0x90,0xa1},{0x8f,0xe7},{0x97,0x70}, {0x8f,0xcb},{0x8f,0xeb},{0x90,0x61},{0x8c,0xb1},{0x00,0x00}, {0x8c,0xb5},{0x8c,0xb0},{0x90,0x48},{0x97,0x71},{0x8d,0x43}, {0x00,0x00},{0x00,0x00},{0x8c,0x7c},{0xaa,0xf8},{0x9e,0xdc}, {0x00,0x00},{0xd8,0x44},{0xdc,0x78},{0xe8,0xa5},{0xf3,0x76}, {0x00,0x00},{0x83,0x63},{0xaa,0xf9},{0x00,0x00},{0xad,0xac}, {0xb0,0x7b},{0x00,0x00},{0x9e,0xdd},{0xd8,0x45},{0x97,0x72}, {0xd8,0x46},{0xb3,0xac},{0x94,0xdd},{0xb6,0x7d},{0xdc,0x7a}, {0xdc,0x79},{0xb6,0xa3},{0xb6,0x7c},{0xdc,0x7b},{0xb6,0x7e}, {0xb6,0xa2},{0xb6,0xa1},{0xb6,0x7b},{0x00,0x00},{0x94,0xde}, {0xfd,0xbe},{0xb9,0x68},{0x97,0x73},{0x00,0x00},{0xe0,0xd0}, {0xe0,0xce},{0x00,0x00},{0xe0,0xcf},{0xe0,0xcd},{0x97,0x74}, {0xbb,0xd2},{0x92,0x6b},{0xbb,0xd5},{0xbb,0xd7},{0xbb,0xd6}, {0x9e,0xde},{0xfd,0xbf},{0xbb,0xd3},{0xbb,0xd4},{0x9e,0xdf}, {0xe8,0xa7},{0xe8,0xa6},{0xbe,0x5b},{0xe8,0xa8},{0x00,0x00}, {0xe8,0xa9},{0xbe,0x5c},{0x97,0x75},{0x00,0x00},{0x00,0x00}, {0xec,0x4d},{0xec,0x4b},{0xee,0xf3},{0x00,0x00},{0xec,0x49}, {0xec,0x4a},{0xc0,0x46},{0xec,0x46},{0xec,0x4e},{0xec,0x48}, {0xec,0x4c},{0xee,0xef},{0x00,0x00},{0x00,0x00},{0xee,0xf1}, {0x00,0x00},{0xee,0xf2},{0xc1,0xf3},{0xee,0xee},{0xc1,0xf2}, {0xee,0xf0},{0xc1,0xef},{0xc1,0xf0},{0xc1,0xf1},{0xec,0x47}, {0x00,0x00},{0x00,0x00},{0xc2,0xf5},{0xf1,0x6e},{0xf1,0x6c}, {0xf1,0x6d},{0xc2,0xf3},{0xc2,0xf6},{0xc2,0xf4},{0x00,0x00}, {0x93,0xa7},{0x00,0x00},{0xf3,0x77},{0xf3,0x78},{0xc3,0xf6}, {0x00,0x00},{0xf5,0x45},{0xf5,0x47},{0xf5,0x46},{0xc4,0xc4}, {0xc5,0x50},{0xf6,0x6d},{0xf6,0x6c},{0xf6,0x6b},{0x00,0x00}, {0x00,0x00},{0x83,0x64},{0x83,0xa2},{0x83,0xe4},{0x8d,0xda}, {0x00,0x00},{0x84,0xb8},{0x83,0xf4},{0x8b,0x56},{0x85,0x7a}, {0x8a,0xac},{0x85,0x7c},{0x85,0x7e},{0x85,0x7d},{0x85,0x79}, {0x8d,0xf8},{0x84,0xdd},{0x86,0x77},{0x88,0xc1},{0x87,0x6e}, {0x87,0x47},{0x90,0x49},{0x87,0x6f},{0x88,0xb0},{0x00,0x00}, {0x87,0x71},{0x87,0x70},{0x87,0x6d},{0x8e,0xda},{0x90,0xac}, {0x88,0xb1},{0x8e,0xd9},{0x00,0x00},{0x8f,0x48},{0x8f,0x49}, {0x8f,0x4a},{0x8f,0xb0},{0x8f,0x4b},{0x8f,0x4c},{0x89,0xaa}, {0x8f,0x47},{0x8c,0x60},{0x8a,0xab},{0x8f,0x6c},{0x00,0x00}, {0x8a,0xa9},{0x8a,0xaa},{0x8b,0x55},{0x8b,0x57},{0x00,0x00}, {0x8b,0x58},{0x8f,0xef},{0x00,0x00},{0xaa,0xfa},{0x9c,0xf1}, {0xc9,0xaa},{0x85,0xa1},{0xca,0x58},{0xa6,0xe9},{0xca,0x56}, {0xca,0x59},{0xca,0x57},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xcb,0xae},{0x00,0x00},{0xa8,0xc1},{0x00,0x00},{0xa8,0xc2}, {0xcb,0xb0},{0xa8,0xbf},{0xcb,0xaf},{0xcb,0xad},{0xa8,0xc0}, {0xa8,0xbe},{0x85,0xa3},{0x84,0xbb},{0x83,0xe5},{0x85,0xa2}, {0x00,0x00},{0xfd,0xc1},{0xcd,0xd8},{0xcd,0xdb},{0xaa,0xfd}, {0xcd,0xda},{0xcd,0xd9},{0x00,0x00},{0xaa,0xfc},{0xaa,0xfb}, {0xfe,0x42},{0xab,0x40},{0xcd,0xdc},{0xaa,0xfe},{0x87,0x72}, {0x84,0xba},{0x8b,0xd8},{0x84,0xb9},{0x83,0xe7},{0xd0,0xc6}, {0xad,0xae},{0xad,0xaf},{0xad,0xb0},{0xd0,0xc7},{0xd0,0xc3}, {0xad,0xad},{0xd0,0xc4},{0x00,0x00},{0xd0,0xc5},{0xd0,0xc2}, {0x83,0xe6},{0x9e,0xe0},{0x00,0x00},{0xb0,0xa4},{0x00,0x00}, {0x00,0x00},{0xb0,0xa1},{0xd4,0x45},{0xb0,0xa2},{0xb0,0xa5}, {0xd4,0x46},{0x00,0x00},{0xb0,0x7e},{0xb0,0x7c},{0xb0,0x7d}, {0xb0,0xa3},{0x92,0x67},{0x97,0x76},{0x8d,0xf9},{0x86,0x78}, {0x89,0xac},{0xb3,0xad},{0xd8,0x49},{0xb3,0xb5},{0xd8,0x48}, {0x00,0x00},{0xd8,0x4b},{0xb3,0xb1},{0xd8,0x4a},{0xb6,0xab}, {0xb3,0xaf},{0xb3,0xb2},{0xb3,0xae},{0xb3,0xb3},{0xb3,0xb4}, {0xb3,0xb0},{0x00,0x00},{0x92,0xb4},{0x9e,0xe1},{0xd8,0x47}, {0xb6,0xa7},{0xdc,0x7d},{0x00,0x00},{0xdc,0xa3},{0xfd,0xc5}, {0x00,0x00},{0xdc,0xa2},{0xb6,0xac},{0xb6,0xa8},{0xb6,0xa9}, {0xdc,0x7c},{0xdc,0x7e},{0xdc,0xa1},{0xb6,0xa4},{0xb6,0xa6}, {0x00,0x00},{0xb6,0xaa},{0xb6,0xa5},{0x92,0xfa},{0x8a,0xad}, {0xe0,0xd3},{0xe0,0xd1},{0xe0,0xd2},{0xb9,0x6a},{0xb9,0x6b}, {0xfd,0xc4},{0xe0,0xd4},{0xb9,0x69},{0xbb,0xd8},{0x00,0x00}, {0xbb,0xda},{0xbb,0xd9},{0x97,0x77},{0xe4,0xbb},{0x00,0x00}, {0x92,0x47},{0xe4,0xbc},{0xe8,0xab},{0x95,0xf9},{0xe8,0xaa}, {0x9e,0xe2},{0x00,0x00},{0xc0,0x47},{0xc0,0x48},{0xec,0x4f}, {0xc0,0x49},{0x00,0x00},{0xee,0xf6},{0x00,0x00},{0xee,0xf4}, {0x97,0x78},{0xee,0xf5},{0xc1,0xf4},{0x97,0x79},{0xf1,0x6f}, {0xc3,0xf7},{0x00,0x00},{0xc6,0xd7},{0x95,0xfb},{0xc1,0xf5}, {0xab,0x41},{0x00,0x00},{0xb0,0xa6},{0xd4,0x47},{0x86,0x79}, {0x8b,0xd9},{0xd8,0x4c},{0xb3,0xb6},{0xb6,0xad},{0xdc,0xa4}, {0xdc,0xa6},{0xb6,0xaf},{0xb6,0xae},{0xb6,0xb0},{0xb6,0xb1}, {0xdc,0xa5},{0xb9,0x6e},{0xb9,0x6f},{0xb9,0x6d},{0xbb,0xdb}, {0xb9,0x6c},{0xe0,0xd5},{0x8b,0x5b},{0x00,0x00},{0x92,0xca}, {0xbb,0xdc},{0xe8,0xac},{0xec,0x50},{0xc0,0x4a},{0xc1,0xf6}, {0xf1,0x70},{0xf1,0x74},{0xc2,0xf9},{0xf1,0x71},{0xc2,0xfa}, {0xc2,0xf8},{0xf1,0x75},{0xc2,0xfb},{0xf1,0x73},{0x90,0x6d}, {0xf3,0x79},{0xc2,0xf7},{0xc3,0xf8},{0x00,0x00},{0xf8,0xcd}, {0x00,0x00},{0x00,0x00},{0xab,0x42},{0xb3,0xb8},{0xb3,0xb7}, {0x94,0x48},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xb6,0xb2}, {0xdc,0xa8},{0xdc,0xa7},{0xb6,0xb3},{0x8d,0x5e},{0x9e,0xe3}, {0xe0,0xd9},{0xb9,0x73},{0xb9,0x70},{0xe0,0xd8},{0xb9,0x72}, {0xe0,0xd6},{0xb9,0x71},{0x00,0x00},{0xe0,0xd7},{0x8b,0xda}, {0xe4,0xbd},{0xbb,0xdd},{0x8c,0xe6},{0xe8,0xaf},{0xfd,0xc7}, {0xbe,0x5d},{0xe8,0xad},{0xbe,0x5e},{0xbe,0x5f},{0xe8,0xae}, {0xbe,0x60},{0x93,0xed},{0xec,0x51},{0x00,0x00},{0xc0,0x4e}, {0xc0,0x4b},{0xc0,0x50},{0xec,0x53},{0xc0,0x4c},{0xec,0x52}, {0xc0,0x4f},{0x00,0x00},{0x00,0x00},{0xc0,0x4d},{0x00,0x00}, {0xee,0xf9},{0xee,0xfb},{0x00,0x00},{0x9e,0xe4},{0xc1,0xf7}, {0xee,0xfa},{0xc1,0xf8},{0xee,0xf8},{0xee,0xf7},{0xfd,0xc8}, {0xf1,0x77},{0xf1,0x76},{0xc2,0xfc},{0xf1,0x78},{0xf3,0x7e}, {0xc3,0xfa},{0xf3,0x7d},{0xf3,0x7a},{0xc3,0xf9},{0xf3,0x7b}, {0xf3,0x7c},{0x8d,0x60},{0xf5,0x48},{0xf5,0x49},{0xc4,0xc5}, {0xfd,0xc9},{0xc5,0x53},{0x97,0x7a},{0x9d,0xbb},{0xf6,0x6e}, {0x9e,0xe5},{0x00,0x00},{0xc5,0x51},{0xc5,0x52},{0xf6,0x6f}, {0x97,0x7b},{0x00,0x00},{0xc5,0xb4},{0xc5,0xb5},{0xf7,0x71}, {0x9e,0xe6},{0x9e,0xe7},{0xc6,0x45},{0xf8,0xcf},{0xc6,0x47}, {0x00,0x00},{0xf8,0xce},{0xf8,0xd0},{0xc6,0x46},{0xf9,0x57}, {0x00,0x00},{0xf9,0xad},{0x00,0x00},{0x97,0x7c},{0x00,0x00}, {0x97,0x7d},{0x00,0x00},{0x97,0x7e},{0xab,0x43},{0x8e,0xdb}, {0x00,0x00},{0x97,0xa1},{0xb9,0x74},{0x9e,0xe8},{0xe4,0xbe}, {0x93,0x43},{0xe8,0xb0},{0xc0,0x51},{0xc0,0x52},{0xfe,0x6d}, {0xab,0x44},{0xfd,0xca},{0xbe,0x61},{0xc3,0xfb},{0xad,0xb1}, {0x00,0x00},{0x97,0xa2},{0x8d,0x45},{0xc0,0x53},{0x00,0x00}, {0xc5,0xe2},{0xad,0xb2},{0xd8,0x4d},{0x97,0xa3},{0xdc,0xa9}, {0x95,0xf7},{0xdc,0xab},{0x00,0x00},{0xdc,0xaa},{0x97,0xa4}, {0xe0,0xdd},{0xe0,0xda},{0xb9,0x75},{0x00,0x00},{0xb9,0x76}, {0xe0,0xdb},{0xe0,0xdc},{0x94,0xdf},{0xe4,0xc0},{0xe4,0xc5}, {0xbb,0xde},{0xe4,0xbf},{0xe4,0xc1},{0xe4,0xc8},{0xe4,0xc3}, {0xe4,0xc7},{0xe4,0xc4},{0xe4,0xc2},{0xe4,0xc6},{0xbb,0xdf}, {0x94,0xe0},{0x9e,0xe9},{0xe8,0xb3},{0x9e,0xea},{0xe8,0xb1}, {0xbe,0x63},{0x00,0x00},{0xbe,0x62},{0xe8,0xb2},{0xbe,0x64}, {0x94,0xe1},{0x8c,0xe7},{0x97,0xa5},{0x00,0x00},{0xec,0x56}, {0x00,0x00},{0x00,0x00},{0xec,0x55},{0xc0,0x54},{0xec,0x54}, {0xee,0xfc},{0x9e,0xeb},{0xee,0xfe},{0xef,0x41},{0xef,0x40}, {0xfd,0xcb},{0xc1,0xf9},{0xee,0xfd},{0xf1,0xa1},{0xc2,0xfd}, {0xf1,0x7d},{0xf1,0xa2},{0xc2,0xfe},{0x00,0x00},{0xf1,0x7b}, {0x00,0x00},{0xf1,0x7e},{0xf1,0x7c},{0xf1,0x79},{0xc3,0x40}, {0xf1,0x7a},{0x8d,0x7e},{0x00,0x00},{0x9e,0xec},{0x97,0xa6}, {0xf3,0xa1},{0xfd,0xcc},{0x00,0x00},{0xf3,0xa3},{0xf3,0xa2}, {0xfd,0xcd},{0xf5,0x4a},{0xfd,0xce},{0xf5,0x4b},{0x00,0x00}, {0x9e,0xed},{0xfd,0xcf},{0xf6,0x70},{0x9e,0xee},{0xc5,0xb7}, {0x9e,0xef},{0xc5,0xb6},{0xf8,0x4f},{0xf8,0x50},{0xc6,0x48}, {0xf8,0xd1},{0xfd,0xd0},{0xc6,0x69},{0x00,0x00},{0xad,0xb3}, {0xb6,0xb4},{0xe4,0xca},{0xe4,0xc9},{0xe8,0xb5},{0xe8,0xb4}, {0x00,0x00},{0x9e,0xf0},{0xc1,0xfa},{0xef,0x43},{0xef,0x42}, {0xf1,0xa5},{0xf1,0xa3},{0xf1,0xa6},{0xf1,0xa4},{0x00,0x00}, {0x00,0x00},{0xc3,0xfc},{0xf3,0xa4},{0xf3,0xa5},{0xf3,0xa6}, {0x9e,0xf1},{0xf6,0x71},{0x00,0x00},{0xf7,0x72},{0x00,0x00}, {0xf8,0xd2},{0x83,0xa3},{0x85,0xa4},{0x00,0x00},{0x8a,0xb0}, {0x8f,0xab},{0x8f,0xce},{0x8b,0xdb},{0xad,0xb4},{0x95,0x61}, {0x00,0x00},{0xec,0x57},{0xef,0x44},{0x97,0xa7},{0xad,0xb5}, {0x00,0x00},{0x8b,0xdc},{0xbb,0xe0},{0x00,0x00},{0xec,0x58}, {0xc3,0x41},{0xf1,0xa7},{0xc3,0xfd},{0x00,0x00},{0xf5,0x4c}, {0xf5,0x4d},{0xc5,0x54},{0xf8,0x51},{0xad,0xb6},{0xb3,0xbb}, {0xb3,0xbc},{0xd8,0x4e},{0xb6,0xb5},{0xb6,0xb6},{0xdc,0xac}, {0xb6,0xb7},{0x00,0x00},{0xb9,0x7a},{0x00,0x00},{0xb9,0x7c}, {0xe0,0xdf},{0xe0,0xe0},{0xe0,0xde},{0xb9,0x77},{0xb9,0x78}, {0xb9,0x7b},{0xb9,0x79},{0x9e,0xf2},{0x9e,0xf3},{0xe4,0xcb}, {0xbb,0xe1},{0xbb,0xe2},{0x00,0x00},{0x82,0x5b},{0xe8,0xbc}, {0xbe,0x67},{0xe8,0xb7},{0xe8,0xb6},{0xfd,0xd2},{0xe8,0xbb}, {0xbe,0x65},{0x00,0x00},{0x9e,0xf4},{0xc0,0x5b},{0x00,0x00}, {0xe8,0xb8},{0xe8,0xbd},{0xe8,0xba},{0xe8,0xb9},{0x00,0x00}, {0xbe,0x66},{0x82,0x7b},{0xc0,0x59},{0xfd,0xd3},{0xec,0x5a}, {0xc0,0x55},{0x00,0x00},{0xec,0x5b},{0x9e,0xf5},{0x82,0x42}, {0xec,0x59},{0x00,0x00},{0xc0,0x58},{0xc0,0x56},{0xc0,0x5a}, {0x00,0x00},{0xc0,0x57},{0x93,0xdf},{0x97,0xa8},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xef,0x45},{0x00,0x00},{0xef,0x4a}, {0xef,0x46},{0xef,0x49},{0xc1,0xfb},{0xfd,0xd5},{0xed,0xd4}, {0xef,0x48},{0xef,0x47},{0xfd,0xd6},{0xc3,0x44},{0xc3,0x42}, {0xc3,0x45},{0xc3,0x43},{0xf1,0xa8},{0xf1,0xa9},{0xf1,0xaa}, {0xc3,0x46},{0x97,0xa9},{0x92,0xb8},{0x9d,0xd2},{0xf3,0xaa}, {0xc4,0x40},{0xf3,0xa8},{0x00,0x00},{0xc4,0x41},{0xf3,0xa7}, {0xf3,0xa9},{0xc3,0xfe},{0xf5,0x51},{0xf5,0x4e},{0x00,0x00}, {0xf5,0x4f},{0xf5,0x50},{0xf6,0x72},{0xc5,0x56},{0xfd,0xd7}, {0xc5,0x55},{0x9e,0xf6},{0xf7,0x74},{0xf7,0x73},{0xc5,0xb8}, {0xfd,0xd8},{0x00,0x00},{0x00,0x00},{0xc5,0xe3},{0xc6,0x49}, {0xc6,0x60},{0xf9,0x58},{0xf9,0xae},{0xf9,0xaf},{0x83,0xa4}, {0x84,0xbc},{0x84,0xbd},{0x8d,0xfa},{0x85,0xa5},{0x85,0xa6}, {0x85,0xa7},{0x86,0x7e},{0x86,0x7c},{0x8c,0xb8},{0x86,0x7d}, {0x8e,0x62},{0x86,0xa1},{0x86,0xa2},{0x8e,0x61},{0x86,0x7b}, {0x8d,0x77},{0x87,0x74},{0x87,0x73},{0x89,0xb0},{0x88,0xb3}, {0x89,0xaf},{0x00,0x00},{0x88,0xb4},{0x8e,0xba},{0x00,0x00}, {0x8e,0xdc},{0x89,0xb5},{0x89,0xb1},{0x00,0x00},{0x89,0xb4}, {0x89,0xb2},{0x00,0x00},{0x89,0x46},{0x8a,0xb1},{0x8b,0x5f}, {0x00,0x00},{0x8b,0x60},{0x8b,0x61},{0x8b,0x5e},{0x8b,0x5d}, {0x90,0xa7},{0x8f,0xf0},{0x8b,0xde},{0x8f,0xcf},{0x8c,0xb9}, {0x00,0x00},{0x8c,0xe9},{0x97,0xaa},{0x8d,0x61},{0x90,0xa8}, {0xad,0xb7},{0xdc,0xad},{0x94,0xe2},{0x00,0x00},{0xe0,0xe1}, {0xe4,0xcc},{0xe4,0xcd},{0xbb,0xe3},{0x00,0x00},{0xbb,0xe4}, {0xe8,0xbe},{0xbe,0x68},{0xfd,0xd9},{0x00,0x00},{0xc1,0xfc}, {0x9e,0xf7},{0xf1,0xab},{0x9e,0xf8},{0xc3,0x47},{0xf3,0xad}, {0xc4,0x42},{0xf3,0xac},{0xf3,0xae},{0xf3,0xab},{0xf6,0x75}, {0xf5,0x52},{0xf5,0x53},{0x97,0xab},{0xc4,0xc6},{0x00,0x00}, {0xf6,0x74},{0x9e,0xf9},{0xfb,0xb2},{0xf6,0x73},{0x9e,0xfa}, {0xf7,0x75},{0xf9,0xb0},{0x00,0x00},{0x83,0xa5},{0x00,0x00}, {0x00,0x00},{0x8e,0xae},{0x87,0x75},{0x8a,0xb2},{0x00,0x00}, {0x8b,0xdf},{0x00,0x00},{0x00,0x00},{0x8c,0x61},{0x90,0x4a}, {0x97,0xac},{0xad,0xb8},{0xfd,0xdb},{0x00,0x00},{0x83,0xa6}, {0xad,0xb9},{0x9e,0xfb},{0x9e,0xfc},{0xb0,0xa7},{0xd4,0x48}, {0x00,0x00},{0xd8,0x4f},{0xfd,0xdc},{0xb6,0xb8},{0x8c,0xba}, {0xb6,0xbb},{0xb6,0xb9},{0xdc,0xae},{0x9e,0xfd},{0xb6,0xbd}, {0x97,0xad},{0xb6,0xba},{0x00,0x00},{0x95,0xda},{0xb6,0xbc}, {0x00,0x00},{0xb9,0x7e},{0x9e,0xfe},{0xe0,0xe2},{0x00,0x00}, {0x00,0x00},{0xe0,0xe3},{0xe8,0xc0},{0x00,0x00},{0xb9,0x7d}, {0xb9,0xa1},{0xb9,0xa2},{0x00,0x00},{0xe4,0xcf},{0x00,0x00}, {0xe4,0xce},{0xbb,0xe5},{0x00,0x00},{0xbb,0xe6},{0x00,0x00}, {0xe4,0xd0},{0xe8,0xbf},{0xbb,0xe8},{0xbe,0x69},{0x00,0x00}, {0xbb,0xe7},{0x8d,0x47},{0x9f,0x70},{0x00,0x00},{0xc0,0x5c}, {0xe8,0xc1},{0xbe,0x6b},{0xbe,0x6a},{0xe8,0xc2},{0xe8,0xc5}, {0xe8,0xc3},{0xe8,0xc4},{0xbe,0x6c},{0x9f,0x71},{0xc0,0x61}, {0xc0,0x5f},{0x9f,0x72},{0x97,0xae},{0xc0,0x5e},{0xec,0x5d}, {0x97,0xaf},{0xc0,0x60},{0x00,0x00},{0x00,0x00},{0xec,0x5c}, {0xef,0x4b},{0x00,0x00},{0xec,0x5e},{0xc0,0x5d},{0xec,0x5f}, {0xef,0x4e},{0xef,0x4c},{0xef,0x4d},{0xef,0x52},{0xc3,0x4b}, {0xef,0x51},{0xef,0x54},{0xef,0x53},{0xef,0x50},{0xef,0x4f}, {0x00,0x00},{0xc1,0xfd},{0x00,0x00},{0x9f,0x73},{0xa0,0x44}, {0xfd,0xde},{0xf1,0xae},{0xfd,0xdf},{0xf1,0xad},{0xc3,0x4a}, {0xc3,0x48},{0xc3,0x49},{0xfb,0xb3},{0xf1,0xac},{0xfd,0xdd}, {0xf3,0xb1},{0x00,0x00},{0xc4,0x43},{0x00,0x00},{0xf3,0xb0}, {0xf3,0xaf},{0xc4,0x44},{0xfd,0xe1},{0xf5,0x58},{0xf5,0x57}, {0xfb,0xb4},{0xf5,0x55},{0x00,0x00},{0xf5,0x54},{0xc4,0xc8}, {0xc4,0xc7},{0xf5,0x59},{0xf7,0x76},{0xc5,0xb9},{0xf6,0x77}, {0xc5,0x57},{0xf6,0x76},{0xf5,0x56},{0x00,0x00},{0xf7,0x77}, {0xc5,0xe4},{0x9f,0x74},{0xc6,0x61},{0xf9,0x59},{0x00,0x00}, {0xf9,0xb1},{0x9f,0x75},{0x97,0xb0},{0x00,0x00},{0x83,0xe8}, {0x00,0x00},{0x8f,0x6d},{0x85,0xaa},{0x8f,0xac},{0x85,0xa8}, {0x8d,0xfb},{0x85,0xac},{0x85,0xa9},{0x85,0xab},{0x89,0xb7}, {0x86,0xa6},{0x86,0xa5},{0x86,0xa3},{0x00,0x00},{0x86,0xa4}, {0x87,0x78},{0x8c,0x62},{0x87,0x79},{0x00,0x00},{0x00,0x00}, {0x87,0x76},{0x00,0x00},{0x87,0x77},{0x8e,0xdd},{0x00,0x00}, {0x88,0xb6},{0x97,0xb1},{0x88,0xb7},{0x00,0x00},{0x00,0x00}, {0x89,0xb8},{0x89,0xb9},{0x89,0xb6},{0x97,0xb2},{0x8b,0x64}, {0x00,0x00},{0x8b,0x63},{0x8d,0x78},{0x00,0x00},{0x97,0xb3}, {0x00,0x00},{0x8b,0x62},{0x8f,0xd0},{0x8b,0xe1},{0x8b,0xe0}, {0x97,0xb4},{0x8f,0xf1},{0x97,0xb5},{0xad,0xba},{0xd8,0x50}, {0xef,0x55},{0xad,0xbb},{0x00,0x00},{0x9f,0x76},{0xe4,0xd2}, {0xe4,0xd1},{0xec,0x60},{0x00,0x00},{0x00,0x00},{0xef,0x57}, {0x00,0x00},{0xef,0x56},{0x9f,0x77},{0xc3,0x4c},{0xf3,0xb2}, {0xf3,0xb3},{0xc4,0xc9},{0x00,0x00},{0x9f,0x78},{0xf9,0xb2}, {0xb0,0xa8},{0xb6,0xbf},{0xb6,0xbe},{0xe0,0xe4},{0xe0,0xe6}, {0xb9,0xa4},{0xe0,0xe5},{0xb9,0xa3},{0xb9,0xa5},{0xe0,0xe7}, {0x00,0x00},{0x00,0x00},{0x9f,0x79},{0xe4,0xd4},{0xe4,0xd6}, {0xe4,0xd5},{0x97,0xb6},{0xe4,0xd8},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xbb,0xe9},{0xe4,0xd7},{0xe4,0xd3},{0x94,0x4b}, {0x92,0x4a},{0x92,0xa3},{0xe4,0xd9},{0x97,0xb7},{0xe8,0xcc}, {0x00,0x00},{0xe8,0xcf},{0xe8,0xd1},{0xe8,0xc7},{0xe8,0xcb}, {0xe8,0xc8},{0xbe,0x6e},{0xbe,0x71},{0xbe,0x73},{0xe8,0xc9}, {0xe8,0xca},{0xbe,0x72},{0xe8,0xcd},{0xe8,0xd0},{0xe8,0xce}, {0xbe,0x74},{0xfd,0xe4},{0xbe,0x70},{0xe8,0xc6},{0xbe,0x6d}, {0x00,0x00},{0xbe,0x6f},{0x9f,0x7a},{0x95,0xc4},{0xc0,0x63}, {0xec,0x66},{0xec,0x64},{0xec,0x63},{0x9f,0x7b},{0xec,0x69}, {0x00,0x00},{0xec,0x68},{0xec,0x67},{0x00,0x00},{0xec,0x62}, {0xc0,0x62},{0xec,0x61},{0x00,0x00},{0xec,0x65},{0xc0,0x64}, {0x97,0xb8},{0x00,0x00},{0xef,0x5a},{0x9f,0x7c},{0xef,0x5e}, {0xef,0x5b},{0xef,0x5d},{0xef,0x5c},{0xef,0x59},{0xef,0x5f}, {0xef,0x62},{0xef,0x60},{0xef,0x61},{0xc2,0x40},{0x00,0x00}, {0xc1,0xfe},{0xef,0x58},{0xef,0x63},{0xf1,0xb3},{0xf1,0xb6}, {0xf1,0xb8},{0xf1,0xb7},{0x00,0x00},{0xf1,0xb1},{0xf1,0xb5}, {0xf1,0xb0},{0xfb,0xb5},{0xf1,0xb2},{0xc3,0x4d},{0xf1,0xaf}, {0x95,0xe1},{0xf1,0xb4},{0x93,0x5d},{0x92,0xb9},{0xf3,0xc0}, {0xf3,0xb5},{0xc4,0x45},{0x00,0x00},{0x00,0x00},{0xc4,0x46}, {0xf3,0xb4},{0xf3,0xb9},{0xf3,0xbf},{0xf3,0xb7},{0xf3,0xbe}, {0x9f,0x7d},{0xf3,0xbb},{0x9a,0xfb},{0xf3,0xba},{0xf3,0xbd}, {0xf3,0xb8},{0xf3,0xb6},{0x9a,0xfc},{0xf3,0xbc},{0x82,0x55}, {0xf5,0x60},{0xf5,0x5e},{0xc4,0xca},{0xf5,0x5d},{0xf5,0x63}, {0xf5,0x61},{0x9a,0xfd},{0xc4,0xcb},{0xf5,0x5c},{0xf5,0x5a}, {0x00,0x00},{0xf5,0x5b},{0xc4,0xcd},{0xf5,0x5f},{0xc4,0xcc}, {0xf5,0x62},{0xf6,0x78},{0xf6,0x7e},{0x9c,0xfa},{0x9c,0xfb}, {0xf6,0x79},{0xc5,0x5b},{0xf6,0xa1},{0xc5,0x5a},{0xf6,0x7d}, {0xf6,0x7c},{0xc5,0x59},{0xf6,0x7b},{0xc5,0x58},{0xf6,0x7a}, {0x00,0x00},{0xf7,0x7d},{0xf7,0xa1},{0xf7,0x7e},{0x00,0x00}, {0xf7,0x7b},{0xc5,0xbb},{0xf7,0x78},{0xf7,0x7c},{0xf7,0xa3}, {0x00,0x00},{0xf7,0xa2},{0xf7,0x79},{0xf7,0x7a},{0xc5,0xba}, {0xf8,0x52},{0xc5,0xe7},{0x9c,0xfc},{0xf8,0x53},{0xc5,0xe5}, {0xc5,0xe6},{0x9c,0xfd},{0x00,0x00},{0xf8,0xd3},{0xc6,0x4a}, {0xf9,0x76},{0x00,0x00},{0xc6,0x6a},{0x9c,0xfe},{0xf9,0xb3}, {0xc6,0x6b},{0xf9,0xb4},{0xf9,0xb5},{0xf9,0xc3},{0xf9,0xc2}, {0xc6,0x7a},{0xf9,0xcd},{0x83,0xe9},{0x85,0xae},{0x86,0xa8}, {0x86,0xa9},{0x86,0xa7},{0x8c,0xbb},{0x00,0x00},{0x87,0x7a}, {0x8d,0xa1},{0x8e,0xde},{0x88,0xbb},{0x88,0xba},{0x88,0xbf}, {0x88,0xbe},{0x8f,0xf2},{0x88,0xb9},{0x88,0xb8},{0x88,0xbc}, {0x88,0xbd},{0x8d,0x49},{0x8e,0xdf},{0x8c,0xeb},{0x88,0x4c}, {0x00,0x00},{0x8c,0xea},{0x90,0x63},{0x89,0xbc},{0x89,0xba}, {0x89,0xbb},{0x00,0x00},{0x8d,0xaf},{0x8a,0xb3},{0x8d,0x4a}, {0x00,0x00},{0x00,0x00},{0x8a,0xb4},{0x8f,0xad},{0x8b,0x65}, {0x8f,0xae},{0x8f,0xaf},{0x00,0x00},{0x00,0x00},{0x90,0x4c}, {0x8b,0xe3},{0x8f,0xf5},{0x00,0x00},{0x8c,0x66},{0x8b,0xe2}, {0x90,0x4d},{0x8f,0xf3},{0x8c,0x64},{0x8f,0xf4},{0x8c,0xbc}, {0x8c,0xbe},{0x90,0x4b},{0x90,0x62},{0x8d,0x62},{0x8d,0xa2}, {0x00,0x00},{0x90,0xa9},{0xb0,0xa9},{0x00,0x00},{0x00,0x00}, {0xe0,0xe9},{0x00,0x00},{0xe0,0xe8},{0x00,0x00},{0xbb,0xea}, {0xbb,0xeb},{0xe4,0xda},{0x9d,0xb0},{0xe8,0xd2},{0xec,0x6c}, {0x00,0x00},{0x97,0xb9},{0xbe,0x75},{0xc0,0x65},{0xec,0x6a}, {0xfd,0xe6},{0xec,0x6d},{0xc0,0x66},{0xfd,0xe7},{0xef,0x64}, {0xec,0x6b},{0xf1,0xb9},{0xc3,0x4e},{0xf3,0xc1},{0x00,0x00}, {0x92,0xfb},{0x8c,0xbf},{0xf5,0x66},{0xf5,0x64},{0x00,0x00}, {0x00,0x00},{0xf5,0x65},{0x8d,0x79},{0x90,0x79},{0xf6,0xa2}, {0x00,0x00},{0xc5,0x5c},{0xf7,0xa4},{0xc5,0xea},{0xc5,0xbc}, {0xc5,0xe8},{0xc5,0xe9},{0xf8,0xd4},{0xc6,0x62},{0xfb,0xb6}, {0xb0,0xaa},{0x97,0xba},{0x00,0x00},{0x00,0x00},{0xf1,0xba}, {0x00,0x00},{0x97,0xbb},{0xd4,0x49},{0x9d,0xb1},{0xb9,0xa6}, {0xfd,0xec},{0xe4,0xdb},{0x00,0x00},{0x00,0x00},{0xbb,0xec}, {0xe4,0xdc},{0x00,0x00},{0x00,0x00},{0x93,0xba},{0xe8,0xd4}, {0xe8,0xd3},{0xc0,0x68},{0xbe,0x76},{0xbe,0x77},{0x00,0x00}, {0xe8,0xd7},{0xe8,0xd6},{0xe8,0xd5},{0xfe,0x57},{0x00,0x00}, {0xec,0x6e},{0xec,0x71},{0x00,0x00},{0xec,0x70},{0xec,0x6f}, {0xc0,0x67},{0xef,0x68},{0xef,0x66},{0xef,0x65},{0xfd,0xee}, {0x00,0x00},{0xef,0x67},{0xfd,0xed},{0xc3,0x4f},{0xf1,0xbc}, {0xf1,0xbd},{0xc3,0x50},{0x00,0x00},{0xf1,0xbb},{0xfd,0xf0}, {0xf3,0xc3},{0xf3,0xc2},{0xf3,0xc5},{0xc4,0x47},{0xf3,0xc4}, {0x97,0xbc},{0xf5,0x67},{0xf5,0x69},{0xf5,0x68},{0x8d,0x63}, {0x9d,0xb2},{0xf6,0xa3},{0xf6,0xa6},{0xf6,0xa4},{0xf6,0xa5}, {0xf7,0xa5},{0xc5,0xbd},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xf8,0x54},{0xf8,0x55},{0xf8,0x56},{0x00,0x00},{0xc6,0x4b}, {0xc6,0x63},{0xf9,0xb6},{0xb0,0xab},{0x00,0x00},{0xbe,0x78}, {0xc0,0x69},{0xf1,0xbe},{0xfd,0xe9},{0xf7,0xa6},{0x00,0x00}, {0xfd,0xeb},{0xf9,0xc4},{0xd4,0x4a},{0x00,0x00},{0xc6,0x7b}, {0xb0,0xac},{0xec,0x72},{0x9d,0xb3},{0xf1,0xbf},{0x00,0x00}, {0xf3,0xc6},{0x00,0x00},{0x9d,0xb4},{0xf6,0xa7},{0xf7,0xa7}, {0xb0,0xad},{0x00,0x00},{0xe4,0xdd},{0xe4,0xde},{0x9d,0xb5}, {0xbb,0xed},{0xbb,0xee},{0xe8,0xd9},{0xbe,0x7a},{0xbe,0x79}, {0xe8,0xd8},{0x8d,0x64},{0xef,0x69},{0x97,0xbd},{0xf1,0xc0}, {0xf1,0xc2},{0xf1,0xc1},{0xc3,0x53},{0xc3,0x52},{0xc3,0x51}, {0x9d,0xb6},{0xc5,0x5e},{0xf6,0xa8},{0x00,0x00},{0xc5,0x5d}, {0xf7,0xa9},{0xf7,0xa8},{0x00,0x00},{0xc6,0x4c},{0xf8,0xd5}, {0xb3,0xbd},{0xe0,0xea},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xe4,0xe1},{0xe4,0xdf},{0xe4,0xe0},{0x00,0x00},{0x00,0x00}, {0xe8,0xe2},{0x00,0x00},{0xe8,0xdd},{0xe8,0xda},{0xe8,0xe1}, {0xfe,0xaf},{0x00,0x00},{0x00,0x00},{0xe8,0xe3},{0x00,0x00}, {0x00,0x00},{0xbe,0x7c},{0xe8,0xe0},{0xe8,0xdc},{0x97,0xbe}, {0x00,0x00},{0xe8,0xdb},{0xe8,0xdf},{0xe8,0xde},{0xbe,0x7b}, {0x00,0x00},{0x00,0x00},{0xec,0x7d},{0xec,0x78},{0xec,0x76}, {0xec,0xa1},{0xec,0x77},{0x9d,0xb7},{0xec,0x73},{0x9d,0xee}, {0xec,0x79},{0x97,0xbf},{0x00,0x00},{0xec,0x74},{0xef,0x72}, {0xec,0x75},{0xec,0xa2},{0x00,0x00},{0x00,0x00},{0x9d,0xef}, {0x00,0x00},{0x9d,0xf0},{0x94,0xfe},{0xfd,0xf3},{0xec,0x7c}, {0xc0,0x6a},{0xec,0x7b},{0xec,0x7a},{0x00,0x00},{0xec,0x7e}, {0x94,0xe3},{0x94,0xe4},{0x00,0x00},{0x00,0x00},{0xef,0x6a}, {0xef,0x6d},{0x00,0x00},{0xfd,0xf4},{0xef,0x6c},{0x97,0xc0}, {0xef,0x74},{0xef,0x6f},{0xef,0x73},{0x00,0x00},{0xef,0x71}, {0xef,0x70},{0xef,0x6e},{0x00,0x00},{0xef,0x6b},{0x00,0x00}, {0xc2,0x43},{0xc2,0x42},{0x00,0x00},{0xc2,0x44},{0xc2,0x41}, {0xef,0x75},{0xfd,0xf5},{0x94,0xf5},{0x00,0x00},{0x00,0x00}, {0x94,0xe5},{0xf1,0xc8},{0xf1,0xcb},{0x00,0x00},{0xf1,0xc9}, {0xf1,0xcd},{0x00,0x00},{0x97,0xc1},{0x00,0x00},{0xf1,0xce}, {0x00,0x00},{0xf1,0xc6},{0xc3,0x58},{0xf1,0xc7},{0x00,0x00}, {0xf1,0xc5},{0xf1,0xcc},{0x00,0x00},{0xf1,0xc4},{0xf1,0xc3}, {0xc3,0x57},{0xc3,0x55},{0xc3,0x54},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x94,0xe6},{0x00,0x00},{0x94,0xe7}, {0x94,0xe8},{0xf1,0xca},{0xf3,0xcf},{0xf3,0xd5},{0xc4,0x4a}, {0xf3,0xd0},{0x00,0x00},{0xf3,0xd3},{0xf3,0xd7},{0xc4,0x4b}, {0xf3,0xd2},{0x9d,0xf1},{0xf3,0xca},{0x00,0x00},{0xf3,0xc9}, {0xf3,0xd6},{0xf3,0xcd},{0x97,0xc2},{0xf3,0xcb},{0xf3,0xd4}, {0xf3,0xcc},{0xc4,0x49},{0xc4,0x48},{0x9d,0xf2},{0xf3,0xc7}, {0xf3,0xc8},{0xf3,0xd1},{0x9d,0xf3},{0x00,0x00},{0x00,0x00}, {0xf3,0xce},{0x94,0xea},{0x94,0xe9},{0x00,0x00},{0x9d,0xf4}, {0x97,0xc3},{0x00,0x00},{0xf5,0x6c},{0xf5,0x6f},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0xc3,0x56},{0x00,0x00}, {0xfd,0xf9},{0x97,0xc4},{0x00,0x00},{0xfe,0x50},{0x00,0x00}, {0x97,0xc5},{0xf5,0x6d},{0xf5,0x73},{0xf5,0x71},{0xf5,0x6b}, {0xf5,0x76},{0xfd,0xf8},{0xf5,0x6a},{0xfd,0xf6},{0xc4,0xcf}, {0xf5,0x72},{0x00,0x00},{0x95,0xfd},{0x00,0x00},{0xf5,0x6e}, {0xc4,0xce},{0xf5,0x75},{0xfd,0xf7},{0x00,0x00},{0xf5,0x74}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x97,0xc6},{0xf6,0xab}, {0xf6,0xaa},{0x00,0x00},{0x9d,0xf5},{0x9d,0xf6},{0xf6,0xb1}, {0x00,0x00},{0xf6,0xad},{0xf6,0xb0},{0xc5,0x60},{0x9d,0xf7}, {0x00,0x00},{0xf6,0xae},{0xf6,0xaf},{0x00,0x00},{0xf6,0xa9}, {0xf6,0xac},{0xc5,0x5f},{0xfd,0xfa},{0x94,0xf9},{0x94,0xeb}, {0xc5,0xbf},{0xf7,0xb4},{0xf7,0xaf},{0xf7,0xb3},{0xfd,0x53}, {0xf7,0xb6},{0xf7,0xb2},{0x00,0x00},{0xf7,0xae},{0xfc,0xcb}, {0xc5,0xc1},{0xf7,0xb1},{0xf7,0xb5},{0xc5,0xc0},{0xf7,0xac}, {0xf5,0x70},{0xf7,0xb0},{0x00,0x00},{0x00,0x00},{0xf7,0xad}, {0xfd,0x70},{0xf7,0xaa},{0x94,0xec},{0xf7,0xab},{0xc5,0xbe}, {0xf8,0x5a},{0xf8,0x5c},{0xf8,0x5f},{0xf8,0x5b},{0xf8,0x60}, {0x9f,0x50},{0xf8,0x59},{0x00,0x00},{0xf8,0x57},{0x9d,0xf8}, {0xc5,0xeb},{0xf8,0x5d},{0xc5,0xed},{0xc5,0xec},{0xf8,0x58}, {0xf8,0x5e},{0x94,0xed},{0x00,0x00},{0x00,0x00},{0x9d,0xf9}, {0xf8,0xda},{0xc6,0x4d},{0xf8,0xdb},{0x00,0x00},{0xf8,0xd9}, {0xf8,0xd6},{0x00,0x00},{0x00,0x00},{0xf8,0xd8},{0xf8,0xd7}, {0xf9,0x5a},{0x94,0xf6},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xf9,0x5c},{0xf9,0x5b},{0x00,0x00},{0x00,0x00},{0xf9,0x79}, {0xfb,0x78},{0xf9,0x78},{0xf9,0x77},{0xf9,0x7a},{0x98,0x40}, {0xc6,0x73},{0xc6,0x74},{0xf9,0xca},{0xf9,0xce},{0x9d,0xfa}, {0x84,0xbe},{0x00,0x00},{0x00,0x00},{0x88,0xc2},{0x00,0x00}, {0x88,0xc3},{0x8e,0xe0},{0x00,0x00},{0x00,0x00},{0x98,0x4b}, {0x98,0x4c},{0x98,0x4d},{0x8d,0xab},{0x00,0x00},{0x00,0x00}, {0x98,0x4e},{0x00,0x00},{0x89,0xbf},{0x8d,0x65},{0x00,0x00}, {0x98,0x4f},{0x8a,0xb8},{0x8f,0x6e},{0x00,0x00},{0x8a,0xb7}, {0x8f,0x6f},{0x00,0x00},{0x90,0xf2},{0x00,0x00},{0x00,0x00}, {0x90,0xa2},{0x8a,0xb6},{0x8a,0xb5},{0x00,0x00},{0x98,0x50}, {0x90,0x70},{0x8f,0xb2},{0x90,0xad},{0x8c,0xed},{0x90,0x65}, {0x8b,0x68},{0x90,0x4e},{0x90,0x66},{0x8b,0x6a},{0x8b,0x67}, {0x8f,0xb1},{0x00,0x00},{0x8b,0x69},{0x00,0x00},{0x8b,0xe6}, {0x98,0x51},{0x00,0x00},{0x98,0x52},{0x8f,0xd5},{0x98,0x53}, {0x8b,0xe5},{0x98,0x54},{0x8f,0xd2},{0x8f,0xd3},{0x8b,0xe7}, {0x8b,0xe4},{0x00,0x00},{0x98,0x55},{0x8f,0xd4},{0x98,0x56}, {0x98,0x57},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x8c,0x67},{0x8d,0xaa},{0x8c,0x68},{0x98,0x58}, {0x98,0x59},{0x00,0x00},{0x00,0x00},{0x98,0x5a},{0x98,0x5b}, {0x8d,0x6a},{0x8c,0xc0},{0x90,0x4f},{0x8c,0xc1},{0x90,0x50}, {0x00,0x00},{0x00,0x00},{0x98,0x5c},{0x8c,0xee},{0x90,0x64}, {0x8c,0xec},{0x8c,0xef},{0x98,0x5d},{0x98,0x5e},{0x00,0x00}, {0x00,0x00},{0x8d,0x4f},{0x8d,0x4d},{0x8d,0x4e},{0x90,0x6f}, {0x00,0x00},{0x00,0x00},{0x98,0x5f},{0x00,0x00},{0x00,0x00}, {0xb3,0xbe},{0xdc,0xaf},{0xe0,0xed},{0x00,0x00},{0xb9,0xa7}, {0xe0,0xeb},{0x98,0x60},{0x98,0x61},{0xe0,0xec},{0x00,0x00}, {0x00,0x00},{0x94,0xee},{0xe4,0xe2},{0xe4,0xe3},{0xbb,0xf1}, {0xbb,0xef},{0xe4,0xe4},{0xbb,0xf0},{0xe8,0xe8},{0x00,0x00}, {0xe8,0xeb},{0xe8,0xe5},{0xe8,0xec},{0xe8,0xe4},{0xe8,0xe6}, {0x00,0x00},{0xe8,0xe7},{0xe8,0xea},{0x00,0x00},{0xfd,0x61}, {0xbe,0xa1},{0xe8,0xef},{0xe8,0xee},{0xbe,0x7d},{0xe8,0xe9}, {0xe8,0xed},{0xbe,0x7e},{0x00,0x00},{0x00,0x00},{0x9d,0xfb}, {0x00,0x00},{0x82,0x48},{0x00,0x00},{0xec,0xac},{0x00,0x00}, {0xc0,0x6f},{0x00,0x00},{0xec,0xa7},{0xc0,0x6b},{0x9d,0xfc}, {0xec,0xa4},{0xec,0xaa},{0xec,0xad},{0x00,0x00},{0xc0,0x70}, {0x00,0x00},{0xec,0xa9},{0xec,0xa6},{0xec,0xae},{0xec,0xa5}, {0x9f,0x40},{0xec,0xab},{0xc0,0x6c},{0x00,0x00},{0xec,0xa3}, {0xc0,0x6d},{0x00,0x00},{0xc0,0x6e},{0xec,0xa8},{0x98,0x62}, {0x94,0x47},{0x82,0x47},{0xef,0xa9},{0xef,0x7a},{0xef,0x7b}, {0xef,0x7e},{0xef,0x7c},{0x00,0x00},{0xef,0x76},{0x9f,0x41}, {0x00,0x00},{0xef,0x79},{0xef,0xa5},{0xef,0x7d},{0x9f,0x42}, {0x00,0x00},{0xc2,0x45},{0x00,0x00},{0xef,0xa7},{0xef,0xa4}, {0xc2,0x46},{0xef,0xa6},{0xef,0x77},{0xef,0xa2},{0xef,0xa3}, {0xfd,0xaa},{0xef,0xa1},{0x94,0xef},{0x94,0xf7},{0x98,0x63}, {0x9f,0x43},{0xf1,0xd2},{0xf1,0xd4},{0xf1,0xd7},{0x00,0x00}, {0x9f,0x44},{0xf1,0xd1},{0x98,0x64},{0xc3,0x59},{0xf1,0xd9}, {0xf1,0xd0},{0xf1,0xda},{0x00,0x00},{0xf1,0xd6},{0xf1,0xd8}, {0xf1,0xdc},{0xf1,0xd5},{0xf1,0xdd},{0xf1,0xd3},{0xf1,0xcf}, {0xc3,0x5a},{0x95,0x72},{0xf1,0xdb},{0xc3,0x5b},{0xc4,0x4d}, {0x00,0x00},{0x00,0x00},{0x94,0xf0},{0x94,0xf8},{0x00,0x00}, {0xef,0x78},{0xf3,0xf1},{0xf3,0xe8},{0xc4,0x4f},{0xf3,0xe4}, {0xc4,0x50},{0x9f,0x45},{0x9f,0x47},{0xf3,0xed},{0xf3,0xe7}, {0xf3,0xdd},{0xc4,0x4e},{0xf3,0xea},{0xf3,0xe5},{0xf3,0xe6}, {0x00,0x00},{0xf3,0xd8},{0xf3,0xdf},{0xf3,0xee},{0x98,0x65}, {0xf3,0xeb},{0x9f,0x48},{0xf3,0xe3},{0xfc,0xc6},{0xf3,0xef}, {0xf3,0xde},{0xf3,0xd9},{0xf3,0xec},{0x9f,0x49},{0xf3,0xdb}, {0xf3,0xe9},{0xf3,0xe0},{0xf3,0xf0},{0xf3,0xdc},{0xc4,0x4c}, {0xf3,0xda},{0xf3,0xe1},{0xf3,0xe2},{0x00,0x00},{0x00,0x00}, {0x92,0xaf},{0xf5,0x7d},{0x00,0x00},{0xf5,0x7b},{0x9f,0x4a}, {0xf5,0xa2},{0x00,0x00},{0xf5,0xae},{0xf5,0xa5},{0xf5,0x7c}, {0xf5,0x78},{0xf5,0xa7},{0xf5,0x7e},{0xf5,0xa3},{0xf5,0x7a}, {0xf5,0xaa},{0xf5,0x77},{0xf5,0xa1},{0xf5,0xa6},{0xf5,0xa8}, {0xf5,0xab},{0xf5,0x79},{0x9f,0x4b},{0xf5,0xaf},{0xf5,0xb0}, {0xf5,0xa9},{0xf5,0xad},{0xf5,0xa4},{0x94,0xf1},{0xf6,0xc1}, {0xf6,0xc4},{0x00,0x00},{0xc5,0x61},{0x00,0x00},{0xf6,0xc3}, {0xf6,0xc8},{0xf6,0xc6},{0xc5,0x62},{0xf6,0xbd},{0xf6,0xb3}, {0xf6,0xb2},{0xc5,0x64},{0xf6,0xbf},{0xf6,0xc0},{0xf6,0xbc}, {0xf6,0xb4},{0x9f,0x4d},{0xf6,0xb9},{0xf5,0xac},{0x9f,0x52}, {0xf6,0xb5},{0xc5,0x63},{0xf6,0xbb},{0x95,0x75},{0xf6,0xba}, {0x98,0x66},{0xf6,0xb6},{0xf6,0xc2},{0x9f,0x5e},{0xf6,0xb7}, {0xf7,0xbb},{0xf6,0xc5},{0xf6,0xc7},{0xf6,0xbe},{0xf6,0xb8}, {0xf7,0xbc},{0xf7,0xbe},{0xf7,0xb8},{0xc5,0xc2},{0x9f,0x5f}, {0xf7,0xc5},{0xf7,0xc3},{0xc5,0xc3},{0xf7,0xc2},{0xf7,0xc1}, {0xf7,0xba},{0xf7,0xb7},{0xf7,0xbd},{0xf7,0xc6},{0xf7,0xb9}, {0xf7,0xbf},{0x00,0x00},{0xf8,0x69},{0xf8,0x6e},{0xf8,0x64}, {0xf8,0x67},{0xc5,0xee},{0xf8,0x6b},{0x00,0x00},{0xf8,0x72}, {0xf7,0xc0},{0x00,0x00},{0xf8,0x65},{0xf8,0x6f},{0xf8,0x73}, {0xf8,0x6a},{0xf8,0x63},{0xf8,0x6d},{0x00,0x00},{0xf8,0x6c}, {0xf8,0x71},{0xf8,0x70},{0xf7,0xc4},{0xf8,0x68},{0xf8,0x62}, {0xf8,0x66},{0xc6,0x4e},{0xc6,0x4f},{0xf8,0x61},{0x9f,0x60}, {0xf8,0xe6},{0xf8,0xdd},{0xf8,0xe5},{0xf8,0xe2},{0xf8,0xe3}, {0xf8,0xdc},{0xf8,0xdf},{0xf8,0xe7},{0xf8,0xe1},{0xf8,0xe0}, {0xf8,0xde},{0x00,0x00},{0xf8,0xe4},{0x9f,0x61},{0xf9,0x5d}, {0x9f,0x62},{0xf9,0x5e},{0x9f,0x63},{0xf9,0x60},{0xf9,0x5f}, {0xf9,0x62},{0xf9,0x61},{0xf9,0x7c},{0xf9,0x7b},{0xf9,0xb7}, {0x00,0x00},{0xf9,0xb8},{0x9f,0x64},{0xf9,0xc5},{0xc6,0x78}, {0xc6,0x7c},{0xfd,0x4a},{0xf9,0xcf},{0xc6,0x7d},{0x84,0xbf}, {0x86,0xaa},{0x8b,0x5c},{0x87,0x7e},{0x87,0x7d},{0x00,0x00}, {0x8c,0xf1},{0x88,0xc5},{0x00,0x00},{0x8e,0xe1},{0x88,0xc4}, {0x89,0xc1},{0x8f,0xd7},{0x90,0xaa},{0x89,0xc3},{0x00,0x00}, {0x89,0xc2},{0x00,0x00},{0x8f,0x4e},{0x8f,0x4d},{0x89,0xc4}, {0x00,0x00},{0x89,0xc0},{0x8d,0x50},{0x90,0x68},{0x8f,0x70}, {0x8f,0x71},{0x8f,0x72},{0x00,0x00},{0x00,0x00},{0x8a,0xba}, {0x8d,0xb1},{0x8a,0xb9},{0x00,0x00},{0x8f,0xb4},{0x90,0xae}, {0x8b,0x6b},{0x8b,0x6d},{0x8b,0x6c},{0x8f,0xb5},{0x90,0x75}, {0x8f,0xb3},{0x8b,0xe9},{0x8b,0xea},{0x98,0x67},{0x8b,0xeb}, {0x00,0x00},{0x8f,0xd6},{0x8b,0xec},{0x00,0x00},{0x8b,0xe8}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x98,0x68},{0x00,0x00}, {0x8f,0xf6},{0x90,0x52},{0x00,0x00},{0x8f,0xf7},{0x98,0x69}, {0x8f,0xf8},{0x00,0x00},{0x8c,0xc4},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x90,0x51},{0x8c,0xc3},{0x00,0x00}, {0x8d,0xae},{0x8c,0xf0},{0x90,0x67},{0x90,0x71},{0x90,0x73}, {0x90,0x74},{0x90,0x72},{0x8d,0x67},{0x00,0x00},{0x00,0x00}, {0x8d,0x66},{0x98,0x6a},{0x00,0x00},{0x8d,0xb0},{0x00,0x00}, {0xb3,0xbf},{0x00,0x00},{0x00,0x00},{0x82,0x5e},{0xc4,0xd0}, {0xf6,0xc9},{0x9f,0x65},{0xc6,0x50},{0xc6,0x51},{0x90,0x53}, {0xb3,0xc0},{0xe0,0xee},{0xfc,0xfd},{0xb9,0xa8},{0xe8,0xf0}, {0xfb,0x5e},{0x9f,0x66},{0xec,0xb0},{0xec,0xb1},{0xec,0xaf}, {0xef,0xab},{0xef,0xaa},{0xc2,0x47},{0xf1,0xdf},{0xef,0xac}, {0xf1,0xde},{0x00,0x00},{0x9f,0x51},{0xf3,0xf3},{0xc4,0x51}, {0xc4,0x53},{0xf3,0xf2},{0xfc,0xf4},{0xfb,0x7c},{0xc4,0x52}, {0xfb,0xb7},{0xf5,0xb1},{0xf5,0xb3},{0xf5,0xb2},{0xf6,0xca}, {0xc5,0x65},{0xfd,0x48},{0xc5,0xef},{0xf8,0xe8},{0xf9,0x63}, {0x9f,0x67},{0x00,0x00},{0xf9,0xd2},{0xb3,0xc1},{0x84,0xc1}, {0xe4,0xe5},{0xfd,0xb4},{0xbe,0xa2},{0x98,0x6b},{0xfb,0xa2}, {0x9f,0x68},{0xec,0xb3},{0xec,0xb2},{0x95,0x73},{0xef,0xad}, {0x9f,0x69},{0x00,0x00},{0x00,0x00},{0xc4,0x54},{0xc4,0xd1}, {0xf7,0xc7},{0xf9,0xcb},{0x88,0xc6},{0x82,0x60},{0x82,0x61}, {0xb3,0xc2},{0xbb,0xf2},{0x98,0x6c},{0xbe,0xa3},{0x94,0xfa}, {0xf3,0xf4},{0x9f,0x6a},{0xf8,0x74},{0xb6,0xc0},{0x98,0x6d}, {0x00,0x00},{0x9f,0x6b},{0x9f,0x6c},{0xef,0xae},{0x8d,0x7a}, {0x00,0x00},{0x00,0x00},{0xc6,0x64},{0xb6,0xc1},{0xbe,0xa4}, {0xc2,0x48},{0xf8,0x75},{0xb6,0xc2},{0x92,0xc3},{0xe8,0xf1}, {0xc0,0x72},{0xec,0xb4},{0xec,0xb5},{0x00,0x00},{0xc0,0x71}, {0x93,0xd4},{0xef,0xaf},{0xc2,0x4c},{0xc2,0x4a},{0xc2,0x4b}, {0xc2,0x49},{0xf1,0xe0},{0xc3,0x5c},{0x00,0x00},{0x98,0x6e}, {0x00,0x00},{0xf5,0xb5},{0xf5,0xb4},{0xf5,0xb7},{0xf5,0xb6}, {0xc4,0xd2},{0x8d,0xac},{0x98,0x6f},{0xf6,0xcb},{0x00,0x00}, {0xf6,0xcd},{0xf6,0xcc},{0xc5,0x66},{0xf7,0xc8},{0x9f,0x6d}, {0xf8,0x76},{0xf8,0x77},{0xc5,0xf0},{0xf9,0x64},{0xf9,0x7d}, {0xc6,0x75},{0x9f,0x6e},{0xdc,0xb0},{0xec,0xb6},{0xef,0xb0}, {0xf3,0xf5},{0xe0,0xef},{0x8e,0x64},{0xef,0xb1},{0xf1,0xe2}, {0xf1,0xe1},{0xfd,0xe8},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xf8,0x78},{0xc6,0x52},{0x98,0x70},{0xf9,0x65},{0xf9,0x7e}, {0x98,0x71},{0x00,0x00},{0x98,0x72},{0xb9,0xa9},{0xe8,0xf2}, {0xe8,0xf3},{0x00,0x00},{0xec,0xb7},{0xb9,0xaa},{0x00,0x00}, {0xc3,0x5d},{0xf1,0xe3},{0xfc,0xdb},{0xf6,0xcf},{0xc5,0x67}, {0xf6,0xd0},{0xf6,0xce},{0xf8,0x79},{0x00,0x00},{0xf8,0xe9}, {0x00,0x00},{0xb9,0xab},{0x98,0x73},{0xef,0xb4},{0xef,0xb3}, {0xef,0xb2},{0xf1,0xe4},{0xfb,0xb8},{0x9f,0x6f},{0xf1,0xe8}, {0xf1,0xe7},{0xf1,0xe6},{0xf1,0xe5},{0xc3,0x5e},{0xf3,0xf6}, {0xf5,0xb9},{0xc4,0xd3},{0xf5,0xb8},{0xf6,0xd1},{0xf7,0xcb}, {0xf7,0xca},{0xc5,0xc4},{0xf7,0xc9},{0xf8,0x7c},{0xf8,0x7b}, {0xf8,0x7a},{0x8c,0xf2},{0x00,0x00},{0xbb,0xf3},{0x00,0x00}, {0xec,0xb8},{0xc2,0x4d},{0x00,0x00},{0xf3,0xf7},{0xf3,0xf8}, {0xf7,0xcc},{0xf8,0x7d},{0x98,0x74},{0xfd,0xe2},{0xf8,0xea}, {0xf9,0x66},{0xf9,0xb9},{0xf9,0xd4},{0xbb,0xf4},{0xc2,0x4e}, {0xf1,0xe9},{0xf3,0xf9},{0xf6,0xd2},{0xf8,0x7e},{0x87,0xa2}, {0x98,0x75},{0xbe,0xa6},{0xfd,0xe0},{0xef,0xb5},{0xf1,0xea}, {0xf3,0xfa},{0xf3,0xfb},{0xf3,0xfc},{0xf5,0xbe},{0xfd,0xda}, {0xf5,0xba},{0xc5,0x68},{0xf5,0xbd},{0xf5,0xbc},{0xc4,0xd4}, {0xf5,0xbb},{0xc4,0xd6},{0x93,0xee},{0xc4,0xd5},{0xf6,0xd4}, {0xf6,0xd3},{0xc5,0x69},{0xc5,0x6a},{0x00,0x00},{0xfd,0x62}, {0xc5,0xc6},{0xf7,0xcd},{0xc5,0xc5},{0x00,0x00},{0xf8,0xa3}, {0xf8,0xa4},{0xf8,0xa2},{0xf8,0xa1},{0xc6,0x54},{0x00,0x00}, {0xf8,0xeb},{0xf8,0xec},{0xf8,0xed},{0xc6,0x53},{0xf9,0x67}, {0xf9,0x6a},{0xf9,0x69},{0xf9,0x68},{0x00,0x00},{0x00,0x00}, {0xf9,0xd3},{0x88,0xc7},{0x8f,0x73},{0x00,0x00},{0x00,0x00}, {0x8c,0x6a},{0x8c,0x6b},{0x8f,0xfa},{0x8f,0xf9},{0x8c,0xc5}, {0x8c,0xc6},{0x8c,0xf3},{0x8c,0xf4},{0x8d,0x6c},{0x8d,0x6b}, {0xc0,0x73},{0xfb,0xd8},{0x00,0x00},{0xc3,0x65},{0xf5,0xbf}, {0xf6,0xd5},{0x00,0x00},{0xc5,0xc7},{0xf7,0xce},{0x00,0x00}, {0x00,0x00},{0xf9,0xd5},{0x89,0xc5},{0x8c,0xf5},{0x90,0x69}, {0xc0,0x74},{0x98,0x76},{0x00,0x00},{0x89,0xc6},{0xef,0xb6}, {0x00,0x00},{0xf7,0xcf},{0x00,0x00},{0xf9,0xa1},{0xfd,0xd4}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0xc8,0xa1},{0xc8,0xa3},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xfa,0x40}, {0xfa,0x41},{0xfa,0x42},{0xfa,0x43},{0xfa,0x44},{0xfa,0x45}, {0xfa,0x46},{0xfa,0x47},{0xfa,0x48},{0xfa,0x49},{0xfa,0x4a}, {0xfa,0x4b},{0xfa,0x4c},{0xfa,0x4d},{0xfa,0x4e},{0xfa,0x4f}, {0xfa,0x50},{0xfa,0x51},{0xfa,0x52},{0xfa,0x53},{0xfa,0x54}, {0xfa,0x55},{0xfa,0x56},{0xfa,0x57},{0xfa,0x58},{0xfa,0x59}, {0xfa,0x5a},{0xfa,0x5b},{0xfa,0x5c},{0xfa,0x5d},{0xfa,0x5e}, {0xfa,0x5f},{0xfa,0x60},{0xfa,0x61},{0xfa,0x62},{0xfa,0x63}, {0xfa,0x64},{0xfa,0x65},{0xfa,0x66},{0xfa,0x67},{0xfa,0x68}, {0xfa,0x69},{0xfa,0x6a},{0xfa,0x6b},{0xfa,0x6c},{0xfa,0x6d}, {0xfa,0x6e},{0xfa,0x6f},{0xfa,0x70},{0xfa,0x71},{0xfa,0x72}, {0xfa,0x73},{0xfa,0x74},{0xfa,0x75},{0xfa,0x76},{0xfa,0x77}, {0xfa,0x78},{0xfa,0x79},{0xfa,0x7a},{0xfa,0x7b},{0xfa,0x7c}, {0xfa,0x7d},{0xfa,0x7e},{0xfa,0xa1},{0xfa,0xa2},{0xfa,0xa3}, {0xfa,0xa4},{0xfa,0xa5},{0xfa,0xa6},{0xfa,0xa7},{0xfa,0xa8}, {0xfa,0xa9},{0xfa,0xaa},{0xfa,0xab},{0xfa,0xac},{0xfa,0xad}, {0xfa,0xae},{0xfa,0xaf},{0xfa,0xb0},{0xfa,0xb1},{0xfa,0xb2}, {0xfa,0xb3},{0xfa,0xb4},{0xfa,0xb5},{0xfa,0xb6},{0xfa,0xb7}, {0xfa,0xb8},{0xfa,0xb9},{0xfa,0xba},{0xfa,0xbb},{0xfa,0xbc}, {0xfa,0xbd},{0xfa,0xbe},{0xfa,0xbf},{0xfa,0xc0},{0xfa,0xc1}, {0xfa,0xc2},{0xfa,0xc3},{0xfa,0xc4},{0xfa,0xc5},{0xfa,0xc6}, {0xfa,0xc7},{0xfa,0xc8},{0xfa,0xc9},{0xfa,0xca},{0xfa,0xcb}, {0xfa,0xcc},{0xfa,0xcd},{0xfa,0xce},{0xfa,0xcf},{0xfa,0xd0}, {0xfa,0xd1},{0xfa,0xd2},{0xfa,0xd3},{0xfa,0xd4},{0xfa,0xd5}, {0xfa,0xd6},{0xfa,0xd7},{0xfa,0xd8},{0xfa,0xd9},{0xfa,0xda}, {0xfa,0xdb},{0xfa,0xdc},{0xfa,0xdd},{0xfa,0xde},{0xfa,0xdf}, {0xfa,0xe0},{0xfa,0xe1},{0xfa,0xe2},{0xfa,0xe3},{0xfa,0xe4}, {0xfa,0xe5},{0xfa,0xe6},{0xfa,0xe7},{0xfa,0xe8},{0xfa,0xe9}, {0xfa,0xea},{0xfa,0xeb},{0xfa,0xec},{0xfa,0xed},{0xfa,0xee}, {0xfa,0xef},{0xfa,0xf0},{0xfa,0xf1},{0xfa,0xf2},{0xfa,0xf3}, {0xfa,0xf4},{0xfa,0xf5},{0xfa,0xf6},{0xfa,0xf7},{0xfa,0xf8}, {0xfa,0xf9},{0xfa,0xfa},{0xfa,0xfb},{0xfa,0xfc},{0xfa,0xfd}, {0xfa,0xfe},{0xfb,0x40},{0xfb,0x41},{0xfb,0x42},{0xfb,0x43}, {0xfb,0x44},{0xfb,0x45},{0xfb,0x46},{0xfb,0x47},{0xfb,0x48}, {0xfb,0x49},{0xfb,0x4a},{0xfb,0x4b},{0xfb,0x4c},{0xfb,0x4d}, {0xfb,0x4e},{0xfb,0x4f},{0xfb,0x50},{0xfb,0x51},{0xfb,0x52}, {0xfb,0x53},{0xfb,0x54},{0xfb,0x55},{0xfb,0x56},{0xfb,0x57}, {0xfb,0x58},{0xfb,0x59},{0xfb,0x5a},{0xfb,0x5b},{0xfb,0x5c}, {0xfb,0x5d},{0xfb,0x5e},{0xfb,0x5f},{0xfb,0x60},{0xfb,0x61}, {0xfb,0x62},{0xfb,0x63},{0xfb,0x64},{0xfb,0x65},{0xfb,0x66}, {0xfb,0x67},{0xfb,0x68},{0xfb,0x69},{0xfb,0x6a},{0xfb,0x6b}, {0xfb,0x6c},{0xfb,0x6d},{0xfb,0x6e},{0xfb,0x6f},{0xfb,0x70}, {0xfb,0x71},{0xfb,0x72},{0xfb,0x73},{0xfb,0x74},{0xfb,0x75}, {0xfb,0x76},{0xfb,0x77},{0xfb,0x78},{0xfb,0x79},{0xfb,0x7a}, {0xfb,0x7b},{0xfb,0x7c},{0xfb,0x7d},{0xfb,0x7e},{0xfb,0xa1}, {0xfb,0xa2},{0xfb,0xa3},{0xfb,0xa4},{0xfb,0xa5},{0xfb,0xa6}, {0xfb,0xa7},{0xfb,0xa8},{0xfb,0xa9},{0xfb,0xaa},{0xfb,0xab}, {0xfb,0xac},{0xfb,0xad},{0xfb,0xae},{0xfb,0xaf},{0xfb,0xb0}, {0xfb,0xb1},{0xfb,0xb2},{0xfb,0xb3},{0xfb,0xb4},{0xfb,0xb5}, {0xfb,0xb6},{0xfb,0xb7},{0xfb,0xb8},{0xfb,0xb9},{0xfb,0xba}, {0xfb,0xbb},{0xfb,0xbc},{0xfb,0xbd},{0xfb,0xbe},{0xfb,0xbf}, {0xfb,0xc0},{0xfb,0xc1},{0xfb,0xc2},{0xfb,0xc3},{0xfb,0xc4}, {0xfb,0xc5},{0xfb,0xc6},{0xfb,0xc7},{0xfb,0xc8},{0xfb,0xc9}, {0xfb,0xca},{0xfb,0xcb},{0xfb,0xcc},{0xfb,0xcd},{0xfb,0xce}, {0xfb,0xcf},{0xfb,0xd0},{0xfb,0xd1},{0xfb,0xd2},{0xfb,0xd3}, {0xfb,0xd4},{0xfb,0xd5},{0xfb,0xd6},{0xfb,0xd7},{0xfb,0xd8}, {0xfb,0xd9},{0xfb,0xda},{0xfb,0xdb},{0xfb,0xdc},{0xfb,0xdd}, {0xfb,0xde},{0xfb,0xdf},{0xfb,0xe0},{0xfb,0xe1},{0xfb,0xe2}, {0xfb,0xe3},{0xfb,0xe4},{0xfb,0xe5},{0xfb,0xe6},{0xfb,0xe7}, {0xfb,0xe8},{0xfb,0xe9},{0xfb,0xea},{0xfb,0xeb},{0xfb,0xec}, {0xfb,0xed},{0xfb,0xee},{0xfb,0xef},{0xfb,0xf0},{0xfb,0xf1}, {0xfb,0xf2},{0xfb,0xf3},{0xfb,0xf4},{0xfb,0xf5},{0xfb,0xf6}, {0xfb,0xf7},{0xfb,0xf8},{0xfb,0xf9},{0xfb,0xfa},{0xfb,0xfb}, {0xfb,0xfc},{0xfb,0xfd},{0xfb,0xfe},{0xfc,0x40},{0xfc,0x41}, {0xfc,0x42},{0xfc,0x43},{0xfc,0x44},{0xfc,0x45},{0xfc,0x46}, {0xfc,0x47},{0xfc,0x48},{0xfc,0x49},{0xfc,0x4a},{0xfc,0x4b}, {0xfc,0x4c},{0xfc,0x4d},{0xfc,0x4e},{0xfc,0x4f},{0xfc,0x50}, {0xfc,0x51},{0xfc,0x52},{0xfc,0x53},{0xfc,0x54},{0xfc,0x55}, {0xfc,0x56},{0xfc,0x57},{0xfc,0x58},{0xfc,0x59},{0xfc,0x5a}, {0xfc,0x5b},{0xfc,0x5c},{0xfc,0x5d},{0xfc,0x5e},{0xfc,0x5f}, {0xfc,0x60},{0xfc,0x61},{0xfc,0x62},{0xfc,0x63},{0xfc,0x64}, {0xfc,0x65},{0xfc,0x66},{0xfc,0x67},{0xfc,0x68},{0xfc,0x69}, {0xfc,0x6a},{0xfc,0x6b},{0xfc,0x6c},{0xfc,0x6d},{0xfc,0x6e}, {0xfc,0x6f},{0xfc,0x70},{0xfc,0x71},{0xfc,0x72},{0xfc,0x73}, {0xfc,0x74},{0xfc,0x75},{0xfc,0x76},{0xfc,0x77},{0xfc,0x78}, {0xfc,0x79},{0xfc,0x7a},{0xfc,0x7b},{0xfc,0x7c},{0xfc,0x7d}, {0xfc,0x7e},{0xfc,0xa1},{0xfc,0xa2},{0xfc,0xa3},{0xfc,0xa4}, {0xfc,0xa5},{0xfc,0xa6},{0xfc,0xa7},{0xfc,0xa8},{0xfc,0xa9}, {0xfc,0xaa},{0xfc,0xab},{0xfc,0xac},{0xfc,0xad},{0xfc,0xae}, {0xfc,0xaf},{0xfc,0xb0},{0xfc,0xb1},{0xfc,0xb2},{0xfc,0xb3}, {0xfc,0xb4},{0xfc,0xb5},{0xfc,0xb6},{0xfc,0xb7},{0xfc,0xb8}, {0xfc,0xb9},{0xfc,0xba},{0xfc,0xbb},{0xfc,0xbc},{0xfc,0xbd}, {0xfc,0xbe},{0xfc,0xbf},{0xfc,0xc0},{0xfc,0xc1},{0xfc,0xc2}, {0xfc,0xc3},{0xfc,0xc4},{0xfc,0xc5},{0xfc,0xc6},{0xfc,0xc7}, {0xfc,0xc8},{0xfc,0xc9},{0xfc,0xca},{0xfc,0xcb},{0xfc,0xcc}, {0xfc,0xcd},{0xfc,0xce},{0xfc,0xcf},{0xfc,0xd0},{0xfc,0xd1}, {0xfc,0xd2},{0xfc,0xd3},{0xfc,0xd4},{0xfc,0xd5},{0xfc,0xd6}, {0xfc,0xd7},{0xfc,0xd8},{0xfc,0xd9},{0xfc,0xda},{0xfc,0xdb}, {0xfc,0xdc},{0xfc,0xdd},{0xfc,0xde},{0xfc,0xdf},{0xfc,0xe0}, {0xfc,0xe1},{0xfc,0xe2},{0xfc,0xe3},{0xfc,0xe4},{0xfc,0xe5}, {0xfc,0xe6},{0xfc,0xe7},{0xfc,0xe8},{0xfc,0xe9},{0xfc,0xea}, {0xfc,0xeb},{0xfc,0xec},{0xfc,0xed},{0xfc,0xee},{0xfc,0xef}, {0xfc,0xf0},{0xfc,0xf1},{0xfc,0xf2},{0xfc,0xf3},{0xfc,0xf4}, {0xfc,0xf5},{0xfc,0xf6},{0xfc,0xf7},{0xfc,0xf8},{0xfc,0xf9}, {0xfc,0xfa},{0xfc,0xfb},{0xfc,0xfc},{0xfc,0xfd},{0xfc,0xfe}, {0xfd,0x40},{0xfd,0x41},{0xfd,0x42},{0xfd,0x43},{0xfd,0x44}, {0xfd,0x45},{0xfd,0x46},{0xfd,0x47},{0xfd,0x48},{0xfd,0x49}, {0xfd,0x4a},{0xfd,0x4b},{0xfd,0x4c},{0xfd,0x4d},{0xfd,0x4e}, {0xfd,0x4f},{0xfd,0x50},{0xfd,0x51},{0xfd,0x52},{0xfd,0x53}, {0xfd,0x54},{0xfd,0x55},{0xfd,0x56},{0xfd,0x57},{0xfd,0x58}, {0xfd,0x59},{0xfd,0x5a},{0xfd,0x5b},{0xfd,0x5c},{0xfd,0x5d}, {0xfd,0x5e},{0xfd,0x5f},{0xfd,0x60},{0xfd,0x61},{0xfd,0x62}, {0xfd,0x63},{0xfd,0x64},{0xfd,0x65},{0xfd,0x66},{0xfd,0x67}, {0xfd,0x68},{0xfd,0x69},{0xfd,0x6a},{0xfd,0x6b},{0xfd,0x6c}, {0xfd,0x6d},{0xfd,0x6e},{0xfd,0x6f},{0xfd,0x70},{0xfd,0x71}, {0xfd,0x72},{0xfd,0x73},{0xfd,0x74},{0xfd,0x75},{0xfd,0x76}, {0xfd,0x77},{0xfd,0x78},{0xfd,0x79},{0xfd,0x7a},{0xfd,0x7b}, {0xfd,0x7c},{0xfd,0x7d},{0xfd,0x7e},{0xfd,0xa1},{0xfd,0xa2}, {0xfd,0xa3},{0xfd,0xa4},{0xfd,0xa5},{0xfd,0xa6},{0xfd,0xa7}, {0xfd,0xa8},{0xfd,0xa9},{0xfd,0xaa},{0xfd,0xab},{0xfd,0xac}, {0xfd,0xad},{0xfd,0xae},{0xfd,0xaf},{0xfd,0xb0},{0xfd,0xb1}, {0xfd,0xb2},{0xfd,0xb3},{0xfd,0xb4},{0xfd,0xb5},{0xfd,0xb6}, {0xfd,0xb7},{0xfd,0xb8},{0xfd,0xb9},{0xfd,0xba},{0xfd,0xbb}, {0xfd,0xbc},{0xfd,0xbd},{0xfd,0xbe},{0xfd,0xbf},{0xfd,0xc0}, {0xfd,0xc1},{0xfd,0xc2},{0xfd,0xc3},{0xfd,0xc4},{0xfd,0xc5}, {0xfd,0xc6},{0xfd,0xc7},{0xfd,0xc8},{0xfd,0xc9},{0xfd,0xca}, {0xfd,0xcb},{0xfd,0xcc},{0xfd,0xcd},{0xfd,0xce},{0xfd,0xcf}, {0xfd,0xd0},{0xfd,0xd1},{0xfd,0xd2},{0xfd,0xd3},{0xfd,0xd4}, {0xfd,0xd5},{0xfd,0xd6},{0xfd,0xd7},{0xfd,0xd8},{0xfd,0xd9}, {0xfd,0xda},{0xfd,0xdb},{0xfd,0xdc},{0xfd,0xdd},{0xfd,0xde}, {0xfd,0xdf},{0xfd,0xe0},{0xfd,0xe1},{0xfd,0xe2},{0xfd,0xe3}, {0xfd,0xe4},{0xfd,0xe5},{0xfd,0xe6},{0xfd,0xe7},{0xfd,0xe8}, {0xfd,0xe9},{0xfd,0xea},{0xfd,0xeb},{0xfd,0xec},{0xfd,0xed}, {0xfd,0xee},{0xfd,0xef},{0xfd,0xf0},{0xfd,0xf1},{0xfd,0xf2}, {0xfd,0xf3},{0xfd,0xf4},{0xfd,0xf5},{0xfd,0xf6},{0xfd,0xf7}, {0xfd,0xf8},{0xfd,0xf9},{0xfd,0xfa},{0xfd,0xfb},{0xfd,0xfc}, {0xfd,0xfd},{0xfd,0xfe},{0xfe,0x40},{0xfe,0x41},{0xfe,0x42}, {0xfe,0x43},{0xfe,0x44},{0xfe,0x45},{0xfe,0x46},{0xfe,0x47}, {0xfe,0x48},{0xfe,0x49},{0xfe,0x4a},{0xfe,0x4b},{0xfe,0x4c}, {0xfe,0x4d},{0xfe,0x4e},{0xfe,0x4f},{0xfe,0x50},{0xfe,0x51}, {0xfe,0x52},{0xfe,0x53},{0xfe,0x54},{0xfe,0x55},{0xfe,0x56}, {0xfe,0x57},{0xfe,0x58},{0xfe,0x59},{0xfe,0x5a},{0xfe,0x5b}, {0xfe,0x5c},{0xfe,0x5d},{0xfe,0x5e},{0xfe,0x5f},{0xfe,0x60}, {0xfe,0x61},{0xfe,0x62},{0xfe,0x63},{0xfe,0x64},{0xfe,0x65}, {0xfe,0x66},{0xfe,0x67},{0xfe,0x68},{0xfe,0x69},{0xfe,0x6a}, {0xfe,0x6b},{0xfe,0x6c},{0xfe,0x6d},{0xfe,0x6e},{0xfe,0x6f}, {0xfe,0x70},{0xfe,0x71},{0xfe,0x72},{0xfe,0x73},{0xfe,0x74}, {0xfe,0x75},{0xfe,0x76},{0xfe,0x77},{0xfe,0x78},{0xfe,0x79}, {0xfe,0x7a},{0xfe,0x7b},{0xfe,0x7c},{0xfe,0x7d},{0xfe,0x7e}, {0xfe,0xa1},{0xfe,0xa2},{0xfe,0xa3},{0xfe,0xa4},{0xfe,0xa5}, {0xfe,0xa6},{0xfe,0xa7},{0xfe,0xa8},{0xfe,0xa9},{0xfe,0xaa}, {0xfe,0xab},{0xfe,0xac},{0xfe,0xad},{0xfe,0xae},{0xfe,0xaf}, {0xfe,0xb0},{0xfe,0xb1},{0xfe,0xb2},{0xfe,0xb3},{0xfe,0xb4}, {0xfe,0xb5},{0xfe,0xb6},{0xfe,0xb7},{0xfe,0xb8},{0xfe,0xb9}, {0xfe,0xba},{0xfe,0xbb},{0xfe,0xbc},{0xfe,0xbd},{0xfe,0xbe}, {0xfe,0xbf},{0xfe,0xc0},{0xfe,0xc1},{0xfe,0xc2},{0xfe,0xc3}, {0xfe,0xc4},{0xfe,0xc5},{0xfe,0xc6},{0xfe,0xc7},{0xfe,0xc8}, {0xfe,0xc9},{0xfe,0xca},{0xfe,0xcb},{0xfe,0xcc},{0xfe,0xcd}, {0xfe,0xce},{0xfe,0xcf},{0xfe,0xd0},{0xfe,0xd1},{0xfe,0xd2}, {0xfe,0xd3},{0xfe,0xd4},{0xfe,0xd5},{0xfe,0xd6},{0xfe,0xd7}, {0xfe,0xd8},{0xfe,0xd9},{0xfe,0xda},{0xfe,0xdb},{0xfe,0xdc}, {0xfe,0xdd},{0xfe,0xde},{0xfe,0xdf},{0xfe,0xe0},{0xfe,0xe1}, {0xfe,0xe2},{0xfe,0xe3},{0xfe,0xe4},{0xfe,0xe5},{0xfe,0xe6}, {0xfe,0xe7},{0xfe,0xe8},{0xfe,0xe9},{0xfe,0xea},{0xfe,0xeb}, {0xfe,0xec},{0xfe,0xed},{0xfe,0xee},{0xfe,0xef},{0xfe,0xf0}, {0xfe,0xf1},{0xfe,0xf2},{0xfe,0xf3},{0xfe,0xf4},{0xfe,0xf5}, {0xfe,0xf6},{0xfe,0xf7},{0xfe,0xf8},{0xfe,0xf9},{0xfe,0xfa}, {0xfe,0xfb},{0xfe,0xfc},{0xfe,0xfd},{0xfe,0xfe},{0x8e,0x40}, {0x8e,0x41},{0x8e,0x42},{0x8e,0x43},{0x8e,0x44},{0x8e,0x45}, {0x8e,0x46},{0x8e,0x47},{0x8e,0x48},{0x8e,0x49},{0x8e,0x4a}, {0x8e,0x4b},{0x8e,0x4c},{0x8e,0x4d},{0x8e,0x4e},{0x8e,0x4f}, {0x8e,0x50},{0x8e,0x51},{0x8e,0x52},{0x8e,0x53},{0x8e,0x54}, {0x8e,0x55},{0x8e,0x56},{0x8e,0x57},{0x8e,0x58},{0x8e,0x59}, {0x8e,0x5a},{0x8e,0x5b},{0x8e,0x5c},{0x8e,0x5d},{0x8e,0x5e}, {0x8e,0x5f},{0x8e,0x60},{0x8e,0x61},{0x8e,0x62},{0x8e,0x63}, {0x8e,0x64},{0x8e,0x65},{0x8e,0x66},{0x8e,0x67},{0x8e,0x68}, {0x8e,0x69},{0x8e,0x6a},{0x8e,0x6b},{0x8e,0x6c},{0x8e,0x6d}, {0x8e,0x6e},{0x8e,0x6f},{0x8e,0x70},{0x8e,0x71},{0x8e,0x72}, {0x8e,0x73},{0x8e,0x74},{0x8e,0x75},{0x8e,0x76},{0x8e,0x77}, {0x8e,0x78},{0x8e,0x79},{0x8e,0x7a},{0x8e,0x7b},{0x8e,0x7c}, {0x8e,0x7d},{0x8e,0x7e},{0x8e,0xa1},{0x8e,0xa2},{0x8e,0xa3}, {0x8e,0xa4},{0x8e,0xa5},{0x8e,0xa6},{0x8e,0xa7},{0x8e,0xa8}, {0x8e,0xa9},{0x8e,0xaa},{0x8e,0xab},{0x8e,0xac},{0x8e,0xad}, {0x8e,0xae},{0x8e,0xaf},{0x8e,0xb0},{0x8e,0xb1},{0x8e,0xb2}, {0x8e,0xb3},{0x8e,0xb4},{0x8e,0xb5},{0x8e,0xb6},{0x8e,0xb7}, {0x8e,0xb8},{0x8e,0xb9},{0x8e,0xba},{0x8e,0xbb},{0x8e,0xbc}, {0x8e,0xbd},{0x8e,0xbe},{0x8e,0xbf},{0x8e,0xc0},{0x8e,0xc1}, {0x8e,0xc2},{0x8e,0xc3},{0x8e,0xc4},{0x8e,0xc5},{0x8e,0xc6}, {0x8e,0xc7},{0x8e,0xc8},{0x8e,0xc9},{0x8e,0xca},{0x8e,0xcb}, {0x8e,0xcc},{0x8e,0xcd},{0x8e,0xce},{0x8e,0xcf},{0x8e,0xd0}, {0x8e,0xd1},{0x8e,0xd2},{0x8e,0xd3},{0x8e,0xd4},{0x8e,0xd5}, {0x8e,0xd6},{0x8e,0xd7},{0x8e,0xd8},{0x8e,0xd9},{0x8e,0xda}, {0x8e,0xdb},{0x8e,0xdc},{0x8e,0xdd},{0x8e,0xde},{0x8e,0xdf}, {0x8e,0xe0},{0x8e,0xe1},{0x8e,0xe2},{0x8e,0xe3},{0x8e,0xe4}, {0x8e,0xe5},{0x8e,0xe6},{0x8e,0xe7},{0x8e,0xe8},{0x8e,0xe9}, {0x8e,0xea},{0x8e,0xeb},{0x8e,0xec},{0x8e,0xed},{0x8e,0xee}, {0x8e,0xef},{0x8e,0xf0},{0x8e,0xf1},{0x8e,0xf2},{0x8e,0xf3}, {0x8e,0xf4},{0x8e,0xf5},{0x8e,0xf6},{0x8e,0xf7},{0x8e,0xf8}, {0x8e,0xf9},{0x8e,0xfa},{0x8e,0xfb},{0x8e,0xfc},{0x8e,0xfd}, {0x8e,0xfe},{0x8f,0x40},{0x8f,0x41},{0x8f,0x42},{0x8f,0x43}, {0x8f,0x44},{0x8f,0x45},{0x8f,0x46},{0x8f,0x47},{0x8f,0x48}, {0x8f,0x49},{0x8f,0x4a},{0x8f,0x4b},{0x8f,0x4c},{0x8f,0x4d}, {0x8f,0x4e},{0x8f,0x4f},{0x8f,0x50},{0x8f,0x51},{0x8f,0x52}, {0x8f,0x53},{0x8f,0x54},{0x8f,0x55},{0x8f,0x56},{0x8f,0x57}, {0x8f,0x58},{0x8f,0x59},{0x8f,0x5a},{0x8f,0x5b},{0x8f,0x5c}, {0x8f,0x5d},{0x8f,0x5e},{0x8f,0x5f},{0x8f,0x60},{0x8f,0x61}, {0x8f,0x62},{0x8f,0x63},{0x8f,0x64},{0x8f,0x65},{0x8f,0x66}, {0x8f,0x67},{0x8f,0x68},{0x8f,0x69},{0x8f,0x6a},{0x8f,0x6b}, {0x8f,0x6c},{0x8f,0x6d},{0x8f,0x6e},{0x8f,0x6f},{0x8f,0x70}, {0x8f,0x71},{0x8f,0x72},{0x8f,0x73},{0x8f,0x74},{0x8f,0x75}, {0x8f,0x76},{0x8f,0x77},{0x8f,0x78},{0x8f,0x79},{0x8f,0x7a}, {0x8f,0x7b},{0x8f,0x7c},{0x8f,0x7d},{0x8f,0x7e},{0x8f,0xa1}, {0x8f,0xa2},{0x8f,0xa3},{0x8f,0xa4},{0x8f,0xa5},{0x8f,0xa6}, {0x8f,0xa7},{0x8f,0xa8},{0x8f,0xa9},{0x8f,0xaa},{0x8f,0xab}, {0x8f,0xac},{0x8f,0xad},{0x8f,0xae},{0x8f,0xaf},{0x8f,0xb0}, {0x8f,0xb1},{0x8f,0xb2},{0x8f,0xb3},{0x8f,0xb4},{0x8f,0xb5}, {0x8f,0xb6},{0x8f,0xb7},{0x8f,0xb8},{0x8f,0xb9},{0x8f,0xba}, {0x8f,0xbb},{0x8f,0xbc},{0x8f,0xbd},{0x8f,0xbe},{0x8f,0xbf}, {0x8f,0xc0},{0x8f,0xc1},{0x8f,0xc2},{0x8f,0xc3},{0x8f,0xc4}, {0x8f,0xc5},{0x8f,0xc6},{0x8f,0xc7},{0x8f,0xc8},{0x8f,0xc9}, {0x8f,0xca},{0x8f,0xcb},{0x8f,0xcc},{0x8f,0xcd},{0x8f,0xce}, {0x8f,0xcf},{0x8f,0xd0},{0x8f,0xd1},{0x8f,0xd2},{0x8f,0xd3}, {0x8f,0xd4},{0x8f,0xd5},{0x8f,0xd6},{0x8f,0xd7},{0x8f,0xd8}, {0x8f,0xd9},{0x8f,0xda},{0x8f,0xdb},{0x8f,0xdc},{0x8f,0xdd}, {0x8f,0xde},{0x8f,0xdf},{0x8f,0xe0},{0x8f,0xe1},{0x8f,0xe2}, {0x8f,0xe3},{0x8f,0xe4},{0x8f,0xe5},{0x8f,0xe6},{0x8f,0xe7}, {0x8f,0xe8},{0x8f,0xe9},{0x8f,0xea},{0x8f,0xeb},{0x8f,0xec}, {0x8f,0xed},{0x8f,0xee},{0x8f,0xef},{0x8f,0xf0},{0x8f,0xf1}, {0x8f,0xf2},{0x8f,0xf3},{0x8f,0xf4},{0x8f,0xf5},{0x8f,0xf6}, {0x8f,0xf7},{0x8f,0xf8},{0x8f,0xf9},{0x8f,0xfa},{0x8f,0xfb}, {0x8f,0xfc},{0x8f,0xfd},{0x8f,0xfe},{0x90,0x40},{0x90,0x41}, {0x90,0x42},{0x90,0x43},{0x90,0x44},{0x90,0x45},{0x90,0x46}, {0x90,0x47},{0x90,0x48},{0x90,0x49},{0x90,0x4a},{0x90,0x4b}, {0x90,0x4c},{0x90,0x4d},{0x90,0x4e},{0x90,0x4f},{0x90,0x50}, {0x90,0x51},{0x90,0x52},{0x90,0x53},{0x90,0x54},{0x90,0x55}, {0x90,0x56},{0x90,0x57},{0x90,0x58},{0x90,0x59},{0x90,0x5a}, {0x90,0x5b},{0x90,0x5c},{0x90,0x5d},{0x90,0x5e},{0x90,0x5f}, {0x90,0x60},{0x90,0x61},{0x90,0x62},{0x90,0x63},{0x90,0x64}, {0x90,0x65},{0x90,0x66},{0x90,0x67},{0x90,0x68},{0x90,0x69}, {0x90,0x6a},{0x90,0x6b},{0x90,0x6c},{0x90,0x6d},{0x90,0x6e}, {0x90,0x6f},{0x90,0x70},{0x90,0x71},{0x90,0x72},{0x90,0x73}, {0x90,0x74},{0x90,0x75},{0x90,0x76},{0x90,0x77},{0x90,0x78}, {0x90,0x79},{0x90,0x7a},{0x90,0x7b},{0x90,0x7c},{0x90,0x7d}, {0x90,0x7e},{0x90,0xa1},{0x90,0xa2},{0x90,0xa3},{0x90,0xa4}, {0x90,0xa5},{0x90,0xa6},{0x90,0xa7},{0x90,0xa8},{0x90,0xa9}, {0x90,0xaa},{0x90,0xab},{0x90,0xac},{0x90,0xad},{0x90,0xae}, {0x90,0xaf},{0x90,0xb0},{0x90,0xb1},{0x90,0xb2},{0x90,0xb3}, {0x90,0xb4},{0x90,0xb5},{0x90,0xb6},{0x90,0xb7},{0x90,0xb8}, {0x90,0xb9},{0x90,0xba},{0x90,0xbb},{0x90,0xbc},{0x90,0xbd}, {0x90,0xbe},{0x90,0xbf},{0x90,0xc0},{0x90,0xc1},{0x90,0xc2}, {0x90,0xc3},{0x90,0xc4},{0x90,0xc5},{0x90,0xc6},{0x90,0xc7}, {0x90,0xc8},{0x90,0xc9},{0x90,0xca},{0x90,0xcb},{0x90,0xcc}, {0x90,0xcd},{0x90,0xce},{0x90,0xcf},{0x90,0xd0},{0x90,0xd1}, {0x90,0xd2},{0x90,0xd3},{0x90,0xd4},{0x90,0xd5},{0x90,0xd6}, {0x90,0xd7},{0x90,0xd8},{0x90,0xd9},{0x90,0xda},{0x90,0xdb}, {0x90,0xdc},{0x90,0xdd},{0x90,0xde},{0x90,0xdf},{0x90,0xe0}, {0x90,0xe1},{0x90,0xe2},{0x90,0xe3},{0x90,0xe4},{0x90,0xe5}, {0x90,0xe6},{0x90,0xe7},{0x90,0xe8},{0x90,0xe9},{0x90,0xea}, {0x90,0xeb},{0x90,0xec},{0x90,0xed},{0x90,0xee},{0x90,0xef}, {0x90,0xf0},{0x90,0xf1},{0x90,0xf2},{0x90,0xf3},{0x90,0xf4}, {0x90,0xf5},{0x90,0xf6},{0x90,0xf7},{0x90,0xf8},{0x90,0xf9}, {0x90,0xfa},{0x90,0xfb},{0x90,0xfc},{0x90,0xfd},{0x90,0xfe}, {0x91,0x40},{0x91,0x41},{0x91,0x42},{0x91,0x43},{0x91,0x44}, {0x91,0x45},{0x91,0x46},{0x91,0x47},{0x91,0x48},{0x91,0x49}, {0x91,0x4a},{0x91,0x4b},{0x91,0x4c},{0x91,0x4d},{0x91,0x4e}, {0x91,0x4f},{0x91,0x50},{0x91,0x51},{0x91,0x52},{0x91,0x53}, {0x91,0x54},{0x91,0x55},{0x91,0x56},{0x91,0x57},{0x91,0x58}, {0x91,0x59},{0x91,0x5a},{0x91,0x5b},{0x91,0x5c},{0x91,0x5d}, {0x91,0x5e},{0x91,0x5f},{0x91,0x60},{0x91,0x61},{0x91,0x62}, {0x91,0x63},{0x91,0x64},{0x91,0x65},{0x91,0x66},{0x91,0x67}, {0x91,0x68},{0x91,0x69},{0x91,0x6a},{0x91,0x6b},{0x91,0x6c}, {0x91,0x6d},{0x91,0x6e},{0x91,0x6f},{0x91,0x70},{0x91,0x71}, {0x91,0x72},{0x91,0x73},{0x91,0x74},{0x91,0x75},{0x91,0x76}, {0x91,0x77},{0x91,0x78},{0x91,0x79},{0x91,0x7a},{0x91,0x7b}, {0x91,0x7c},{0x91,0x7d},{0x91,0x7e},{0x91,0xa1},{0x91,0xa2}, {0x91,0xa3},{0x91,0xa4},{0x91,0xa5},{0x91,0xa6},{0x91,0xa7}, {0x91,0xa8},{0x91,0xa9},{0x91,0xaa},{0x91,0xab},{0x91,0xac}, {0x91,0xad},{0x91,0xae},{0x91,0xaf},{0x91,0xb0},{0x91,0xb1}, {0x91,0xb2},{0x91,0xb3},{0x91,0xb4},{0x91,0xb5},{0x91,0xb6}, {0x91,0xb7},{0x91,0xb8},{0x91,0xb9},{0x91,0xba},{0x91,0xbb}, {0x91,0xbc},{0x91,0xbd},{0x91,0xbe},{0x91,0xbf},{0x91,0xc0}, {0x91,0xc1},{0x91,0xc2},{0x91,0xc3},{0x91,0xc4},{0x91,0xc5}, {0x91,0xc6},{0x91,0xc7},{0x91,0xc8},{0x91,0xc9},{0x91,0xca}, {0x91,0xcb},{0x91,0xcc},{0x91,0xcd},{0x91,0xce},{0x91,0xcf}, {0x91,0xd0},{0x91,0xd1},{0x91,0xd2},{0x91,0xd3},{0x91,0xd4}, {0x91,0xd5},{0x91,0xd6},{0x91,0xd7},{0x91,0xd8},{0x91,0xd9}, {0x91,0xda},{0x91,0xdb},{0x91,0xdc},{0x91,0xdd},{0x91,0xde}, {0x91,0xdf},{0x91,0xe0},{0x91,0xe1},{0x91,0xe2},{0x91,0xe3}, {0x91,0xe4},{0x91,0xe5},{0x91,0xe6},{0x91,0xe7},{0x91,0xe8}, {0x91,0xe9},{0x91,0xea},{0x91,0xeb},{0x91,0xec},{0x91,0xed}, {0x91,0xee},{0x91,0xef},{0x91,0xf0},{0x91,0xf1},{0x91,0xf2}, {0x91,0xf3},{0x91,0xf4},{0x91,0xf5},{0x91,0xf6},{0x91,0xf7}, {0x91,0xf8},{0x91,0xf9},{0x91,0xfa},{0x91,0xfb},{0x91,0xfc}, {0x91,0xfd},{0x91,0xfe},{0x92,0x40},{0x92,0x41},{0x92,0x42}, {0x92,0x43},{0x92,0x44},{0x92,0x45},{0x92,0x46},{0x92,0x47}, {0x92,0x48},{0x92,0x49},{0x92,0x4a},{0x92,0x4b},{0x92,0x4c}, {0x92,0x4d},{0x92,0x4e},{0x92,0x4f},{0x92,0x50},{0x92,0x51}, {0x92,0x52},{0x92,0x53},{0x92,0x54},{0x92,0x55},{0x92,0x56}, {0x92,0x57},{0x92,0x58},{0x92,0x59},{0x92,0x5a},{0x92,0x5b}, {0x92,0x5c},{0x92,0x5d},{0x92,0x5e},{0x92,0x5f},{0x92,0x60}, {0x92,0x61},{0x92,0x62},{0x92,0x63},{0x92,0x64},{0x92,0x65}, {0x92,0x66},{0x92,0x67},{0x92,0x68},{0x92,0x69},{0x92,0x6a}, {0x92,0x6b},{0x92,0x6c},{0x92,0x6d},{0x92,0x6e},{0x92,0x6f}, {0x92,0x70},{0x92,0x71},{0x92,0x72},{0x92,0x73},{0x92,0x74}, {0x92,0x75},{0x92,0x76},{0x92,0x77},{0x92,0x78},{0x92,0x79}, {0x92,0x7a},{0x92,0x7b},{0x92,0x7c},{0x92,0x7d},{0x92,0x7e}, {0x92,0xa1},{0x92,0xa2},{0x92,0xa3},{0x92,0xa4},{0x92,0xa5}, {0x92,0xa6},{0x92,0xa7},{0x92,0xa8},{0x92,0xa9},{0x92,0xaa}, {0x92,0xab},{0x92,0xac},{0x92,0xad},{0x92,0xae},{0x92,0xaf}, {0x92,0xb0},{0x92,0xb1},{0x92,0xb2},{0x92,0xb3},{0x92,0xb4}, {0x92,0xb5},{0x92,0xb6},{0x92,0xb7},{0x92,0xb8},{0x92,0xb9}, {0x92,0xba},{0x92,0xbb},{0x92,0xbc},{0x92,0xbd},{0x92,0xbe}, {0x92,0xbf},{0x92,0xc0},{0x92,0xc1},{0x92,0xc2},{0x92,0xc3}, {0x92,0xc4},{0x92,0xc5},{0x92,0xc6},{0x92,0xc7},{0x92,0xc8}, {0x92,0xc9},{0x92,0xca},{0x92,0xcb},{0x92,0xcc},{0x92,0xcd}, {0x92,0xce},{0x92,0xcf},{0x92,0xd0},{0x92,0xd1},{0x92,0xd2}, {0x92,0xd3},{0x92,0xd4},{0x92,0xd5},{0x92,0xd6},{0x92,0xd7}, {0x92,0xd8},{0x92,0xd9},{0x92,0xda},{0x92,0xdb},{0x92,0xdc}, {0x92,0xdd},{0x92,0xde},{0x92,0xdf},{0x92,0xe0},{0x92,0xe1}, {0x92,0xe2},{0x92,0xe3},{0x92,0xe4},{0x92,0xe5},{0x92,0xe6}, {0x92,0xe7},{0x92,0xe8},{0x92,0xe9},{0x92,0xea},{0x92,0xeb}, {0x92,0xec},{0x92,0xed},{0x92,0xee},{0x92,0xef},{0x92,0xf0}, {0x92,0xf1},{0x92,0xf2},{0x92,0xf3},{0x92,0xf4},{0x92,0xf5}, {0x92,0xf6},{0x92,0xf7},{0x92,0xf8},{0x92,0xf9},{0x92,0xfa}, {0x92,0xfb},{0x92,0xfc},{0x92,0xfd},{0x92,0xfe},{0x93,0x40}, {0x93,0x41},{0x93,0x42},{0x93,0x43},{0x93,0x44},{0x93,0x45}, {0x93,0x46},{0x93,0x47},{0x93,0x48},{0x93,0x49},{0x93,0x4a}, {0x93,0x4b},{0x93,0x4c},{0x93,0x4d},{0x93,0x4e},{0x93,0x4f}, {0x93,0x50},{0x93,0x51},{0x93,0x52},{0x93,0x53},{0x93,0x54}, {0x93,0x55},{0x93,0x56},{0x93,0x57},{0x93,0x58},{0x93,0x59}, {0x93,0x5a},{0x93,0x5b},{0x93,0x5c},{0x93,0x5d},{0x93,0x5e}, {0x93,0x5f},{0x93,0x60},{0x93,0x61},{0x93,0x62},{0x93,0x63}, {0x93,0x64},{0x93,0x65},{0x93,0x66},{0x93,0x67},{0x93,0x68}, {0x93,0x69},{0x93,0x6a},{0x93,0x6b},{0x93,0x6c},{0x93,0x6d}, {0x93,0x6e},{0x93,0x6f},{0x93,0x70},{0x93,0x71},{0x93,0x72}, {0x93,0x73},{0x93,0x74},{0x93,0x75},{0x93,0x76},{0x93,0x77}, {0x93,0x78},{0x93,0x79},{0x93,0x7a},{0x93,0x7b},{0x93,0x7c}, {0x93,0x7d},{0x93,0x7e},{0x93,0xa1},{0x93,0xa2},{0x93,0xa3}, {0x93,0xa4},{0x93,0xa5},{0x93,0xa6},{0x93,0xa7},{0x93,0xa8}, {0x93,0xa9},{0x93,0xaa},{0x93,0xab},{0x93,0xac},{0x93,0xad}, {0x93,0xae},{0x93,0xaf},{0x93,0xb0},{0x93,0xb1},{0x93,0xb2}, {0x93,0xb3},{0x93,0xb4},{0x93,0xb5},{0x93,0xb6},{0x93,0xb7}, {0x93,0xb8},{0x93,0xb9},{0x93,0xba},{0x93,0xbb},{0x93,0xbc}, {0x93,0xbd},{0x93,0xbe},{0x93,0xbf},{0x93,0xc0},{0x93,0xc1}, {0x93,0xc2},{0x93,0xc3},{0x93,0xc4},{0x93,0xc5},{0x93,0xc6}, {0x93,0xc7},{0x93,0xc8},{0x93,0xc9},{0x93,0xca},{0x93,0xcb}, {0x93,0xcc},{0x93,0xcd},{0x93,0xce},{0x93,0xcf},{0x93,0xd0}, {0x93,0xd1},{0x93,0xd2},{0x93,0xd3},{0x93,0xd4},{0x93,0xd5}, {0x93,0xd6},{0x93,0xd7},{0x93,0xd8},{0x93,0xd9},{0x93,0xda}, {0x93,0xdb},{0x93,0xdc},{0x93,0xdd},{0x93,0xde},{0x93,0xdf}, {0x93,0xe0},{0x93,0xe1},{0x93,0xe2},{0x93,0xe3},{0x93,0xe4}, {0x93,0xe5},{0x93,0xe6},{0x93,0xe7},{0x93,0xe8},{0x93,0xe9}, {0x93,0xea},{0x93,0xeb},{0x93,0xec},{0x93,0xed},{0x93,0xee}, {0x93,0xef},{0x93,0xf0},{0x93,0xf1},{0x93,0xf2},{0x93,0xf3}, {0x93,0xf4},{0x93,0xf5},{0x93,0xf6},{0x93,0xf7},{0x93,0xf8}, {0x93,0xf9},{0x93,0xfa},{0x93,0xfb},{0x93,0xfc},{0x93,0xfd}, {0x93,0xfe},{0x94,0x40},{0x94,0x41},{0x94,0x42},{0x94,0x43}, {0x94,0x44},{0x94,0x45},{0x94,0x46},{0x94,0x47},{0x94,0x48}, {0x94,0x49},{0x94,0x4a},{0x94,0x4b},{0x94,0x4c},{0x94,0x4d}, {0x94,0x4e},{0x94,0x4f},{0x94,0x50},{0x94,0x51},{0x94,0x52}, {0x94,0x53},{0x94,0x54},{0x94,0x55},{0x94,0x56},{0x94,0x57}, {0x94,0x58},{0x94,0x59},{0x94,0x5a},{0x94,0x5b},{0x94,0x5c}, {0x94,0x5d},{0x94,0x5e},{0x94,0x5f},{0x94,0x60},{0x94,0x61}, {0x94,0x62},{0x94,0x63},{0x94,0x64},{0x94,0x65},{0x94,0x66}, {0x94,0x67},{0x94,0x68},{0x94,0x69},{0x94,0x6a},{0x94,0x6b}, {0x94,0x6c},{0x94,0x6d},{0x94,0x6e},{0x94,0x6f},{0x94,0x70}, {0x94,0x71},{0x94,0x72},{0x94,0x73},{0x94,0x74},{0x94,0x75}, {0x94,0x76},{0x94,0x77},{0x94,0x78},{0x94,0x79},{0x94,0x7a}, {0x94,0x7b},{0x94,0x7c},{0x94,0x7d},{0x94,0x7e},{0x94,0xa1}, {0x94,0xa2},{0x94,0xa3},{0x94,0xa4},{0x94,0xa5},{0x94,0xa6}, {0x94,0xa7},{0x94,0xa8},{0x94,0xa9},{0x94,0xaa},{0x94,0xab}, {0x94,0xac},{0x94,0xad},{0x94,0xae},{0x94,0xaf},{0x94,0xb0}, {0x94,0xb1},{0x94,0xb2},{0x94,0xb3},{0x94,0xb4},{0x94,0xb5}, {0x94,0xb6},{0x94,0xb7},{0x94,0xb8},{0x94,0xb9},{0x94,0xba}, {0x94,0xbb},{0x94,0xbc},{0x94,0xbd},{0x94,0xbe},{0x94,0xbf}, {0x94,0xc0},{0x94,0xc1},{0x94,0xc2},{0x94,0xc3},{0x94,0xc4}, {0x94,0xc5},{0x94,0xc6},{0x94,0xc7},{0x94,0xc8},{0x94,0xc9}, {0x94,0xca},{0x94,0xcb},{0x94,0xcc},{0x94,0xcd},{0x94,0xce}, {0x94,0xcf},{0x94,0xd0},{0x94,0xd1},{0x94,0xd2},{0x94,0xd3}, {0x94,0xd4},{0x94,0xd5},{0x94,0xd6},{0x94,0xd7},{0x94,0xd8}, {0x94,0xd9},{0x94,0xda},{0x94,0xdb},{0x94,0xdc},{0x94,0xdd}, {0x94,0xde},{0x94,0xdf},{0x94,0xe0},{0x94,0xe1},{0x94,0xe2}, {0x94,0xe3},{0x94,0xe4},{0x94,0xe5},{0x94,0xe6},{0x94,0xe7}, {0x94,0xe8},{0x94,0xe9},{0x94,0xea},{0x94,0xeb},{0x94,0xec}, {0x94,0xed},{0x94,0xee},{0x94,0xef},{0x94,0xf0},{0x94,0xf1}, {0x94,0xf2},{0x94,0xf3},{0x94,0xf4},{0x94,0xf5},{0x94,0xf6}, {0x94,0xf7},{0x94,0xf8},{0x94,0xf9},{0x94,0xfa},{0x94,0xfb}, {0x94,0xfc},{0x94,0xfd},{0x94,0xfe},{0x95,0x40},{0x95,0x41}, {0x95,0x42},{0x95,0x43},{0x95,0x44},{0x95,0x45},{0x95,0x46}, {0x95,0x47},{0x95,0x48},{0x95,0x49},{0x95,0x4a},{0x95,0x4b}, {0x95,0x4c},{0x95,0x4d},{0x95,0x4e},{0x95,0x4f},{0x95,0x50}, {0x95,0x51},{0x95,0x52},{0x95,0x53},{0x95,0x54},{0x95,0x55}, {0x95,0x56},{0x95,0x57},{0x95,0x58},{0x95,0x59},{0x95,0x5a}, {0x95,0x5b},{0x95,0x5c},{0x95,0x5d},{0x95,0x5e},{0x95,0x5f}, {0x95,0x60},{0x95,0x61},{0x95,0x62},{0x95,0x63},{0x95,0x64}, {0x95,0x65},{0x95,0x66},{0x95,0x67},{0x95,0x68},{0x95,0x69}, {0x95,0x6a},{0x95,0x6b},{0x95,0x6c},{0x95,0x6d},{0x95,0x6e}, {0x95,0x6f},{0x95,0x70},{0x95,0x71},{0x95,0x72},{0x95,0x73}, {0x95,0x74},{0x95,0x75},{0x95,0x76},{0x95,0x77},{0x95,0x78}, {0x95,0x79},{0x95,0x7a},{0x95,0x7b},{0x95,0x7c},{0x95,0x7d}, {0x95,0x7e},{0x95,0xa1},{0x95,0xa2},{0x95,0xa3},{0x95,0xa4}, {0x95,0xa5},{0x95,0xa6},{0x95,0xa7},{0x95,0xa8},{0x95,0xa9}, {0x95,0xaa},{0x95,0xab},{0x95,0xac},{0x95,0xad},{0x95,0xae}, {0x95,0xaf},{0x95,0xb0},{0x95,0xb1},{0x95,0xb2},{0x95,0xb3}, {0x95,0xb4},{0x95,0xb5},{0x95,0xb6},{0x95,0xb7},{0x95,0xb8}, {0x95,0xb9},{0x95,0xba},{0x95,0xbb},{0x95,0xbc},{0x95,0xbd}, {0x95,0xbe},{0x95,0xbf},{0x95,0xc0},{0x95,0xc1},{0x95,0xc2}, {0x95,0xc3},{0x95,0xc4},{0x95,0xc5},{0x95,0xc6},{0x95,0xc7}, {0x95,0xc8},{0x95,0xc9},{0x95,0xca},{0x95,0xcb},{0x95,0xcc}, {0x95,0xcd},{0x95,0xce},{0x95,0xcf},{0x95,0xd0},{0x95,0xd1}, {0x95,0xd2},{0x95,0xd3},{0x95,0xd4},{0x95,0xd5},{0x95,0xd6}, {0x95,0xd7},{0x95,0xd8},{0x95,0xd9},{0x95,0xda},{0x95,0xdb}, {0x95,0xdc},{0x95,0xdd},{0x95,0xde},{0x95,0xdf},{0x95,0xe0}, {0x95,0xe1},{0x95,0xe2},{0x95,0xe3},{0x95,0xe4},{0x95,0xe5}, {0x95,0xe6},{0x95,0xe7},{0x95,0xe8},{0x95,0xe9},{0x95,0xea}, {0x95,0xeb},{0x95,0xec},{0x95,0xed},{0x95,0xee},{0x95,0xef}, {0x95,0xf0},{0x95,0xf1},{0x95,0xf2},{0x95,0xf3},{0x95,0xf4}, {0x95,0xf5},{0x95,0xf6},{0x95,0xf7},{0x95,0xf8},{0x95,0xf9}, {0x95,0xfa},{0x95,0xfb},{0x95,0xfc},{0x95,0xfd},{0x95,0xfe}, {0x96,0x40},{0x96,0x41},{0x96,0x42},{0x96,0x43},{0x96,0x44}, {0x96,0x45},{0x96,0x46},{0x96,0x47},{0x96,0x48},{0x96,0x49}, {0x96,0x4a},{0x96,0x4b},{0x96,0x4c},{0x96,0x4d},{0x96,0x4e}, {0x96,0x4f},{0x96,0x50},{0x96,0x51},{0x96,0x52},{0x96,0x53}, {0x96,0x54},{0x96,0x55},{0x96,0x56},{0x96,0x57},{0x96,0x58}, {0x96,0x59},{0x96,0x5a},{0x96,0x5b},{0x96,0x5c},{0x96,0x5d}, {0x96,0x5e},{0x96,0x5f},{0x96,0x60},{0x96,0x61},{0x96,0x62}, {0x96,0x63},{0x96,0x64},{0x96,0x65},{0x96,0x66},{0x96,0x67}, {0x96,0x68},{0x96,0x69},{0x96,0x6a},{0x96,0x6b},{0x96,0x6c}, {0x96,0x6d},{0x96,0x6e},{0x96,0x6f},{0x96,0x70},{0x96,0x71}, {0x96,0x72},{0x96,0x73},{0x96,0x74},{0x96,0x75},{0x96,0x76}, {0x96,0x77},{0x96,0x78},{0x96,0x79},{0x96,0x7a},{0x96,0x7b}, {0x96,0x7c},{0x96,0x7d},{0x96,0x7e},{0x96,0xa1},{0x96,0xa2}, {0x96,0xa3},{0x96,0xa4},{0x96,0xa5},{0x96,0xa6},{0x96,0xa7}, {0x96,0xa8},{0x96,0xa9},{0x96,0xaa},{0x96,0xab},{0x96,0xac}, {0x96,0xad},{0x96,0xae},{0x96,0xaf},{0x96,0xb0},{0x96,0xb1}, {0x96,0xb2},{0x96,0xb3},{0x96,0xb4},{0x96,0xb5},{0x96,0xb6}, {0x96,0xb7},{0x96,0xb8},{0x96,0xb9},{0x96,0xba},{0x96,0xbb}, {0x96,0xbc},{0x96,0xbd},{0x96,0xbe},{0x96,0xbf},{0x96,0xc0}, {0x96,0xc1},{0x96,0xc2},{0x96,0xc3},{0x96,0xc4},{0x96,0xc5}, {0x96,0xc6},{0x96,0xc7},{0x96,0xc8},{0x96,0xc9},{0x96,0xca}, {0x96,0xcb},{0x96,0xcc},{0x96,0xcd},{0x96,0xce},{0x96,0xcf}, {0x96,0xd0},{0x96,0xd1},{0x96,0xd2},{0x96,0xd3},{0x96,0xd4}, {0x96,0xd5},{0x96,0xd6},{0x96,0xd7},{0x96,0xd8},{0x96,0xd9}, {0x96,0xda},{0x96,0xdb},{0x96,0xdc},{0x96,0xdd},{0x96,0xde}, {0x96,0xdf},{0x96,0xe0},{0x96,0xe1},{0x96,0xe2},{0x96,0xe3}, {0x96,0xe4},{0x96,0xe5},{0x96,0xe6},{0x96,0xe7},{0x96,0xe8}, {0x96,0xe9},{0x96,0xea},{0x96,0xeb},{0x96,0xec},{0x96,0xed}, {0x96,0xee},{0x96,0xef},{0x96,0xf0},{0x96,0xf1},{0x96,0xf2}, {0x96,0xf3},{0x96,0xf4},{0x96,0xf5},{0x96,0xf6},{0x96,0xf7}, {0x96,0xf8},{0x96,0xf9},{0x96,0xfa},{0x96,0xfb},{0x96,0xfc}, {0x96,0xfd},{0x96,0xfe},{0x97,0x40},{0x97,0x41},{0x97,0x42}, {0x97,0x43},{0x97,0x44},{0x97,0x45},{0x97,0x46},{0x97,0x47}, {0x97,0x48},{0x97,0x49},{0x97,0x4a},{0x97,0x4b},{0x97,0x4c}, {0x97,0x4d},{0x97,0x4e},{0x97,0x4f},{0x97,0x50},{0x97,0x51}, {0x97,0x52},{0x97,0x53},{0x97,0x54},{0x97,0x55},{0x97,0x56}, {0x97,0x57},{0x97,0x58},{0x97,0x59},{0x97,0x5a},{0x97,0x5b}, {0x97,0x5c},{0x97,0x5d},{0x97,0x5e},{0x97,0x5f},{0x97,0x60}, {0x97,0x61},{0x97,0x62},{0x97,0x63},{0x97,0x64},{0x97,0x65}, {0x97,0x66},{0x97,0x67},{0x97,0x68},{0x97,0x69},{0x97,0x6a}, {0x97,0x6b},{0x97,0x6c},{0x97,0x6d},{0x97,0x6e},{0x97,0x6f}, {0x97,0x70},{0x97,0x71},{0x97,0x72},{0x97,0x73},{0x97,0x74}, {0x97,0x75},{0x97,0x76},{0x97,0x77},{0x97,0x78},{0x97,0x79}, {0x97,0x7a},{0x97,0x7b},{0x97,0x7c},{0x97,0x7d},{0x97,0x7e}, {0x97,0xa1},{0x97,0xa2},{0x97,0xa3},{0x97,0xa4},{0x97,0xa5}, {0x97,0xa6},{0x97,0xa7},{0x97,0xa8},{0x97,0xa9},{0x97,0xaa}, {0x97,0xab},{0x97,0xac},{0x97,0xad},{0x97,0xae},{0x97,0xaf}, {0x97,0xb0},{0x97,0xb1},{0x97,0xb2},{0x97,0xb3},{0x97,0xb4}, {0x97,0xb5},{0x97,0xb6},{0x97,0xb7},{0x97,0xb8},{0x97,0xb9}, {0x97,0xba},{0x97,0xbb},{0x97,0xbc},{0x97,0xbd},{0x97,0xbe}, {0x97,0xbf},{0x97,0xc0},{0x97,0xc1},{0x97,0xc2},{0x97,0xc3}, {0x97,0xc4},{0x97,0xc5},{0x97,0xc6},{0x97,0xc7},{0x97,0xc8}, {0x97,0xc9},{0x97,0xca},{0x97,0xcb},{0x97,0xcc},{0x97,0xcd}, {0x97,0xce},{0x97,0xcf},{0x97,0xd0},{0x97,0xd1},{0x97,0xd2}, {0x97,0xd3},{0x97,0xd4},{0x97,0xd5},{0x97,0xd6},{0x97,0xd7}, {0x97,0xd8},{0x97,0xd9},{0x97,0xda},{0x97,0xdb},{0x97,0xdc}, {0x97,0xdd},{0x97,0xde},{0x97,0xdf},{0x97,0xe0},{0x97,0xe1}, {0x97,0xe2},{0x97,0xe3},{0x97,0xe4},{0x97,0xe5},{0x97,0xe6}, {0x97,0xe7},{0x97,0xe8},{0x97,0xe9},{0x97,0xea},{0x97,0xeb}, {0x97,0xec},{0x97,0xed},{0x97,0xee},{0x97,0xef},{0x97,0xf0}, {0x97,0xf1},{0x97,0xf2},{0x97,0xf3},{0x97,0xf4},{0x97,0xf5}, {0x97,0xf6},{0x97,0xf7},{0x97,0xf8},{0x97,0xf9},{0x97,0xfa}, {0x97,0xfb},{0x97,0xfc},{0x97,0xfd},{0x97,0xfe},{0x98,0x40}, {0x98,0x41},{0x98,0x42},{0x98,0x43},{0x98,0x44},{0x98,0x45}, {0x98,0x46},{0x98,0x47},{0x98,0x48},{0x98,0x49},{0x98,0x4a}, {0x98,0x4b},{0x98,0x4c},{0x98,0x4d},{0x98,0x4e},{0x98,0x4f}, {0x98,0x50},{0x98,0x51},{0x98,0x52},{0x98,0x53},{0x98,0x54}, {0x98,0x55},{0x98,0x56},{0x98,0x57},{0x98,0x58},{0x98,0x59}, {0x98,0x5a},{0x98,0x5b},{0x98,0x5c},{0x98,0x5d},{0x98,0x5e}, {0x98,0x5f},{0x98,0x60},{0x98,0x61},{0x98,0x62},{0x98,0x63}, {0x98,0x64},{0x98,0x65},{0x98,0x66},{0x98,0x67},{0x98,0x68}, {0x98,0x69},{0x98,0x6a},{0x98,0x6b},{0x98,0x6c},{0x98,0x6d}, {0x98,0x6e},{0x98,0x6f},{0x98,0x70},{0x98,0x71},{0x98,0x72}, {0x98,0x73},{0x98,0x74},{0x98,0x75},{0x98,0x76},{0x98,0x77}, {0x98,0x78},{0x98,0x79},{0x98,0x7a},{0x98,0x7b},{0x98,0x7c}, {0x98,0x7d},{0x98,0x7e},{0x98,0xa1},{0x98,0xa2},{0x98,0xa3}, {0x98,0xa4},{0x98,0xa5},{0x98,0xa6},{0x98,0xa7},{0x98,0xa8}, {0x98,0xa9},{0x98,0xaa},{0x98,0xab},{0x98,0xac},{0x98,0xad}, {0x98,0xae},{0x98,0xaf},{0x98,0xb0},{0x98,0xb1},{0x98,0xb2}, {0x98,0xb3},{0x98,0xb4},{0x98,0xb5},{0x98,0xb6},{0x98,0xb7}, {0x98,0xb8},{0x98,0xb9},{0x98,0xba},{0x98,0xbb},{0x98,0xbc}, {0x98,0xbd},{0x98,0xbe},{0x98,0xbf},{0x98,0xc0},{0x98,0xc1}, {0x98,0xc2},{0x98,0xc3},{0x98,0xc4},{0x98,0xc5},{0x98,0xc6}, {0x98,0xc7},{0x98,0xc8},{0x98,0xc9},{0x98,0xca},{0x98,0xcb}, {0x98,0xcc},{0x98,0xcd},{0x98,0xce},{0x98,0xcf},{0x98,0xd0}, {0x98,0xd1},{0x98,0xd2},{0x98,0xd3},{0x98,0xd4},{0x98,0xd5}, {0x98,0xd6},{0x98,0xd7},{0x98,0xd8},{0x98,0xd9},{0x98,0xda}, {0x98,0xdb},{0x98,0xdc},{0x98,0xdd},{0x98,0xde},{0x98,0xdf}, {0x98,0xe0},{0x98,0xe1},{0x98,0xe2},{0x98,0xe3},{0x98,0xe4}, {0x98,0xe5},{0x98,0xe6},{0x98,0xe7},{0x98,0xe8},{0x98,0xe9}, {0x98,0xea},{0x98,0xeb},{0x98,0xec},{0x98,0xed},{0x98,0xee}, {0x98,0xef},{0x98,0xf0},{0x98,0xf1},{0x98,0xf2},{0x98,0xf3}, {0x98,0xf4},{0x98,0xf5},{0x98,0xf6},{0x98,0xf7},{0x98,0xf8}, {0x98,0xf9},{0x98,0xfa},{0x98,0xfb},{0x98,0xfc},{0x98,0xfd}, {0x98,0xfe},{0x99,0x40},{0x99,0x41},{0x99,0x42},{0x99,0x43}, {0x99,0x44},{0x99,0x45},{0x99,0x46},{0x99,0x47},{0x99,0x48}, {0x99,0x49},{0x99,0x4a},{0x99,0x4b},{0x99,0x4c},{0x99,0x4d}, {0x99,0x4e},{0x99,0x4f},{0x99,0x50},{0x99,0x51},{0x99,0x52}, {0x99,0x53},{0x99,0x54},{0x99,0x55},{0x99,0x56},{0x99,0x57}, {0x99,0x58},{0x99,0x59},{0x99,0x5a},{0x99,0x5b},{0x99,0x5c}, {0x99,0x5d},{0x99,0x5e},{0x99,0x5f},{0x99,0x60},{0x99,0x61}, {0x99,0x62},{0x99,0x63},{0x99,0x64},{0x99,0x65},{0x99,0x66}, {0x99,0x67},{0x99,0x68},{0x99,0x69},{0x99,0x6a},{0x99,0x6b}, {0x99,0x6c},{0x99,0x6d},{0x99,0x6e},{0x99,0x6f},{0x99,0x70}, {0x99,0x71},{0x99,0x72},{0x99,0x73},{0x99,0x74},{0x99,0x75}, {0x99,0x76},{0x99,0x77},{0x99,0x78},{0x99,0x79},{0x99,0x7a}, {0x99,0x7b},{0x99,0x7c},{0x99,0x7d},{0x99,0x7e},{0x99,0xa1}, {0x99,0xa2},{0x99,0xa3},{0x99,0xa4},{0x99,0xa5},{0x99,0xa6}, {0x99,0xa7},{0x99,0xa8},{0x99,0xa9},{0x99,0xaa},{0x99,0xab}, {0x99,0xac},{0x99,0xad},{0x99,0xae},{0x99,0xaf},{0x99,0xb0}, {0x99,0xb1},{0x99,0xb2},{0x99,0xb3},{0x99,0xb4},{0x99,0xb5}, {0x99,0xb6},{0x99,0xb7},{0x99,0xb8},{0x99,0xb9},{0x99,0xba}, {0x99,0xbb},{0x99,0xbc},{0x99,0xbd},{0x99,0xbe},{0x99,0xbf}, {0x99,0xc0},{0x99,0xc1},{0x99,0xc2},{0x99,0xc3},{0x99,0xc4}, {0x99,0xc5},{0x99,0xc6},{0x99,0xc7},{0x99,0xc8},{0x99,0xc9}, {0x99,0xca},{0x99,0xcb},{0x99,0xcc},{0x99,0xcd},{0x99,0xce}, {0x99,0xcf},{0x99,0xd0},{0x99,0xd1},{0x99,0xd2},{0x99,0xd3}, {0x99,0xd4},{0x99,0xd5},{0x99,0xd6},{0x99,0xd7},{0x99,0xd8}, {0x99,0xd9},{0x99,0xda},{0x99,0xdb},{0x99,0xdc},{0x99,0xdd}, {0x99,0xde},{0x99,0xdf},{0x99,0xe0},{0x99,0xe1},{0x99,0xe2}, {0x99,0xe3},{0x99,0xe4},{0x99,0xe5},{0x99,0xe6},{0x99,0xe7}, {0x99,0xe8},{0x99,0xe9},{0x99,0xea},{0x99,0xeb},{0x99,0xec}, {0x99,0xed},{0x99,0xee},{0x99,0xef},{0x99,0xf0},{0x99,0xf1}, {0x99,0xf2},{0x99,0xf3},{0x99,0xf4},{0x99,0xf5},{0x99,0xf6}, {0x99,0xf7},{0x99,0xf8},{0x99,0xf9},{0x99,0xfa},{0x99,0xfb}, {0x99,0xfc},{0x99,0xfd},{0x99,0xfe},{0x9a,0x40},{0x9a,0x41}, {0x9a,0x42},{0x9a,0x43},{0x9a,0x44},{0x9a,0x45},{0x9a,0x46}, {0x9a,0x47},{0x9a,0x48},{0x9a,0x49},{0x9a,0x4a},{0x9a,0x4b}, {0x9a,0x4c},{0x9a,0x4d},{0x9a,0x4e},{0x9a,0x4f},{0x9a,0x50}, {0x9a,0x51},{0x9a,0x52},{0x9a,0x53},{0x9a,0x54},{0x9a,0x55}, {0x9a,0x56},{0x9a,0x57},{0x9a,0x58},{0x9a,0x59},{0x9a,0x5a}, {0x9a,0x5b},{0x9a,0x5c},{0x9a,0x5d},{0x9a,0x5e},{0x9a,0x5f}, {0x9a,0x60},{0x9a,0x61},{0x9a,0x62},{0x9a,0x63},{0x9a,0x64}, {0x9a,0x65},{0x9a,0x66},{0x9a,0x67},{0x9a,0x68},{0x9a,0x69}, {0x9a,0x6a},{0x9a,0x6b},{0x9a,0x6c},{0x9a,0x6d},{0x9a,0x6e}, {0x9a,0x6f},{0x9a,0x70},{0x9a,0x71},{0x9a,0x72},{0x9a,0x73}, {0x9a,0x74},{0x9a,0x75},{0x9a,0x76},{0x9a,0x77},{0x9a,0x78}, {0x9a,0x79},{0x9a,0x7a},{0x9a,0x7b},{0x9a,0x7c},{0x9a,0x7d}, {0x9a,0x7e},{0x9a,0xa1},{0x9a,0xa2},{0x9a,0xa3},{0x9a,0xa4}, {0x9a,0xa5},{0x9a,0xa6},{0x9a,0xa7},{0x9a,0xa8},{0x9a,0xa9}, {0x9a,0xaa},{0x9a,0xab},{0x9a,0xac},{0x9a,0xad},{0x9a,0xae}, {0x9a,0xaf},{0x9a,0xb0},{0x9a,0xb1},{0x9a,0xb2},{0x9a,0xb3}, {0x9a,0xb4},{0x9a,0xb5},{0x9a,0xb6},{0x9a,0xb7},{0x9a,0xb8}, {0x9a,0xb9},{0x9a,0xba},{0x9a,0xbb},{0x9a,0xbc},{0x9a,0xbd}, {0x9a,0xbe},{0x9a,0xbf},{0x9a,0xc0},{0x9a,0xc1},{0x9a,0xc2}, {0x9a,0xc3},{0x9a,0xc4},{0x9a,0xc5},{0x9a,0xc6},{0x9a,0xc7}, {0x9a,0xc8},{0x9a,0xc9},{0x9a,0xca},{0x9a,0xcb},{0x9a,0xcc}, {0x9a,0xcd},{0x9a,0xce},{0x9a,0xcf},{0x9a,0xd0},{0x9a,0xd1}, {0x9a,0xd2},{0x9a,0xd3},{0x9a,0xd4},{0x9a,0xd5},{0x9a,0xd6}, {0x9a,0xd7},{0x9a,0xd8},{0x9a,0xd9},{0x9a,0xda},{0x9a,0xdb}, {0x9a,0xdc},{0x9a,0xdd},{0x9a,0xde},{0x9a,0xdf},{0x9a,0xe0}, {0x9a,0xe1},{0x9a,0xe2},{0x9a,0xe3},{0x9a,0xe4},{0x9a,0xe5}, {0x9a,0xe6},{0x9a,0xe7},{0x9a,0xe8},{0x9a,0xe9},{0x9a,0xea}, {0x9a,0xeb},{0x9a,0xec},{0x9a,0xed},{0x9a,0xee},{0x9a,0xef}, {0x9a,0xf0},{0x9a,0xf1},{0x9a,0xf2},{0x9a,0xf3},{0x9a,0xf4}, {0x9a,0xf5},{0x9a,0xf6},{0x9a,0xf7},{0x9a,0xf8},{0x9a,0xf9}, {0x9a,0xfa},{0x9a,0xfb},{0x9a,0xfc},{0x9a,0xfd},{0x9a,0xfe}, {0x9b,0x40},{0x9b,0x41},{0x9b,0x42},{0x9b,0x43},{0x9b,0x44}, {0x9b,0x45},{0x9b,0x46},{0x9b,0x47},{0x9b,0x48},{0x9b,0x49}, {0x9b,0x4a},{0x9b,0x4b},{0x9b,0x4c},{0x9b,0x4d},{0x9b,0x4e}, {0x9b,0x4f},{0x9b,0x50},{0x9b,0x51},{0x9b,0x52},{0x9b,0x53}, {0x9b,0x54},{0x9b,0x55},{0x9b,0x56},{0x9b,0x57},{0x9b,0x58}, {0x9b,0x59},{0x9b,0x5a},{0x9b,0x5b},{0x9b,0x5c},{0x9b,0x5d}, {0x9b,0x5e},{0x9b,0x5f},{0x9b,0x60},{0x9b,0x61},{0x9b,0x62}, {0x9b,0x63},{0x9b,0x64},{0x9b,0x65},{0x9b,0x66},{0x9b,0x67}, {0x9b,0x68},{0x9b,0x69},{0x9b,0x6a},{0x9b,0x6b},{0x9b,0x6c}, {0x9b,0x6d},{0x9b,0x6e},{0x9b,0x6f},{0x9b,0x70},{0x9b,0x71}, {0x9b,0x72},{0x9b,0x73},{0x9b,0x74},{0x9b,0x75},{0x9b,0x76}, {0x9b,0x77},{0x9b,0x78},{0x9b,0x79},{0x9b,0x7a},{0x9b,0x7b}, {0x9b,0x7c},{0x9b,0x7d},{0x9b,0x7e},{0x9b,0xa1},{0x9b,0xa2}, {0x9b,0xa3},{0x9b,0xa4},{0x9b,0xa5},{0x9b,0xa6},{0x9b,0xa7}, {0x9b,0xa8},{0x9b,0xa9},{0x9b,0xaa},{0x9b,0xab},{0x9b,0xac}, {0x9b,0xad},{0x9b,0xae},{0x9b,0xaf},{0x9b,0xb0},{0x9b,0xb1}, {0x9b,0xb2},{0x9b,0xb3},{0x9b,0xb4},{0x9b,0xb5},{0x9b,0xb6}, {0x9b,0xb7},{0x9b,0xb8},{0x9b,0xb9},{0x9b,0xba},{0x9b,0xbb}, {0x9b,0xbc},{0x9b,0xbd},{0x9b,0xbe},{0x9b,0xbf},{0x9b,0xc0}, {0x9b,0xc1},{0x9b,0xc2},{0x9b,0xc3},{0x9b,0xc4},{0x9b,0xc5}, {0x9b,0xc6},{0x9b,0xc7},{0x9b,0xc8},{0x9b,0xc9},{0x9b,0xca}, {0x9b,0xcb},{0x9b,0xcc},{0x9b,0xcd},{0x9b,0xce},{0x9b,0xcf}, {0x9b,0xd0},{0x9b,0xd1},{0x9b,0xd2},{0x9b,0xd3},{0x9b,0xd4}, {0x9b,0xd5},{0x9b,0xd6},{0x9b,0xd7},{0x9b,0xd8},{0x9b,0xd9}, {0x9b,0xda},{0x9b,0xdb},{0x9b,0xdc},{0x9b,0xdd},{0x9b,0xde}, {0x9b,0xdf},{0x9b,0xe0},{0x9b,0xe1},{0x9b,0xe2},{0x9b,0xe3}, {0x9b,0xe4},{0x9b,0xe5},{0x9b,0xe6},{0x9b,0xe7},{0x9b,0xe8}, {0x9b,0xe9},{0x9b,0xea},{0x9b,0xeb},{0x9b,0xec},{0x9b,0xed}, {0x9b,0xee},{0x9b,0xef},{0x9b,0xf0},{0x9b,0xf1},{0x9b,0xf2}, {0x9b,0xf3},{0x9b,0xf4},{0x9b,0xf5},{0x9b,0xf6},{0x9b,0xf7}, {0x9b,0xf8},{0x9b,0xf9},{0x9b,0xfa},{0x9b,0xfb},{0x9b,0xfc}, {0x9b,0xfd},{0x9b,0xfe},{0x9c,0x40},{0x9c,0x41},{0x9c,0x42}, {0x9c,0x43},{0x9c,0x44},{0x9c,0x45},{0x9c,0x46},{0x9c,0x47}, {0x9c,0x48},{0x9c,0x49},{0x9c,0x4a},{0x9c,0x4b},{0x9c,0x4c}, {0x9c,0x4d},{0x9c,0x4e},{0x9c,0x4f},{0x9c,0x50},{0x9c,0x51}, {0x9c,0x52},{0x9c,0x53},{0x9c,0x54},{0x9c,0x55},{0x9c,0x56}, {0x9c,0x57},{0x9c,0x58},{0x9c,0x59},{0x9c,0x5a},{0x9c,0x5b}, {0x9c,0x5c},{0x9c,0x5d},{0x9c,0x5e},{0x9c,0x5f},{0x9c,0x60}, {0x9c,0x61},{0x9c,0x62},{0x9c,0x63},{0x9c,0x64},{0x9c,0x65}, {0x9c,0x66},{0x9c,0x67},{0x9c,0x68},{0x9c,0x69},{0x9c,0x6a}, {0x9c,0x6b},{0x9c,0x6c},{0x9c,0x6d},{0x9c,0x6e},{0x9c,0x6f}, {0x9c,0x70},{0x9c,0x71},{0x9c,0x72},{0x9c,0x73},{0x9c,0x74}, {0x9c,0x75},{0x9c,0x76},{0x9c,0x77},{0x9c,0x78},{0x9c,0x79}, {0x9c,0x7a},{0x9c,0x7b},{0x9c,0x7c},{0x9c,0x7d},{0x9c,0x7e}, {0x9c,0xa1},{0x9c,0xa2},{0x9c,0xa3},{0x9c,0xa4},{0x9c,0xa5}, {0x9c,0xa6},{0x9c,0xa7},{0x9c,0xa8},{0x9c,0xa9},{0x9c,0xaa}, {0x9c,0xab},{0x9c,0xac},{0x9c,0xad},{0x9c,0xae},{0x9c,0xaf}, {0x9c,0xb0},{0x9c,0xb1},{0x9c,0xb2},{0x9c,0xb3},{0x9c,0xb4}, {0x9c,0xb5},{0x9c,0xb6},{0x9c,0xb7},{0x9c,0xb8},{0x9c,0xb9}, {0x9c,0xba},{0x9c,0xbb},{0x9c,0xbc},{0x9c,0xbd},{0x9c,0xbe}, {0x9c,0xbf},{0x9c,0xc0},{0x9c,0xc1},{0x9c,0xc2},{0x9c,0xc3}, {0x9c,0xc4},{0x9c,0xc5},{0x9c,0xc6},{0x9c,0xc7},{0x9c,0xc8}, {0x9c,0xc9},{0x9c,0xca},{0x9c,0xcb},{0x9c,0xcc},{0x9c,0xcd}, {0x9c,0xce},{0x9c,0xcf},{0x9c,0xd0},{0x9c,0xd1},{0x9c,0xd2}, {0x9c,0xd3},{0x9c,0xd4},{0x9c,0xd5},{0x9c,0xd6},{0x9c,0xd7}, {0x9c,0xd8},{0x9c,0xd9},{0x9c,0xda},{0x9c,0xdb},{0x9c,0xdc}, {0x9c,0xdd},{0x9c,0xde},{0x9c,0xdf},{0x9c,0xe0},{0x9c,0xe1}, {0x9c,0xe2},{0x9c,0xe3},{0x9c,0xe4},{0x9c,0xe5},{0x9c,0xe6}, {0x9c,0xe7},{0x9c,0xe8},{0x9c,0xe9},{0x9c,0xea},{0x9c,0xeb}, {0x9c,0xec},{0x9c,0xed},{0x9c,0xee},{0x9c,0xef},{0x9c,0xf0}, {0x9c,0xf1},{0x9c,0xf2},{0x9c,0xf3},{0x9c,0xf4},{0x9c,0xf5}, {0x9c,0xf6},{0x9c,0xf7},{0x9c,0xf8},{0x9c,0xf9},{0x9c,0xfa}, {0x9c,0xfb},{0x9c,0xfc},{0x9c,0xfd},{0x9c,0xfe},{0x9d,0x40}, {0x9d,0x41},{0x9d,0x42},{0x9d,0x43},{0x9d,0x44},{0x9d,0x45}, {0x9d,0x46},{0x9d,0x47},{0x9d,0x48},{0x9d,0x49},{0x9d,0x4a}, {0x9d,0x4b},{0x9d,0x4c},{0x9d,0x4d},{0x9d,0x4e},{0x9d,0x4f}, {0x9d,0x50},{0x9d,0x51},{0x9d,0x52},{0x9d,0x53},{0x9d,0x54}, {0x9d,0x55},{0x9d,0x56},{0x9d,0x57},{0x9d,0x58},{0x9d,0x59}, {0x9d,0x5a},{0x9d,0x5b},{0x9d,0x5c},{0x9d,0x5d},{0x9d,0x5e}, {0x9d,0x5f},{0x9d,0x60},{0x9d,0x61},{0x9d,0x62},{0x9d,0x63}, {0x9d,0x64},{0x9d,0x65},{0x9d,0x66},{0x9d,0x67},{0x9d,0x68}, {0x9d,0x69},{0x9d,0x6a},{0x9d,0x6b},{0x9d,0x6c},{0x9d,0x6d}, {0x9d,0x6e},{0x9d,0x6f},{0x9d,0x70},{0x9d,0x71},{0x9d,0x72}, {0x9d,0x73},{0x9d,0x74},{0x9d,0x75},{0x9d,0x76},{0x9d,0x77}, {0x9d,0x78},{0x9d,0x79},{0x9d,0x7a},{0x9d,0x7b},{0x9d,0x7c}, {0x9d,0x7d},{0x9d,0x7e},{0x9d,0xa1},{0x9d,0xa2},{0x9d,0xa3}, {0x9d,0xa4},{0x9d,0xa5},{0x9d,0xa6},{0x9d,0xa7},{0x9d,0xa8}, {0x9d,0xa9},{0x9d,0xaa},{0x9d,0xab},{0x9d,0xac},{0x9d,0xad}, {0x9d,0xae},{0x9d,0xaf},{0x9d,0xb0},{0x9d,0xb1},{0x9d,0xb2}, {0x9d,0xb3},{0x9d,0xb4},{0x9d,0xb5},{0x9d,0xb6},{0x9d,0xb7}, {0x9d,0xb8},{0x9d,0xb9},{0x9d,0xba},{0x9d,0xbb},{0x9d,0xbc}, {0x9d,0xbd},{0x9d,0xbe},{0x9d,0xbf},{0x9d,0xc0},{0x9d,0xc1}, {0x9d,0xc2},{0x9d,0xc3},{0x9d,0xc4},{0x9d,0xc5},{0x9d,0xc6}, {0x9d,0xc7},{0x9d,0xc8},{0x9d,0xc9},{0x9d,0xca},{0x9d,0xcb}, {0x9d,0xcc},{0x9d,0xcd},{0x9d,0xce},{0x9d,0xcf},{0x9d,0xd0}, {0x9d,0xd1},{0x9d,0xd2},{0x9d,0xd3},{0x9d,0xd4},{0x9d,0xd5}, {0x9d,0xd6},{0x9d,0xd7},{0x9d,0xd8},{0x9d,0xd9},{0x9d,0xda}, {0x9d,0xdb},{0x9d,0xdc},{0x9d,0xdd},{0x9d,0xde},{0x9d,0xdf}, {0x9d,0xe0},{0x9d,0xe1},{0x9d,0xe2},{0x9d,0xe3},{0x9d,0xe4}, {0x9d,0xe5},{0x9d,0xe6},{0x9d,0xe7},{0x9d,0xe8},{0x9d,0xe9}, {0x9d,0xea},{0x9d,0xeb},{0x9d,0xec},{0x9d,0xed},{0x9d,0xee}, {0x9d,0xef},{0x9d,0xf0},{0x9d,0xf1},{0x9d,0xf2},{0x9d,0xf3}, {0x9d,0xf4},{0x9d,0xf5},{0x9d,0xf6},{0x9d,0xf7},{0x9d,0xf8}, {0x9d,0xf9},{0x9d,0xfa},{0x9d,0xfb},{0x9d,0xfc},{0x9d,0xfd}, {0x9d,0xfe},{0x9e,0x40},{0x9e,0x41},{0x9e,0x42},{0x9e,0x43}, {0x9e,0x44},{0x9e,0x45},{0x9e,0x46},{0x9e,0x47},{0x9e,0x48}, {0x9e,0x49},{0x9e,0x4a},{0x9e,0x4b},{0x9e,0x4c},{0x9e,0x4d}, {0x9e,0x4e},{0x9e,0x4f},{0x9e,0x50},{0x9e,0x51},{0x9e,0x52}, {0x9e,0x53},{0x9e,0x54},{0x9e,0x55},{0x9e,0x56},{0x9e,0x57}, {0x9e,0x58},{0x9e,0x59},{0x9e,0x5a},{0x9e,0x5b},{0x9e,0x5c}, {0x9e,0x5d},{0x9e,0x5e},{0x9e,0x5f},{0x9e,0x60},{0x9e,0x61}, {0x9e,0x62},{0x9e,0x63},{0x9e,0x64},{0x9e,0x65},{0x9e,0x66}, {0x9e,0x67},{0x9e,0x68},{0x9e,0x69},{0x9e,0x6a},{0x9e,0x6b}, {0x9e,0x6c},{0x9e,0x6d},{0x9e,0x6e},{0x9e,0x6f},{0x9e,0x70}, {0x9e,0x71},{0x9e,0x72},{0x9e,0x73},{0x9e,0x74},{0x9e,0x75}, {0x9e,0x76},{0x9e,0x77},{0x9e,0x78},{0x9e,0x79},{0x9e,0x7a}, {0x9e,0x7b},{0x9e,0x7c},{0x9e,0x7d},{0x9e,0x7e},{0x9e,0xa1}, {0x9e,0xa2},{0x9e,0xa3},{0x9e,0xa4},{0x9e,0xa5},{0x9e,0xa6}, {0x9e,0xa7},{0x9e,0xa8},{0x9e,0xa9},{0x9e,0xaa},{0x9e,0xab}, {0x9e,0xac},{0x9e,0xad},{0x9e,0xae},{0x9e,0xaf},{0x9e,0xb0}, {0x9e,0xb1},{0x9e,0xb2},{0x9e,0xb3},{0x9e,0xb4},{0x9e,0xb5}, {0x9e,0xb6},{0x9e,0xb7},{0x9e,0xb8},{0x9e,0xb9},{0x9e,0xba}, {0x9e,0xbb},{0x9e,0xbc},{0x9e,0xbd},{0x9e,0xbe},{0x9e,0xbf}, {0x9e,0xc0},{0x9e,0xc1},{0x9e,0xc2},{0x9e,0xc3},{0x9e,0xc4}, {0x9e,0xc5},{0x9e,0xc6},{0x9e,0xc7},{0x9e,0xc8},{0x9e,0xc9}, {0x9e,0xca},{0x9e,0xcb},{0x9e,0xcc},{0x9e,0xcd},{0x9e,0xce}, {0x9e,0xcf},{0x9e,0xd0},{0x9e,0xd1},{0x9e,0xd2},{0x9e,0xd3}, {0x9e,0xd4},{0x9e,0xd5},{0x9e,0xd6},{0x9e,0xd7},{0x9e,0xd8}, {0x9e,0xd9},{0x9e,0xda},{0x9e,0xdb},{0x9e,0xdc},{0x9e,0xdd}, {0x9e,0xde},{0x9e,0xdf},{0x9e,0xe0},{0x9e,0xe1},{0x9e,0xe2}, {0x9e,0xe3},{0x9e,0xe4},{0x9e,0xe5},{0x9e,0xe6},{0x9e,0xe7}, {0x9e,0xe8},{0x9e,0xe9},{0x9e,0xea},{0x9e,0xeb},{0x9e,0xec}, {0x9e,0xed},{0x9e,0xee},{0x9e,0xef},{0x9e,0xf0},{0x9e,0xf1}, {0x9e,0xf2},{0x9e,0xf3},{0x9e,0xf4},{0x9e,0xf5},{0x9e,0xf6}, {0x9e,0xf7},{0x9e,0xf8},{0x9e,0xf9},{0x9e,0xfa},{0x9e,0xfb}, {0x9e,0xfc},{0x9e,0xfd},{0x9e,0xfe},{0x9f,0x40},{0x9f,0x41}, {0x9f,0x42},{0x9f,0x43},{0x9f,0x44},{0x9f,0x45},{0x9f,0x46}, {0x9f,0x47},{0x9f,0x48},{0x9f,0x49},{0x9f,0x4a},{0x9f,0x4b}, {0x9f,0x4c},{0x9f,0x4d},{0x9f,0x4e},{0x9f,0x4f},{0x9f,0x50}, {0x9f,0x51},{0x9f,0x52},{0x9f,0x53},{0x9f,0x54},{0x9f,0x55}, {0x9f,0x56},{0x9f,0x57},{0x9f,0x58},{0x9f,0x59},{0x9f,0x5a}, {0x9f,0x5b},{0x9f,0x5c},{0x9f,0x5d},{0x9f,0x5e},{0x9f,0x5f}, {0x9f,0x60},{0x9f,0x61},{0x9f,0x62},{0x9f,0x63},{0x9f,0x64}, {0x9f,0x65},{0x9f,0x66},{0x9f,0x67},{0x9f,0x68},{0x9f,0x69}, {0x9f,0x6a},{0x9f,0x6b},{0x9f,0x6c},{0x9f,0x6d},{0x9f,0x6e}, {0x9f,0x6f},{0x9f,0x70},{0x9f,0x71},{0x9f,0x72},{0x9f,0x73}, {0x9f,0x74},{0x9f,0x75},{0x9f,0x76},{0x9f,0x77},{0x9f,0x78}, {0x9f,0x79},{0x9f,0x7a},{0x9f,0x7b},{0x9f,0x7c},{0x9f,0x7d}, {0x9f,0x7e},{0x9f,0xa1},{0x9f,0xa2},{0x9f,0xa3},{0x9f,0xa4}, {0x9f,0xa5},{0x9f,0xa6},{0x9f,0xa7},{0x9f,0xa8},{0x9f,0xa9}, {0x9f,0xaa},{0x9f,0xab},{0x9f,0xac},{0x9f,0xad},{0x9f,0xae}, {0x9f,0xaf},{0x9f,0xb0},{0x9f,0xb1},{0x9f,0xb2},{0x9f,0xb3}, {0x9f,0xb4},{0x9f,0xb5},{0x9f,0xb6},{0x9f,0xb7},{0x9f,0xb8}, {0x9f,0xb9},{0x9f,0xba},{0x9f,0xbb},{0x9f,0xbc},{0x9f,0xbd}, {0x9f,0xbe},{0x9f,0xbf},{0x9f,0xc0},{0x9f,0xc1},{0x9f,0xc2}, {0x9f,0xc3},{0x9f,0xc4},{0x9f,0xc5},{0x9f,0xc6},{0x9f,0xc7}, {0x9f,0xc8},{0x9f,0xc9},{0x9f,0xca},{0x9f,0xcb},{0x9f,0xcc}, {0x9f,0xcd},{0x9f,0xce},{0x9f,0xcf},{0x9f,0xd0},{0x9f,0xd1}, {0x9f,0xd2},{0x9f,0xd3},{0x9f,0xd4},{0x9f,0xd5},{0x9f,0xd6}, {0x9f,0xd7},{0x9f,0xd8},{0x9f,0xd9},{0x9f,0xda},{0x9f,0xdb}, {0x9f,0xdc},{0x9f,0xdd},{0x9f,0xde},{0x9f,0xdf},{0x9f,0xe0}, {0x9f,0xe1},{0x9f,0xe2},{0x9f,0xe3},{0x9f,0xe4},{0x9f,0xe5}, {0x9f,0xe6},{0x9f,0xe7},{0x9f,0xe8},{0x9f,0xe9},{0x9f,0xea}, {0x9f,0xeb},{0x9f,0xec},{0x9f,0xed},{0x9f,0xee},{0x9f,0xef}, {0x9f,0xf0},{0x9f,0xf1},{0x9f,0xf2},{0x9f,0xf3},{0x9f,0xf4}, {0x9f,0xf5},{0x9f,0xf6},{0x9f,0xf7},{0x9f,0xf8},{0x9f,0xf9}, {0x9f,0xfa},{0x9f,0xfb},{0x9f,0xfc},{0x9f,0xfd},{0x9f,0xfe}, {0xa0,0x40},{0xa0,0x41},{0xa0,0x42},{0xa0,0x43},{0xa0,0x44}, {0xa0,0x45},{0xa0,0x46},{0xa0,0x47},{0xa0,0x48},{0xa0,0x49}, {0xa0,0x4a},{0xa0,0x4b},{0xa0,0x4c},{0xa0,0x4d},{0xa0,0x4e}, {0xa0,0x4f},{0xa0,0x50},{0xa0,0x51},{0xa0,0x52},{0xa0,0x53}, {0xa0,0x54},{0xa0,0x55},{0xa0,0x56},{0xa0,0x57},{0xa0,0x58}, {0xa0,0x59},{0xa0,0x5a},{0xa0,0x5b},{0xa0,0x5c},{0xa0,0x5d}, {0xa0,0x5e},{0xa0,0x5f},{0xa0,0x60},{0xa0,0x61},{0xa0,0x62}, {0xa0,0x63},{0xa0,0x64},{0xa0,0x65},{0xa0,0x66},{0xa0,0x67}, {0xa0,0x68},{0xa0,0x69},{0xa0,0x6a},{0xa0,0x6b},{0xa0,0x6c}, {0xa0,0x6d},{0xa0,0x6e},{0xa0,0x6f},{0xa0,0x70},{0xa0,0x71}, {0xa0,0x72},{0xa0,0x73},{0xa0,0x74},{0xa0,0x75},{0xa0,0x76}, {0xa0,0x77},{0xa0,0x78},{0xa0,0x79},{0xa0,0x7a},{0xa0,0x7b}, {0xa0,0x7c},{0xa0,0x7d},{0xa0,0x7e},{0xa0,0xa1},{0xa0,0xa2}, {0xa0,0xa3},{0xa0,0xa4},{0xa0,0xa5},{0xa0,0xa6},{0xa0,0xa7}, {0xa0,0xa8},{0xa0,0xa9},{0xa0,0xaa},{0xa0,0xab},{0xa0,0xac}, {0xa0,0xad},{0xa0,0xae},{0xa0,0xaf},{0xa0,0xb0},{0xa0,0xb1}, {0xa0,0xb2},{0xa0,0xb3},{0xa0,0xb4},{0xa0,0xb5},{0xa0,0xb6}, {0xa0,0xb7},{0xa0,0xb8},{0xa0,0xb9},{0xa0,0xba},{0xa0,0xbb}, {0xa0,0xbc},{0xa0,0xbd},{0xa0,0xbe},{0xa0,0xbf},{0xa0,0xc0}, {0xa0,0xc1},{0xa0,0xc2},{0xa0,0xc3},{0xa0,0xc4},{0xa0,0xc5}, {0xa0,0xc6},{0xa0,0xc7},{0xa0,0xc8},{0xa0,0xc9},{0xa0,0xca}, {0xa0,0xcb},{0xa0,0xcc},{0xa0,0xcd},{0xa0,0xce},{0xa0,0xcf}, {0xa0,0xd0},{0xa0,0xd1},{0xa0,0xd2},{0xa0,0xd3},{0xa0,0xd4}, {0xa0,0xd5},{0xa0,0xd6},{0xa0,0xd7},{0xa0,0xd8},{0xa0,0xd9}, {0xa0,0xda},{0xa0,0xdb},{0xa0,0xdc},{0xa0,0xdd},{0xa0,0xde}, {0xa0,0xdf},{0xa0,0xe0},{0xa0,0xe1},{0xa0,0xe2},{0xa0,0xe3}, {0xa0,0xe4},{0xa0,0xe5},{0xa0,0xe6},{0xa0,0xe7},{0xa0,0xe8}, {0xa0,0xe9},{0xa0,0xea},{0xa0,0xeb},{0xa0,0xec},{0xa0,0xed}, {0xa0,0xee},{0xa0,0xef},{0xa0,0xf0},{0xa0,0xf1},{0xa0,0xf2}, {0xa0,0xf3},{0xa0,0xf4},{0xa0,0xf5},{0xa0,0xf6},{0xa0,0xf7}, {0xa0,0xf8},{0xa0,0xf9},{0xa0,0xfa},{0xa0,0xfb},{0xa0,0xfc}, {0xa0,0xfd},{0xa0,0xfe},{0x81,0x40},{0x81,0x41},{0x81,0x42}, {0x81,0x43},{0x81,0x44},{0x81,0x45},{0x81,0x46},{0x81,0x47}, {0x81,0x48},{0x81,0x49},{0x81,0x4a},{0x81,0x4b},{0x81,0x4c}, {0x81,0x4d},{0x81,0x4e},{0x81,0x4f},{0x81,0x50},{0x81,0x51}, {0x81,0x52},{0x81,0x53},{0x81,0x54},{0x81,0x55},{0x81,0x56}, {0x81,0x57},{0x81,0x58},{0x81,0x59},{0x81,0x5a},{0x81,0x5b}, {0x81,0x5c},{0x81,0x5d},{0x81,0x5e},{0x81,0x5f},{0x81,0x60}, {0x81,0x61},{0x81,0x62},{0x81,0x63},{0x81,0x64},{0x81,0x65}, {0x81,0x66},{0x81,0x67},{0x81,0x68},{0x81,0x69},{0x81,0x6a}, {0x81,0x6b},{0x81,0x6c},{0x81,0x6d},{0x81,0x6e},{0x81,0x6f}, {0x81,0x70},{0x81,0x71},{0x81,0x72},{0x81,0x73},{0x81,0x74}, {0x81,0x75},{0x81,0x76},{0x81,0x77},{0x81,0x78},{0x81,0x79}, {0x81,0x7a},{0x81,0x7b},{0x81,0x7c},{0x81,0x7d},{0x81,0x7e}, {0x81,0xa1},{0x81,0xa2},{0x81,0xa3},{0x81,0xa4},{0x81,0xa5}, {0x81,0xa6},{0x81,0xa7},{0x81,0xa8},{0x81,0xa9},{0x81,0xaa}, {0x81,0xab},{0x81,0xac},{0x81,0xad},{0x81,0xae},{0x81,0xaf}, {0x81,0xb0},{0x81,0xb1},{0x81,0xb2},{0x81,0xb3},{0x81,0xb4}, {0x81,0xb5},{0x81,0xb6},{0x81,0xb7},{0x81,0xb8},{0x81,0xb9}, {0x81,0xba},{0x81,0xbb},{0x81,0xbc},{0x81,0xbd},{0x81,0xbe}, {0x81,0xbf},{0x81,0xc0},{0x81,0xc1},{0x81,0xc2},{0x81,0xc3}, {0x81,0xc4},{0x81,0xc5},{0x81,0xc6},{0x81,0xc7},{0x81,0xc8}, {0x81,0xc9},{0x81,0xca},{0x81,0xcb},{0x81,0xcc},{0x81,0xcd}, {0x81,0xce},{0x81,0xcf},{0x81,0xd0},{0x81,0xd1},{0x81,0xd2}, {0x81,0xd3},{0x81,0xd4},{0x81,0xd5},{0x81,0xd6},{0x81,0xd7}, {0x81,0xd8},{0x81,0xd9},{0x81,0xda},{0x81,0xdb},{0x81,0xdc}, {0x81,0xdd},{0x81,0xde},{0x81,0xdf},{0x81,0xe0},{0x81,0xe1}, {0x81,0xe2},{0x81,0xe3},{0x81,0xe4},{0x81,0xe5},{0x81,0xe6}, {0x81,0xe7},{0x81,0xe8},{0x81,0xe9},{0x81,0xea},{0x81,0xeb}, {0x81,0xec},{0x81,0xed},{0x81,0xee},{0x81,0xef},{0x81,0xf0}, {0x81,0xf1},{0x81,0xf2},{0x81,0xf3},{0x81,0xf4},{0x81,0xf5}, {0x81,0xf6},{0x81,0xf7},{0x81,0xf8},{0x81,0xf9},{0x81,0xfa}, {0x81,0xfb},{0x81,0xfc},{0x81,0xfd},{0x81,0xfe},{0x82,0x40}, {0x82,0x41},{0x82,0x42},{0x82,0x43},{0x82,0x44},{0x82,0x45}, {0x82,0x46},{0x82,0x47},{0x82,0x48},{0x82,0x49},{0x82,0x4a}, {0x82,0x4b},{0x82,0x4c},{0x82,0x4d},{0x82,0x4e},{0x82,0x4f}, {0x82,0x50},{0x82,0x51},{0x82,0x52},{0x82,0x53},{0x82,0x54}, {0x82,0x55},{0x82,0x56},{0x82,0x57},{0x82,0x58},{0x82,0x59}, {0x82,0x5a},{0x82,0x5b},{0x82,0x5c},{0x82,0x5d},{0x82,0x5e}, {0x82,0x5f},{0x82,0x60},{0x82,0x61},{0x82,0x62},{0x82,0x63}, {0x82,0x64},{0x82,0x65},{0x82,0x66},{0x82,0x67},{0x82,0x68}, {0x82,0x69},{0x82,0x6a},{0x82,0x6b},{0x82,0x6c},{0x82,0x6d}, {0x82,0x6e},{0x82,0x6f},{0x82,0x70},{0x82,0x71},{0x82,0x72}, {0x82,0x73},{0x82,0x74},{0x82,0x75},{0x82,0x76},{0x82,0x77}, {0x82,0x78},{0x82,0x79},{0x82,0x7a},{0x82,0x7b},{0x82,0x7c}, {0x82,0x7d},{0x82,0x7e},{0x82,0xa1},{0x82,0xa2},{0x82,0xa3}, {0x82,0xa4},{0x82,0xa5},{0x82,0xa6},{0x82,0xa7},{0x82,0xa8}, {0x82,0xa9},{0x82,0xaa},{0x82,0xab},{0x82,0xac},{0x82,0xad}, {0x82,0xae},{0x82,0xaf},{0x82,0xb0},{0x82,0xb1},{0x82,0xb2}, {0x82,0xb3},{0x82,0xb4},{0x82,0xb5},{0x82,0xb6},{0x82,0xb7}, {0x82,0xb8},{0x82,0xb9},{0x82,0xba},{0x82,0xbb},{0x82,0xbc}, {0x82,0xbd},{0x82,0xbe},{0x82,0xbf},{0x82,0xc0},{0x82,0xc1}, {0x82,0xc2},{0x82,0xc3},{0x82,0xc4},{0x82,0xc5},{0x82,0xc6}, {0x82,0xc7},{0x82,0xc8},{0x82,0xc9},{0x82,0xca},{0x82,0xcb}, {0x82,0xcc},{0x82,0xcd},{0x82,0xce},{0x82,0xcf},{0x82,0xd0}, {0x82,0xd1},{0x82,0xd2},{0x82,0xd3},{0x82,0xd4},{0x82,0xd5}, {0x82,0xd6},{0x82,0xd7},{0x82,0xd8},{0x82,0xd9},{0x82,0xda}, {0x82,0xdb},{0x82,0xdc},{0x82,0xdd},{0x82,0xde},{0x82,0xdf}, {0x82,0xe0},{0x82,0xe1},{0x82,0xe2},{0x82,0xe3},{0x82,0xe4}, {0x82,0xe5},{0x82,0xe6},{0x82,0xe7},{0x82,0xe8},{0x82,0xe9}, {0x82,0xea},{0x82,0xeb},{0x82,0xec},{0x82,0xed},{0x82,0xee}, {0x82,0xef},{0x82,0xf0},{0x82,0xf1},{0x82,0xf2},{0x82,0xf3}, {0x82,0xf4},{0x82,0xf5},{0x82,0xf6},{0x82,0xf7},{0x82,0xf8}, {0x82,0xf9},{0x82,0xfa},{0x82,0xfb},{0x82,0xfc},{0x82,0xfd}, {0x82,0xfe},{0x83,0x40},{0x83,0x41},{0x83,0x42},{0x83,0x43}, {0x83,0x44},{0x83,0x45},{0x83,0x46},{0x83,0x47},{0x83,0x48}, {0x83,0x49},{0x83,0x4a},{0x83,0x4b},{0x83,0x4c},{0x83,0x4d}, {0x83,0x4e},{0x83,0x4f},{0x83,0x50},{0x83,0x51},{0x83,0x52}, {0x83,0x53},{0x83,0x54},{0x83,0x55},{0x83,0x56},{0x83,0x57}, {0x83,0x58},{0x83,0x59},{0x83,0x5a},{0x83,0x5b},{0x83,0x5c}, {0x83,0x5d},{0x83,0x5e},{0x83,0x5f},{0x83,0x60},{0x83,0x61}, {0x83,0x62},{0x83,0x63},{0x83,0x64},{0x83,0x65},{0x83,0x66}, {0x83,0x67},{0x83,0x68},{0x83,0x69},{0x83,0x6a},{0x83,0x6b}, {0x83,0x6c},{0x83,0x6d},{0x83,0x6e},{0x83,0x6f},{0x83,0x70}, {0x83,0x71},{0x83,0x72},{0x83,0x73},{0x83,0x74},{0x83,0x75}, {0x83,0x76},{0x83,0x77},{0x83,0x78},{0x83,0x79},{0x83,0x7a}, {0x83,0x7b},{0x83,0x7c},{0x83,0x7d},{0x83,0x7e},{0x83,0xa1}, {0x83,0xa2},{0x83,0xa3},{0x83,0xa4},{0x83,0xa5},{0x83,0xa6}, {0x83,0xa7},{0x83,0xa8},{0x83,0xa9},{0x83,0xaa},{0x83,0xab}, {0x83,0xac},{0x83,0xad},{0x83,0xae},{0x83,0xaf},{0x83,0xb0}, {0x83,0xb1},{0x83,0xb2},{0x83,0xb3},{0x83,0xb4},{0x83,0xb5}, {0x83,0xb6},{0x83,0xb7},{0x83,0xb8},{0x83,0xb9},{0x83,0xba}, {0x83,0xbb},{0x83,0xbc},{0x83,0xbd},{0x83,0xbe},{0x83,0xbf}, {0x83,0xc0},{0x83,0xc1},{0x83,0xc2},{0x83,0xc3},{0x83,0xc4}, {0x83,0xc5},{0x83,0xc6},{0x83,0xc7},{0x83,0xc8},{0x83,0xc9}, {0x83,0xca},{0x83,0xcb},{0x83,0xcc},{0x83,0xcd},{0x83,0xce}, {0x83,0xcf},{0x83,0xd0},{0x83,0xd1},{0x83,0xd2},{0x83,0xd3}, {0x83,0xd4},{0x83,0xd5},{0x83,0xd6},{0x83,0xd7},{0x83,0xd8}, {0x83,0xd9},{0x83,0xda},{0x83,0xdb},{0x83,0xdc},{0x83,0xdd}, {0x83,0xde},{0x83,0xdf},{0x83,0xe0},{0x83,0xe1},{0x83,0xe2}, {0x83,0xe3},{0x83,0xe4},{0x83,0xe5},{0x83,0xe6},{0x83,0xe7}, {0x83,0xe8},{0x83,0xe9},{0x83,0xea},{0x83,0xeb},{0x83,0xec}, {0x83,0xed},{0x83,0xee},{0x83,0xef},{0x83,0xf0},{0x83,0xf1}, {0x83,0xf2},{0x83,0xf3},{0x83,0xf4},{0x83,0xf5},{0x83,0xf6}, {0x83,0xf7},{0x83,0xf8},{0x83,0xf9},{0x83,0xfa},{0x83,0xfb}, {0x83,0xfc},{0x83,0xfd},{0x83,0xfe},{0x84,0x40},{0x84,0x41}, {0x84,0x42},{0x84,0x43},{0x84,0x44},{0x84,0x45},{0x84,0x46}, {0x84,0x47},{0x84,0x48},{0x84,0x49},{0x84,0x4a},{0x84,0x4b}, {0x84,0x4c},{0x84,0x4d},{0x84,0x4e},{0x84,0x4f},{0x84,0x50}, {0x84,0x51},{0x84,0x52},{0x84,0x53},{0x84,0x54},{0x84,0x55}, {0x84,0x56},{0x84,0x57},{0x84,0x58},{0x84,0x59},{0x84,0x5a}, {0x84,0x5b},{0x84,0x5c},{0x84,0x5d},{0x84,0x5e},{0x84,0x5f}, {0x84,0x60},{0x84,0x61},{0x84,0x62},{0x84,0x63},{0x84,0x64}, {0x84,0x65},{0x84,0x66},{0x84,0x67},{0x84,0x68},{0x84,0x69}, {0x84,0x6a},{0x84,0x6b},{0x84,0x6c},{0x84,0x6d},{0x84,0x6e}, {0x84,0x6f},{0x84,0x70},{0x84,0x71},{0x84,0x72},{0x84,0x73}, {0x84,0x74},{0x84,0x75},{0x84,0x76},{0x84,0x77},{0x84,0x78}, {0x84,0x79},{0x84,0x7a},{0x84,0x7b},{0x84,0x7c},{0x84,0x7d}, {0x84,0x7e},{0x84,0xa1},{0x84,0xa2},{0x84,0xa3},{0x84,0xa4}, {0x84,0xa5},{0x84,0xa6},{0x84,0xa7},{0x84,0xa8},{0x84,0xa9}, {0x84,0xaa},{0x84,0xab},{0x84,0xac},{0x84,0xad},{0x84,0xae}, {0x84,0xaf},{0x84,0xb0},{0x84,0xb1},{0x84,0xb2},{0x84,0xb3}, {0x84,0xb4},{0x84,0xb5},{0x84,0xb6},{0x84,0xb7},{0x84,0xb8}, {0x84,0xb9},{0x84,0xba},{0x84,0xbb},{0x84,0xbc},{0x84,0xbd}, {0x84,0xbe},{0x84,0xbf},{0x84,0xc0},{0x84,0xc1},{0x84,0xc2}, {0x84,0xc3},{0x84,0xc4},{0x84,0xc5},{0x84,0xc6},{0x84,0xc7}, {0x84,0xc8},{0x84,0xc9},{0x84,0xca},{0x84,0xcb},{0x84,0xcc}, {0x84,0xcd},{0x84,0xce},{0x84,0xcf},{0x84,0xd0},{0x84,0xd1}, {0x84,0xd2},{0x84,0xd3},{0x84,0xd4},{0x84,0xd5},{0x84,0xd6}, {0x84,0xd7},{0x84,0xd8},{0x84,0xd9},{0x84,0xda},{0x84,0xdb}, {0x84,0xdc},{0x84,0xdd},{0x84,0xde},{0x84,0xdf},{0x84,0xe0}, {0x84,0xe1},{0x84,0xe2},{0x84,0xe3},{0x84,0xe4},{0x84,0xe5}, {0x84,0xe6},{0x84,0xe7},{0x84,0xe8},{0x84,0xe9},{0x84,0xea}, {0x84,0xeb},{0x84,0xec},{0x84,0xed},{0x84,0xee},{0x84,0xef}, {0x84,0xf0},{0x84,0xf1},{0x84,0xf2},{0x84,0xf3},{0x84,0xf4}, {0x84,0xf5},{0x84,0xf6},{0x84,0xf7},{0x84,0xf8},{0x84,0xf9}, {0x84,0xfa},{0x84,0xfb},{0x84,0xfc},{0x84,0xfd},{0x84,0xfe}, {0x85,0x40},{0x85,0x41},{0x85,0x42},{0x85,0x43},{0x85,0x44}, {0x85,0x45},{0x85,0x46},{0x85,0x47},{0x85,0x48},{0x85,0x49}, {0x85,0x4a},{0x85,0x4b},{0x85,0x4c},{0x85,0x4d},{0x85,0x4e}, {0x85,0x4f},{0x85,0x50},{0x85,0x51},{0x85,0x52},{0x85,0x53}, {0x85,0x54},{0x85,0x55},{0x85,0x56},{0x85,0x57},{0x85,0x58}, {0x85,0x59},{0x85,0x5a},{0x85,0x5b},{0x85,0x5c},{0x85,0x5d}, {0x85,0x5e},{0x85,0x5f},{0x85,0x60},{0x85,0x61},{0x85,0x62}, {0x85,0x63},{0x85,0x64},{0x85,0x65},{0x85,0x66},{0x85,0x67}, {0x85,0x68},{0x85,0x69},{0x85,0x6a},{0x85,0x6b},{0x85,0x6c}, {0x85,0x6d},{0x85,0x6e},{0x85,0x6f},{0x85,0x70},{0x85,0x71}, {0x85,0x72},{0x85,0x73},{0x85,0x74},{0x85,0x75},{0x85,0x76}, {0x85,0x77},{0x85,0x78},{0x85,0x79},{0x85,0x7a},{0x85,0x7b}, {0x85,0x7c},{0x85,0x7d},{0x85,0x7e},{0x85,0xa1},{0x85,0xa2}, {0x85,0xa3},{0x85,0xa4},{0x85,0xa5},{0x85,0xa6},{0x85,0xa7}, {0x85,0xa8},{0x85,0xa9},{0x85,0xaa},{0x85,0xab},{0x85,0xac}, {0x85,0xad},{0x85,0xae},{0x85,0xaf},{0x85,0xb0},{0x85,0xb1}, {0x85,0xb2},{0x85,0xb3},{0x85,0xb4},{0x85,0xb5},{0x85,0xb6}, {0x85,0xb7},{0x85,0xb8},{0x85,0xb9},{0x85,0xba},{0x85,0xbb}, {0x85,0xbc},{0x85,0xbd},{0x85,0xbe},{0x85,0xbf},{0x85,0xc0}, {0x85,0xc1},{0x85,0xc2},{0x85,0xc3},{0x85,0xc4},{0x85,0xc5}, {0x85,0xc6},{0x85,0xc7},{0x85,0xc8},{0x85,0xc9},{0x85,0xca}, {0x85,0xcb},{0x85,0xcc},{0x85,0xcd},{0x85,0xce},{0x85,0xcf}, {0x85,0xd0},{0x85,0xd1},{0x85,0xd2},{0x85,0xd3},{0x85,0xd4}, {0x85,0xd5},{0x85,0xd6},{0x85,0xd7},{0x85,0xd8},{0x85,0xd9}, {0x85,0xda},{0x85,0xdb},{0x85,0xdc},{0x85,0xdd},{0x85,0xde}, {0x85,0xdf},{0x85,0xe0},{0x85,0xe1},{0x85,0xe2},{0x85,0xe3}, {0x85,0xe4},{0x85,0xe5},{0x85,0xe6},{0x85,0xe7},{0x85,0xe8}, {0x85,0xe9},{0x85,0xea},{0x85,0xeb},{0x85,0xec},{0x85,0xed}, {0x85,0xee},{0x85,0xef},{0x85,0xf0},{0x85,0xf1},{0x85,0xf2}, {0x85,0xf3},{0x85,0xf4},{0x85,0xf5},{0x85,0xf6},{0x85,0xf7}, {0x85,0xf8},{0x85,0xf9},{0x85,0xfa},{0x85,0xfb},{0x85,0xfc}, {0x85,0xfd},{0x85,0xfe},{0x86,0x40},{0x86,0x41},{0x86,0x42}, {0x86,0x43},{0x86,0x44},{0x86,0x45},{0x86,0x46},{0x86,0x47}, {0x86,0x48},{0x86,0x49},{0x86,0x4a},{0x86,0x4b},{0x86,0x4c}, {0x86,0x4d},{0x86,0x4e},{0x86,0x4f},{0x86,0x50},{0x86,0x51}, {0x86,0x52},{0x86,0x53},{0x86,0x54},{0x86,0x55},{0x86,0x56}, {0x86,0x57},{0x86,0x58},{0x86,0x59},{0x86,0x5a},{0x86,0x5b}, {0x86,0x5c},{0x86,0x5d},{0x86,0x5e},{0x86,0x5f},{0x86,0x60}, {0x86,0x61},{0x86,0x62},{0x86,0x63},{0x86,0x64},{0x86,0x65}, {0x86,0x66},{0x86,0x67},{0x86,0x68},{0x86,0x69},{0x86,0x6a}, {0x86,0x6b},{0x86,0x6c},{0x86,0x6d},{0x86,0x6e},{0x86,0x6f}, {0x86,0x70},{0x86,0x71},{0x86,0x72},{0x86,0x73},{0x86,0x74}, {0x86,0x75},{0x86,0x76},{0x86,0x77},{0x86,0x78},{0x86,0x79}, {0x86,0x7a},{0x86,0x7b},{0x86,0x7c},{0x86,0x7d},{0x86,0x7e}, {0x86,0xa1},{0x86,0xa2},{0x86,0xa3},{0x86,0xa4},{0x86,0xa5}, {0x86,0xa6},{0x86,0xa7},{0x86,0xa8},{0x86,0xa9},{0x86,0xaa}, {0x86,0xab},{0x86,0xac},{0x86,0xad},{0x86,0xae},{0x86,0xaf}, {0x86,0xb0},{0x86,0xb1},{0x86,0xb2},{0x86,0xb3},{0x86,0xb4}, {0x86,0xb5},{0x86,0xb6},{0x86,0xb7},{0x86,0xb8},{0x86,0xb9}, {0x86,0xba},{0x86,0xbb},{0x86,0xbc},{0x86,0xbd},{0x86,0xbe}, {0x86,0xbf},{0x86,0xc0},{0x86,0xc1},{0x86,0xc2},{0x86,0xc3}, {0x86,0xc4},{0x86,0xc5},{0x86,0xc6},{0x86,0xc7},{0x86,0xc8}, {0x86,0xc9},{0x86,0xca},{0x86,0xcb},{0x86,0xcc},{0x86,0xcd}, {0x86,0xce},{0x86,0xcf},{0x86,0xd0},{0x86,0xd1},{0x86,0xd2}, {0x86,0xd3},{0x86,0xd4},{0x86,0xd5},{0x86,0xd6},{0x86,0xd7}, {0x86,0xd8},{0x86,0xd9},{0x86,0xda},{0x86,0xdb},{0x86,0xdc}, {0x86,0xdd},{0x86,0xde},{0x86,0xdf},{0x86,0xe0},{0x86,0xe1}, {0x86,0xe2},{0x86,0xe3},{0x86,0xe4},{0x86,0xe5},{0x86,0xe6}, {0x86,0xe7},{0x86,0xe8},{0x86,0xe9},{0x86,0xea},{0x86,0xeb}, {0x86,0xec},{0x86,0xed},{0x86,0xee},{0x86,0xef},{0x86,0xf0}, {0x86,0xf1},{0x86,0xf2},{0x86,0xf3},{0x86,0xf4},{0x86,0xf5}, {0x86,0xf6},{0x86,0xf7},{0x86,0xf8},{0x86,0xf9},{0x86,0xfa}, {0x86,0xfb},{0x86,0xfc},{0x86,0xfd},{0x86,0xfe},{0x87,0x40}, {0x87,0x41},{0x87,0x42},{0x87,0x43},{0x87,0x44},{0x87,0x45}, {0x87,0x46},{0x87,0x47},{0x87,0x48},{0x87,0x49},{0x87,0x4a}, {0x87,0x4b},{0x87,0x4c},{0x87,0x4d},{0x87,0x4e},{0x87,0x4f}, {0x87,0x50},{0x87,0x51},{0x87,0x52},{0x87,0x53},{0x87,0x54}, {0x87,0x55},{0x87,0x56},{0x87,0x57},{0x87,0x58},{0x87,0x59}, {0x87,0x5a},{0x87,0x5b},{0x87,0x5c},{0x87,0x5d},{0x87,0x5e}, {0x87,0x5f},{0x87,0x60},{0x87,0x61},{0x87,0x62},{0x87,0x63}, {0x87,0x64},{0x87,0x65},{0x87,0x66},{0x87,0x67},{0x87,0x68}, {0x87,0x69},{0x87,0x6a},{0x87,0x6b},{0x87,0x6c},{0x87,0x6d}, {0x87,0x6e},{0x87,0x6f},{0x87,0x70},{0x87,0x71},{0x87,0x72}, {0x87,0x73},{0x87,0x74},{0x87,0x75},{0x87,0x76},{0x87,0x77}, {0x87,0x78},{0x87,0x79},{0x87,0x7a},{0x87,0x7b},{0x87,0x7c}, {0x87,0x7d},{0x87,0x7e},{0x87,0xa1},{0x87,0xa2},{0x87,0xa3}, {0x87,0xa4},{0x87,0xa5},{0x87,0xa6},{0x87,0xa7},{0x87,0xa8}, {0x87,0xa9},{0x87,0xaa},{0x87,0xab},{0x87,0xac},{0x87,0xad}, {0x87,0xae},{0x87,0xaf},{0x87,0xb0},{0x87,0xb1},{0x87,0xb2}, {0x87,0xb3},{0x87,0xb4},{0x87,0xb5},{0x87,0xb6},{0x87,0xb7}, {0x87,0xb8},{0x87,0xb9},{0x87,0xba},{0x87,0xbb},{0x87,0xbc}, {0x87,0xbd},{0x87,0xbe},{0x87,0xbf},{0x87,0xc0},{0x87,0xc1}, {0x87,0xc2},{0x87,0xc3},{0x87,0xc4},{0x87,0xc5},{0x87,0xc6}, {0x87,0xc7},{0x87,0xc8},{0x87,0xc9},{0x87,0xca},{0x87,0xcb}, {0x87,0xcc},{0x87,0xcd},{0x87,0xce},{0x87,0xcf},{0x87,0xd0}, {0x87,0xd1},{0x87,0xd2},{0x87,0xd3},{0x87,0xd4},{0x87,0xd5}, {0x87,0xd6},{0x87,0xd7},{0x87,0xd8},{0x87,0xd9},{0x87,0xda}, {0x87,0xdb},{0x87,0xdc},{0x87,0xdd},{0x87,0xde},{0x87,0xdf}, {0x87,0xe0},{0x87,0xe1},{0x87,0xe2},{0x87,0xe3},{0x87,0xe4}, {0x87,0xe5},{0x87,0xe6},{0x87,0xe7},{0x87,0xe8},{0x87,0xe9}, {0x87,0xea},{0x87,0xeb},{0x87,0xec},{0x87,0xed},{0x87,0xee}, {0x87,0xef},{0x87,0xf0},{0x87,0xf1},{0x87,0xf2},{0x87,0xf3}, {0x87,0xf4},{0x87,0xf5},{0x87,0xf6},{0x87,0xf7},{0x87,0xf8}, {0x87,0xf9},{0x87,0xfa},{0x87,0xfb},{0x87,0xfc},{0x87,0xfd}, {0x87,0xfe},{0x88,0x40},{0x88,0x41},{0x88,0x42},{0x88,0x43}, {0x88,0x44},{0x88,0x45},{0x88,0x46},{0x88,0x47},{0x88,0x48}, {0x88,0x49},{0x88,0x4a},{0x88,0x4b},{0x88,0x4c},{0x88,0x4d}, {0x88,0x4e},{0x88,0x4f},{0x88,0x50},{0x88,0x51},{0x88,0x52}, {0x88,0x53},{0x88,0x54},{0x88,0x55},{0x88,0x56},{0x88,0x57}, {0x88,0x58},{0x88,0x59},{0x88,0x5a},{0x88,0x5b},{0x88,0x5c}, {0x88,0x5d},{0x88,0x5e},{0x88,0x5f},{0x88,0x60},{0x88,0x61}, {0x88,0x62},{0x88,0x63},{0x88,0x64},{0x88,0x65},{0x88,0x66}, {0x88,0x67},{0x88,0x68},{0x88,0x69},{0x88,0x6a},{0x88,0x6b}, {0x88,0x6c},{0x88,0x6d},{0x88,0x6e},{0x88,0x6f},{0x88,0x70}, {0x88,0x71},{0x88,0x72},{0x88,0x73},{0x88,0x74},{0x88,0x75}, {0x88,0x76},{0x88,0x77},{0x88,0x78},{0x88,0x79},{0x88,0x7a}, {0x88,0x7b},{0x88,0x7c},{0x88,0x7d},{0x88,0x7e},{0x88,0xa1}, {0x88,0xa2},{0x88,0xa3},{0x88,0xa4},{0x88,0xa5},{0x88,0xa6}, {0x88,0xa7},{0x88,0xa8},{0x88,0xa9},{0x88,0xaa},{0x88,0xab}, {0x88,0xac},{0x88,0xad},{0x88,0xae},{0x88,0xaf},{0x88,0xb0}, {0x88,0xb1},{0x88,0xb2},{0x88,0xb3},{0x88,0xb4},{0x88,0xb5}, {0x88,0xb6},{0x88,0xb7},{0x88,0xb8},{0x88,0xb9},{0x88,0xba}, {0x88,0xbb},{0x88,0xbc},{0x88,0xbd},{0x88,0xbe},{0x88,0xbf}, {0x88,0xc0},{0x88,0xc1},{0x88,0xc2},{0x88,0xc3},{0x88,0xc4}, {0x88,0xc5},{0x88,0xc6},{0x88,0xc7},{0x88,0xc8},{0x88,0xc9}, {0x88,0xca},{0x88,0xcb},{0x88,0xcc},{0x88,0xcd},{0x88,0xce}, {0x88,0xcf},{0x88,0xd0},{0x88,0xd1},{0x88,0xd2},{0x88,0xd3}, {0x88,0xd4},{0x88,0xd5},{0x88,0xd6},{0x88,0xd7},{0x88,0xd8}, {0x88,0xd9},{0x88,0xda},{0x88,0xdb},{0x88,0xdc},{0x88,0xdd}, {0x88,0xde},{0x88,0xdf},{0x88,0xe0},{0x88,0xe1},{0x88,0xe2}, {0x88,0xe3},{0x88,0xe4},{0x88,0xe5},{0x88,0xe6},{0x88,0xe7}, {0x88,0xe8},{0x88,0xe9},{0x88,0xea},{0x88,0xeb},{0x88,0xec}, {0x88,0xed},{0x88,0xee},{0x88,0xef},{0x88,0xf0},{0x88,0xf1}, {0x88,0xf2},{0x88,0xf3},{0x88,0xf4},{0x88,0xf5},{0x88,0xf6}, {0x88,0xf7},{0x88,0xf8},{0x88,0xf9},{0x88,0xfa},{0x88,0xfb}, {0x88,0xfc},{0x88,0xfd},{0x88,0xfe},{0x89,0x40},{0x89,0x41}, {0x89,0x42},{0x89,0x43},{0x89,0x44},{0x89,0x45},{0x89,0x46}, {0x89,0x47},{0x89,0x48},{0x89,0x49},{0x89,0x4a},{0x89,0x4b}, {0x89,0x4c},{0x89,0x4d},{0x89,0x4e},{0x89,0x4f},{0x89,0x50}, {0x89,0x51},{0x89,0x52},{0x89,0x53},{0x89,0x54},{0x89,0x55}, {0x89,0x56},{0x89,0x57},{0x89,0x58},{0x89,0x59},{0x89,0x5a}, {0x89,0x5b},{0x89,0x5c},{0x89,0x5d},{0x89,0x5e},{0x89,0x5f}, {0x89,0x60},{0x89,0x61},{0x89,0x62},{0x89,0x63},{0x89,0x64}, {0x89,0x65},{0x89,0x66},{0x89,0x67},{0x89,0x68},{0x89,0x69}, {0x89,0x6a},{0x89,0x6b},{0x89,0x6c},{0x89,0x6d},{0x89,0x6e}, {0x89,0x6f},{0x89,0x70},{0x89,0x71},{0x89,0x72},{0x89,0x73}, {0x89,0x74},{0x89,0x75},{0x89,0x76},{0x89,0x77},{0x89,0x78}, {0x89,0x79},{0x89,0x7a},{0x89,0x7b},{0x89,0x7c},{0x89,0x7d}, {0x89,0x7e},{0x89,0xa1},{0x89,0xa2},{0x89,0xa3},{0x89,0xa4}, {0x89,0xa5},{0x89,0xa6},{0x89,0xa7},{0x89,0xa8},{0x89,0xa9}, {0x89,0xaa},{0x89,0xab},{0x89,0xac},{0x89,0xad},{0x89,0xae}, {0x89,0xaf},{0x89,0xb0},{0x89,0xb1},{0x89,0xb2},{0x89,0xb3}, {0x89,0xb4},{0x89,0xb5},{0x89,0xb6},{0x89,0xb7},{0x89,0xb8}, {0x89,0xb9},{0x89,0xba},{0x89,0xbb},{0x89,0xbc},{0x89,0xbd}, {0x89,0xbe},{0x89,0xbf},{0x89,0xc0},{0x89,0xc1},{0x89,0xc2}, {0x89,0xc3},{0x89,0xc4},{0x89,0xc5},{0x89,0xc6},{0x89,0xc7}, {0x89,0xc8},{0x89,0xc9},{0x89,0xca},{0x89,0xcb},{0x89,0xcc}, {0x89,0xcd},{0x89,0xce},{0x89,0xcf},{0x89,0xd0},{0x89,0xd1}, {0x89,0xd2},{0x89,0xd3},{0x89,0xd4},{0x89,0xd5},{0x89,0xd6}, {0x89,0xd7},{0x89,0xd8},{0x89,0xd9},{0x89,0xda},{0x89,0xdb}, {0x89,0xdc},{0x89,0xdd},{0x89,0xde},{0x89,0xdf},{0x89,0xe0}, {0x89,0xe1},{0x89,0xe2},{0x89,0xe3},{0x89,0xe4},{0x89,0xe5}, {0x89,0xe6},{0x89,0xe7},{0x89,0xe8},{0x89,0xe9},{0x89,0xea}, {0x89,0xeb},{0x89,0xec},{0x89,0xed},{0x89,0xee},{0x89,0xef}, {0x89,0xf0},{0x89,0xf1},{0x89,0xf2},{0x89,0xf3},{0x89,0xf4}, {0x89,0xf5},{0x89,0xf6},{0x89,0xf7},{0x89,0xf8},{0x89,0xf9}, {0x89,0xfa},{0x89,0xfb},{0x89,0xfc},{0x89,0xfd},{0x89,0xfe}, {0x8a,0x40},{0x8a,0x41},{0x8a,0x42},{0x8a,0x43},{0x8a,0x44}, {0x8a,0x45},{0x8a,0x46},{0x8a,0x47},{0x8a,0x48},{0x8a,0x49}, {0x8a,0x4a},{0x8a,0x4b},{0x8a,0x4c},{0x8a,0x4d},{0x8a,0x4e}, {0x8a,0x4f},{0x8a,0x50},{0x8a,0x51},{0x8a,0x52},{0x8a,0x53}, {0x8a,0x54},{0x8a,0x55},{0x8a,0x56},{0x8a,0x57},{0x8a,0x58}, {0x8a,0x59},{0x8a,0x5a},{0x8a,0x5b},{0x8a,0x5c},{0x8a,0x5d}, {0x8a,0x5e},{0x8a,0x5f},{0x8a,0x60},{0x8a,0x61},{0x8a,0x62}, {0x8a,0x63},{0x8a,0x64},{0x8a,0x65},{0x8a,0x66},{0x8a,0x67}, {0x8a,0x68},{0x8a,0x69},{0x8a,0x6a},{0x8a,0x6b},{0x8a,0x6c}, {0x8a,0x6d},{0x8a,0x6e},{0x8a,0x6f},{0x8a,0x70},{0x8a,0x71}, {0x8a,0x72},{0x8a,0x73},{0x8a,0x74},{0x8a,0x75},{0x8a,0x76}, {0x8a,0x77},{0x8a,0x78},{0x8a,0x79},{0x8a,0x7a},{0x8a,0x7b}, {0x8a,0x7c},{0x8a,0x7d},{0x8a,0x7e},{0x8a,0xa1},{0x8a,0xa2}, {0x8a,0xa3},{0x8a,0xa4},{0x8a,0xa5},{0x8a,0xa6},{0x8a,0xa7}, {0x8a,0xa8},{0x8a,0xa9},{0x8a,0xaa},{0x8a,0xab},{0x8a,0xac}, {0x8a,0xad},{0x8a,0xae},{0x8a,0xaf},{0x8a,0xb0},{0x8a,0xb1}, {0x8a,0xb2},{0x8a,0xb3},{0x8a,0xb4},{0x8a,0xb5},{0x8a,0xb6}, {0x8a,0xb7},{0x8a,0xb8},{0x8a,0xb9},{0x8a,0xba},{0x8a,0xbb}, {0x8a,0xbc},{0x8a,0xbd},{0x8a,0xbe},{0x8a,0xbf},{0x8a,0xc0}, {0x8a,0xc1},{0x8a,0xc2},{0x8a,0xc3},{0x8a,0xc4},{0x8a,0xc5}, {0x8a,0xc6},{0x8a,0xc7},{0x8a,0xc8},{0x8a,0xc9},{0x8a,0xca}, {0x8a,0xcb},{0x8a,0xcc},{0x8a,0xcd},{0x8a,0xce},{0x8a,0xcf}, {0x8a,0xd0},{0x8a,0xd1},{0x8a,0xd2},{0x8a,0xd3},{0x8a,0xd4}, {0x8a,0xd5},{0x8a,0xd6},{0x8a,0xd7},{0x8a,0xd8},{0x8a,0xd9}, {0x8a,0xda},{0x8a,0xdb},{0x8a,0xdc},{0x8a,0xdd},{0x8a,0xde}, {0x8a,0xdf},{0x8a,0xe0},{0x8a,0xe1},{0x8a,0xe2},{0x8a,0xe3}, {0x8a,0xe4},{0x8a,0xe5},{0x8a,0xe6},{0x8a,0xe7},{0x8a,0xe8}, {0x8a,0xe9},{0x8a,0xea},{0x8a,0xeb},{0x8a,0xec},{0x8a,0xed}, {0x8a,0xee},{0x8a,0xef},{0x8a,0xf0},{0x8a,0xf1},{0x8a,0xf2}, {0x8a,0xf3},{0x8a,0xf4},{0x8a,0xf5},{0x8a,0xf6},{0x8a,0xf7}, {0x8a,0xf8},{0x8a,0xf9},{0x8a,0xfa},{0x8a,0xfb},{0x8a,0xfc}, {0x8a,0xfd},{0x8a,0xfe},{0x8b,0x40},{0x8b,0x41},{0x8b,0x42}, {0x8b,0x43},{0x8b,0x44},{0x8b,0x45},{0x8b,0x46},{0x8b,0x47}, {0x8b,0x48},{0x8b,0x49},{0x8b,0x4a},{0x8b,0x4b},{0x8b,0x4c}, {0x8b,0x4d},{0x8b,0x4e},{0x8b,0x4f},{0x8b,0x50},{0x8b,0x51}, {0x8b,0x52},{0x8b,0x53},{0x8b,0x54},{0x8b,0x55},{0x8b,0x56}, {0x8b,0x57},{0x8b,0x58},{0x8b,0x59},{0x8b,0x5a},{0x8b,0x5b}, {0x8b,0x5c},{0x8b,0x5d},{0x8b,0x5e},{0x8b,0x5f},{0x8b,0x60}, {0x8b,0x61},{0x8b,0x62},{0x8b,0x63},{0x8b,0x64},{0x8b,0x65}, {0x8b,0x66},{0x8b,0x67},{0x8b,0x68},{0x8b,0x69},{0x8b,0x6a}, {0x8b,0x6b},{0x8b,0x6c},{0x8b,0x6d},{0x8b,0x6e},{0x8b,0x6f}, {0x8b,0x70},{0x8b,0x71},{0x8b,0x72},{0x8b,0x73},{0x8b,0x74}, {0x8b,0x75},{0x8b,0x76},{0x8b,0x77},{0x8b,0x78},{0x8b,0x79}, {0x8b,0x7a},{0x8b,0x7b},{0x8b,0x7c},{0x8b,0x7d},{0x8b,0x7e}, {0x8b,0xa1},{0x8b,0xa2},{0x8b,0xa3},{0x8b,0xa4},{0x8b,0xa5}, {0x8b,0xa6},{0x8b,0xa7},{0x8b,0xa8},{0x8b,0xa9},{0x8b,0xaa}, {0x8b,0xab},{0x8b,0xac},{0x8b,0xad},{0x8b,0xae},{0x8b,0xaf}, {0x8b,0xb0},{0x8b,0xb1},{0x8b,0xb2},{0x8b,0xb3},{0x8b,0xb4}, {0x8b,0xb5},{0x8b,0xb6},{0x8b,0xb7},{0x8b,0xb8},{0x8b,0xb9}, {0x8b,0xba},{0x8b,0xbb},{0x8b,0xbc},{0x8b,0xbd},{0x8b,0xbe}, {0x8b,0xbf},{0x8b,0xc0},{0x8b,0xc1},{0x8b,0xc2},{0x8b,0xc3}, {0x8b,0xc4},{0x8b,0xc5},{0x8b,0xc6},{0x8b,0xc7},{0x8b,0xc8}, {0x8b,0xc9},{0x8b,0xca},{0x8b,0xcb},{0x8b,0xcc},{0x8b,0xcd}, {0x8b,0xce},{0x8b,0xcf},{0x8b,0xd0},{0x8b,0xd1},{0x8b,0xd2}, {0x8b,0xd3},{0x8b,0xd4},{0x8b,0xd5},{0x8b,0xd6},{0x8b,0xd7}, {0x8b,0xd8},{0x8b,0xd9},{0x8b,0xda},{0x8b,0xdb},{0x8b,0xdc}, {0x8b,0xdd},{0x8b,0xde},{0x8b,0xdf},{0x8b,0xe0},{0x8b,0xe1}, {0x8b,0xe2},{0x8b,0xe3},{0x8b,0xe4},{0x8b,0xe5},{0x8b,0xe6}, {0x8b,0xe7},{0x8b,0xe8},{0x8b,0xe9},{0x8b,0xea},{0x8b,0xeb}, {0x8b,0xec},{0x8b,0xed},{0x8b,0xee},{0x8b,0xef},{0x8b,0xf0}, {0x8b,0xf1},{0x8b,0xf2},{0x8b,0xf3},{0x8b,0xf4},{0x8b,0xf5}, {0x8b,0xf6},{0x8b,0xf7},{0x8b,0xf8},{0x8b,0xf9},{0x8b,0xfa}, {0x8b,0xfb},{0x8b,0xfc},{0x8b,0xfd},{0x8b,0xfe},{0x8c,0x40}, {0x8c,0x41},{0x8c,0x42},{0x8c,0x43},{0x8c,0x44},{0x8c,0x45}, {0x8c,0x46},{0x8c,0x47},{0x8c,0x48},{0x8c,0x49},{0x8c,0x4a}, {0x8c,0x4b},{0x8c,0x4c},{0x8c,0x4d},{0x8c,0x4e},{0x8c,0x4f}, {0x8c,0x50},{0x8c,0x51},{0x8c,0x52},{0x8c,0x53},{0x8c,0x54}, {0x8c,0x55},{0x8c,0x56},{0x8c,0x57},{0x8c,0x58},{0x8c,0x59}, {0x8c,0x5a},{0x8c,0x5b},{0x8c,0x5c},{0x8c,0x5d},{0x8c,0x5e}, {0x8c,0x5f},{0x8c,0x60},{0x8c,0x61},{0x8c,0x62},{0x8c,0x63}, {0x8c,0x64},{0x8c,0x65},{0x8c,0x66},{0x8c,0x67},{0x8c,0x68}, {0x8c,0x69},{0x8c,0x6a},{0x8c,0x6b},{0x8c,0x6c},{0x8c,0x6d}, {0x8c,0x6e},{0x8c,0x6f},{0x8c,0x70},{0x8c,0x71},{0x8c,0x72}, {0x8c,0x73},{0x8c,0x74},{0x8c,0x75},{0x8c,0x76},{0x8c,0x77}, {0x8c,0x78},{0x8c,0x79},{0x8c,0x7a},{0x8c,0x7b},{0x8c,0x7c}, {0x8c,0x7d},{0x8c,0x7e},{0x8c,0xa1},{0x8c,0xa2},{0x8c,0xa3}, {0x8c,0xa4},{0x8c,0xa5},{0x8c,0xa6},{0x8c,0xa7},{0x8c,0xa8}, {0x8c,0xa9},{0x8c,0xaa},{0x8c,0xab},{0x8c,0xac},{0x8c,0xad}, {0x8c,0xae},{0x8c,0xaf},{0x8c,0xb0},{0x8c,0xb1},{0x8c,0xb2}, {0x8c,0xb3},{0x8c,0xb4},{0x8c,0xb5},{0x8c,0xb6},{0x8c,0xb7}, {0x8c,0xb8},{0x8c,0xb9},{0x8c,0xba},{0x8c,0xbb},{0x8c,0xbc}, {0x8c,0xbd},{0x8c,0xbe},{0x8c,0xbf},{0x8c,0xc0},{0x8c,0xc1}, {0x8c,0xc2},{0x8c,0xc3},{0x8c,0xc4},{0x8c,0xc5},{0x8c,0xc6}, {0x8c,0xc7},{0x8c,0xc8},{0x8c,0xc9},{0x8c,0xca},{0x8c,0xcb}, {0x8c,0xcc},{0x8c,0xcd},{0x8c,0xce},{0x8c,0xcf},{0x8c,0xd0}, {0x8c,0xd1},{0x8c,0xd2},{0x8c,0xd3},{0x8c,0xd4},{0x8c,0xd5}, {0x8c,0xd6},{0x8c,0xd7},{0x8c,0xd8},{0x8c,0xd9},{0x8c,0xda}, {0x8c,0xdb},{0x8c,0xdc},{0x8c,0xdd},{0x8c,0xde},{0x8c,0xdf}, {0x8c,0xe0},{0x8c,0xe1},{0x8c,0xe2},{0x8c,0xe3},{0x8c,0xe4}, {0x8c,0xe5},{0x8c,0xe6},{0x8c,0xe7},{0x8c,0xe8},{0x8c,0xe9}, {0x8c,0xea},{0x8c,0xeb},{0x8c,0xec},{0x8c,0xed},{0x8c,0xee}, {0x8c,0xef},{0x8c,0xf0},{0x8c,0xf1},{0x8c,0xf2},{0x8c,0xf3}, {0x8c,0xf4},{0x8c,0xf5},{0x8c,0xf6},{0x8c,0xf7},{0x8c,0xf8}, {0x8c,0xf9},{0x8c,0xfa},{0x8c,0xfb},{0x8c,0xfc},{0x8c,0xfd}, {0x8c,0xfe},{0x8d,0x40},{0x8d,0x41},{0x8d,0x42},{0x8d,0x43}, {0x8d,0x44},{0x8d,0x45},{0x8d,0x46},{0x8d,0x47},{0x8d,0x48}, {0x8d,0x49},{0x8d,0x4a},{0x8d,0x4b},{0x8d,0x4c},{0x8d,0x4d}, {0x8d,0x4e},{0x8d,0x4f},{0x8d,0x50},{0x8d,0x51},{0x8d,0x52}, {0x8d,0x53},{0x8d,0x54},{0x8d,0x55},{0x8d,0x56},{0x8d,0x57}, {0x8d,0x58},{0x8d,0x59},{0x8d,0x5a},{0x8d,0x5b},{0x8d,0x5c}, {0x8d,0x5d},{0x8d,0x5e},{0x8d,0x5f},{0x8d,0x60},{0x8d,0x61}, {0x8d,0x62},{0x8d,0x63},{0x8d,0x64},{0x8d,0x65},{0x8d,0x66}, {0x8d,0x67},{0x8d,0x68},{0x8d,0x69},{0x8d,0x6a},{0x8d,0x6b}, {0x8d,0x6c},{0x8d,0x6d},{0x8d,0x6e},{0x8d,0x6f},{0x8d,0x70}, {0x8d,0x71},{0x8d,0x72},{0x8d,0x73},{0x8d,0x74},{0x8d,0x75}, {0x8d,0x76},{0x8d,0x77},{0x8d,0x78},{0x8d,0x79},{0x8d,0x7a}, {0x8d,0x7b},{0x8d,0x7c},{0x8d,0x7d},{0x8d,0x7e},{0x8d,0xa1}, {0x8d,0xa2},{0x8d,0xa3},{0x8d,0xa4},{0x8d,0xa5},{0x8d,0xa6}, {0x8d,0xa7},{0x8d,0xa8},{0x8d,0xa9},{0x8d,0xaa},{0x8d,0xab}, {0x8d,0xac},{0x8d,0xad},{0x8d,0xae},{0x8d,0xaf},{0x8d,0xb0}, {0x8d,0xb1},{0x8d,0xb2},{0x8d,0xb3},{0x8d,0xb4},{0x8d,0xb5}, {0x8d,0xb6},{0x8d,0xb7},{0x8d,0xb8},{0x8d,0xb9},{0x8d,0xba}, {0x8d,0xbb},{0x8d,0xbc},{0x8d,0xbd},{0x8d,0xbe},{0x8d,0xbf}, {0x8d,0xc0},{0x8d,0xc1},{0x8d,0xc2},{0x8d,0xc3},{0x8d,0xc4}, {0x8d,0xc5},{0x8d,0xc6},{0x8d,0xc7},{0x8d,0xc8},{0x8d,0xc9}, {0x8d,0xca},{0x8d,0xcb},{0x8d,0xcc},{0x8d,0xcd},{0x8d,0xce}, {0x8d,0xcf},{0x8d,0xd0},{0x8d,0xd1},{0x8d,0xd2},{0x8d,0xd3}, {0x8d,0xd4},{0x8d,0xd5},{0x8d,0xd6},{0x8d,0xd7},{0x8d,0xd8}, {0x8d,0xd9},{0x8d,0xda},{0x8d,0xdb},{0x8d,0xdc},{0x8d,0xdd}, {0x8d,0xde},{0x8d,0xdf},{0x8d,0xe0},{0x8d,0xe1},{0x8d,0xe2}, {0x8d,0xe3},{0x8d,0xe4},{0x8d,0xe5},{0x8d,0xe6},{0x8d,0xe7}, {0x8d,0xe8},{0x8d,0xe9},{0x8d,0xea},{0x8d,0xeb},{0x8d,0xec}, {0x8d,0xed},{0x8d,0xee},{0x8d,0xef},{0x8d,0xf0},{0x8d,0xf1}, {0x8d,0xf2},{0x8d,0xf3},{0x8d,0xf4},{0x8d,0xf5},{0x8d,0xf6}, {0x8d,0xf7},{0x8d,0xf8},{0x8d,0xf9},{0x8d,0xfa},{0x8d,0xfb}, {0x8d,0xfc},{0x8d,0xfd},{0x8d,0xfe},{0xc6,0xa1},{0xc6,0xa2}, {0xc6,0xa3},{0xc6,0xa4},{0xc6,0xa5},{0xc6,0xa6},{0xc6,0xa7}, {0xc6,0xa8},{0xc6,0xa9},{0xc6,0xaa},{0xc6,0xab},{0xc6,0xac}, {0xc6,0xad},{0xc6,0xae},{0xc6,0xaf},{0xc6,0xb0},{0xc6,0xb1}, {0xc6,0xb2},{0xc6,0xb3},{0xc6,0xb4},{0xc6,0xb5},{0xc6,0xb6}, {0xc6,0xb7},{0xc6,0xb8},{0xc6,0xb9},{0xc6,0xba},{0xc6,0xbb}, {0xc6,0xbc},{0xc6,0xbd},{0xc6,0xbe},{0xc6,0xbf},{0xc6,0xc0}, {0xc6,0xc1},{0xc6,0xc2},{0xc6,0xc3},{0xc6,0xc4},{0xc6,0xc5}, {0xc6,0xc6},{0xc6,0xc7},{0xc6,0xc8},{0xc6,0xc9},{0xc6,0xca}, {0xc6,0xcb},{0xc6,0xcc},{0xc6,0xcd},{0xc6,0xce},{0xc6,0xcf}, {0xc6,0xd0},{0xc6,0xd1},{0xc6,0xd2},{0xc6,0xd3},{0xc6,0xd4}, {0xc6,0xd5},{0xc6,0xd6},{0xc6,0xd7},{0xc6,0xd8},{0xc6,0xd9}, {0xc6,0xda},{0xc6,0xdb},{0xc6,0xdc},{0xc6,0xdd},{0xc6,0xde}, {0xc6,0xdf},{0xc6,0xe0},{0xc6,0xe1},{0xc6,0xe2},{0xc6,0xe3}, {0xc6,0xe4},{0xc6,0xe5},{0xc6,0xe6},{0xc6,0xe7},{0xc6,0xe8}, {0xc6,0xe9},{0xc6,0xea},{0xc6,0xeb},{0xc6,0xec},{0xc6,0xed}, {0xc6,0xee},{0xc6,0xef},{0xc6,0xf0},{0xc6,0xf1},{0xc6,0xf2}, {0xc6,0xf3},{0xc6,0xf4},{0xc6,0xf5},{0xc6,0xf6},{0xc6,0xf7}, {0xc6,0xf8},{0xc6,0xf9},{0xc6,0xfa},{0xc6,0xfb},{0xc6,0xfc}, {0xc6,0xfd},{0xc6,0xfe},{0xc7,0x40},{0xc7,0x41},{0xc7,0x42}, {0xc7,0x43},{0xc7,0x44},{0xc7,0x45},{0xc7,0x46},{0xc7,0x47}, {0xc7,0x48},{0xc7,0x49},{0xc7,0x4a},{0xc7,0x4b},{0xc7,0x4c}, {0xc7,0x4d},{0xc7,0x4e},{0xc7,0x4f},{0xc7,0x50},{0xc7,0x51}, {0xc7,0x52},{0xc7,0x53},{0xc7,0x54},{0xc7,0x55},{0xc7,0x56}, {0xc7,0x57},{0xc7,0x58},{0xc7,0x59},{0xc7,0x5a},{0xc7,0x5b}, {0xc7,0x5c},{0xc7,0x5d},{0xc7,0x5e},{0xc7,0x5f},{0xc7,0x60}, {0xc7,0x61},{0xc7,0x62},{0xc7,0x63},{0xc7,0x64},{0xc7,0x65}, {0xc7,0x66},{0xc7,0x67},{0xc7,0x68},{0xc7,0x69},{0xc7,0x6a}, {0xc7,0x6b},{0xc7,0x6c},{0xc7,0x6d},{0xc7,0x6e},{0xc7,0x6f}, {0xc7,0x70},{0xc7,0x71},{0xc7,0x72},{0xc7,0x73},{0xc7,0x74}, {0xc7,0x75},{0xc7,0x76},{0xc7,0x77},{0xc7,0x78},{0xc7,0x79}, {0xc7,0x7a},{0xc7,0x7b},{0xc7,0x7c},{0xc7,0x7d},{0xc7,0x7e}, {0xc7,0xa1},{0xc7,0xa2},{0xc7,0xa3},{0xc7,0xa4},{0xc7,0xa5}, {0xc7,0xa6},{0xc7,0xa7},{0xc7,0xa8},{0xc7,0xa9},{0xc7,0xaa}, {0xc7,0xab},{0xc7,0xac},{0xc7,0xad},{0xc7,0xae},{0xc7,0xaf}, {0xc7,0xb0},{0xc7,0xb1},{0xc7,0xb2},{0xc7,0xb3},{0xc7,0xb4}, {0xc7,0xb5},{0xc7,0xb6},{0xc7,0xb7},{0xc7,0xb8},{0xc7,0xb9}, {0xc7,0xba},{0xc7,0xbb},{0xc7,0xbc},{0xc7,0xbd},{0xc7,0xbe}, {0xc7,0xbf},{0xc7,0xc0},{0xc7,0xc1},{0xc7,0xc2},{0xc7,0xc3}, {0xc7,0xc4},{0xc7,0xc5},{0xc7,0xc6},{0xc7,0xc7},{0xc7,0xc8}, {0xc7,0xc9},{0xc7,0xca},{0xc7,0xcb},{0xc7,0xcc},{0xc7,0xcd}, {0xc7,0xce},{0xc7,0xcf},{0xc7,0xd0},{0xc7,0xd1},{0xc7,0xd2}, {0xc7,0xd3},{0xc7,0xd4},{0xc7,0xd5},{0xc7,0xd6},{0xc7,0xd7}, {0xc7,0xd8},{0xc7,0xd9},{0xc7,0xda},{0xc7,0xdb},{0xc7,0xdc}, {0xc7,0xdd},{0xc7,0xde},{0xc7,0xdf},{0xc7,0xe0},{0xc7,0xe1}, {0xc7,0xe2},{0xc7,0xe3},{0xc7,0xe4},{0xc7,0xe5},{0xc7,0xe6}, {0xc7,0xe7},{0xc7,0xe8},{0xc7,0xe9},{0xc7,0xea},{0xc7,0xeb}, {0xc7,0xec},{0xc7,0xed},{0xc7,0xee},{0xc7,0xef},{0xc7,0xf0}, {0xc7,0xf1},{0xc7,0xf2},{0xc7,0xf3},{0xc7,0xf4},{0xc7,0xf5}, {0xc7,0xf6},{0xc7,0xf7},{0xc7,0xf8},{0xc7,0xf9},{0xc7,0xfa}, {0xc7,0xfb},{0xc7,0xfc},{0xc7,0xfd},{0xc7,0xfe},{0xc8,0x40}, {0xc8,0x41},{0xc8,0x42},{0xc8,0x43},{0xc8,0x44},{0xc8,0x45}, {0xc8,0x46},{0xc8,0x47},{0xc8,0x48},{0xc8,0x49},{0xc8,0x4a}, {0xc8,0x4b},{0xc8,0x4c},{0xc8,0x4d},{0xc8,0x4e},{0xc8,0x4f}, {0xc8,0x50},{0xc8,0x51},{0xc8,0x52},{0xc8,0x53},{0xc8,0x54}, {0xc8,0x55},{0xc8,0x56},{0xc8,0x57},{0xc8,0x58},{0xc8,0x59}, {0xc8,0x5a},{0xc8,0x5b},{0xc8,0x5c},{0xc8,0x5d},{0xc8,0x5e}, {0xc8,0x5f},{0xc8,0x60},{0xc8,0x61},{0xc8,0x62},{0xc8,0x63}, {0xc8,0x64},{0xc8,0x65},{0xc8,0x66},{0xc8,0x67},{0xc8,0x68}, {0xc8,0x69},{0xc8,0x6a},{0xc8,0x6b},{0xc8,0x6c},{0xc8,0x6d}, {0xc8,0x6e},{0xc8,0x6f},{0xc8,0x70},{0xc8,0x71},{0xc8,0x72}, {0xc8,0x73},{0xc8,0x74},{0xc8,0x75},{0xc8,0x76},{0xc8,0x77}, {0xc8,0x78},{0xc8,0x79},{0xc8,0x7a},{0xc8,0x7b},{0xc8,0x7c}, {0xc8,0x7d},{0xc8,0x7e},{0xc8,0xa1},{0xc8,0xa2},{0xc8,0xa3}, {0xc8,0xa4},{0xc8,0xa5},{0xc8,0xa6},{0xc8,0xa7},{0xc8,0xa8}, {0xc8,0xa9},{0xc8,0xaa},{0xc8,0xab},{0xc8,0xac},{0xc8,0xad}, {0xc8,0xae},{0xc8,0xaf},{0xc8,0xb0},{0xc8,0xb1},{0xc8,0xb2}, {0xc8,0xb3},{0xc8,0xb4},{0xc8,0xb5},{0xc8,0xb6},{0xc8,0xb7}, {0xc8,0xb8},{0xc8,0xb9},{0xc8,0xba},{0xc8,0xbb},{0xc8,0xbc}, {0xc8,0xbd},{0xc8,0xbe},{0xc8,0xbf},{0xc8,0xc0},{0xc8,0xc1}, {0xc8,0xc2},{0xc8,0xc3},{0xc8,0xc4},{0xc8,0xc5},{0xc8,0xc6}, {0xc8,0xc7},{0xc8,0xc8},{0xc8,0xc9},{0xc8,0xca},{0xc8,0xcb}, {0xc8,0xcc},{0xc8,0xcd},{0xc8,0xce},{0xc8,0xcf},{0xc8,0xd0}, {0xc8,0xd1},{0xc8,0xd2},{0xc8,0xd3},{0xc8,0xd4},{0xc8,0xd5}, {0xc8,0xd6},{0xc8,0xd7},{0xc8,0xd8},{0xc8,0xd9},{0xc8,0xda}, {0xc8,0xdb},{0xc8,0xdc},{0xc8,0xdd},{0xc8,0xde},{0xc8,0xdf}, {0xc8,0xe0},{0xc8,0xe1},{0xc8,0xe2},{0xc8,0xe3},{0xc8,0xe4}, {0xc8,0xe5},{0xc8,0xe6},{0xc8,0xe7},{0xc8,0xe8},{0xc8,0xe9}, {0xc8,0xea},{0xc8,0xeb},{0xc8,0xec},{0xc8,0xed},{0xc8,0xee}, {0xc8,0xef},{0xc8,0xf0},{0xc8,0xf1},{0xc8,0xf2},{0xc8,0xf3}, {0xc8,0xf4},{0xc8,0xf5},{0xc8,0xf6},{0xc8,0xf7},{0xc8,0xf8}, {0xc8,0xf9},{0xc8,0xfa},{0xc8,0xfb},{0xc8,0xfc},{0xc8,0xfd}, {0xc8,0xfe},{0xa3,0xe2},{0xa3,0xe3},{0xa3,0xe4},{0xa3,0xe5}, {0xa3,0xe6},{0xa3,0xe7},{0xa3,0xe8},{0xa3,0xe9},{0xa3,0xea}, {0xa3,0xeb},{0xa3,0xec},{0xa3,0xed},{0xa3,0xee},{0xa3,0xef}, {0xa3,0xf0},{0xa3,0xf1},{0xa3,0xf2},{0xa3,0xf3},{0xa3,0xf4}, {0xa3,0xf5},{0xa3,0xf6},{0xa3,0xf7},{0xa3,0xf8},{0xa3,0xf9}, {0xa3,0xfa},{0xa3,0xfb},{0xa3,0xfc},{0xa3,0xfd},{0xa3,0xfe}, {0xc6,0xde},{0xc6,0xdf},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0xff},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xb0,0x5a}, {0xa7,0xf3},{0xa8,0xae},{0xb8,0xeb},{0xb7,0xc6},{0xa6,0xea}, {0xa5,0x79},{0xc0,0x74},{0xc0,0x74},{0xab,0xb4},{0xaa,0xf7}, {0xb3,0xe2},{0xa9,0x60},{0xc3,0x69},{0xc4,0xee},{0xc3,0xb9}, {0xc5,0xda},{0xc1,0xb3},{0xbb,0x72},{0xc5,0xde},{0xbc,0xd6}, {0xac,0xa5},{0xaf,0x4f},{0xaf,0x5f},{0xb8,0xa8},{0xb9,0x54}, {0xc0,0x64},{0xb6,0xc3},{0xa7,0x5a},{0xc4,0xe6},{0xc4,0xea}, {0xc4,0xf5},{0xc6,0x7d},{0xb4,0x50},{0xc0,0xdd},{0xc2,0xc5}, {0xc4,0xb0},{0xa9,0xd4},{0xc3,0xbe},{0xc4,0xfa},{0xb4,0x59}, {0xae,0xd4},{0xae,0xf6},{0xaf,0x54},{0xad,0xa6},{0xa8,0xd3}, {0xa7,0x4e},{0xb3,0xd2},{0xbe,0xdb},{0xc3,0x72},{0xc4,0x6c}, {0xbf,0x63},{0xa6,0xd1},{0xc4,0xaa},{0xb8,0xb8},{0xb8,0xf4}, {0xc5,0x53},{0xbe,0x7c},{0xc6,0x4f},{0xb8,0x4c},{0xb8,0x53}, {0xba,0xf1},{0xdb,0x77},{0xbf,0xfd},{0xb3,0xc0},{0xbd,0xd7}, {0xc3,0x62},{0xa7,0xcb},{0xc5,0xa2},{0xc5,0xa4},{0xa8,0x63}, {0xbd,0x55},{0xb8,0xef},{0xb9,0x70},{0xc2,0x53},{0xb9,0xf0}, {0xbc,0xd3},{0xb2,0x5c},{0xba,0x7c},{0xb2,0xd6},{0xc1,0x5c}, {0xad,0xae},{0xb0,0xc7},{0xa6,0xd8},{0xbb,0xfe},{0xad,0xe2}, {0xb8,0x57},{0xba,0xf0},{0xb5,0xd9},{0xb3,0xae},{0xc5,0xaa}, {0xce,0xd4},{0xbc,0xd6},{0xbf,0xd5},{0xa4,0xa6},{0xb9,0xe7}, {0xab,0xe3},{0xb2,0x76},{0xb2,0xa7},{0xa5,0x5f},{0xed,0xa8}, {0xab,0x4b},{0xb4,0x5f},{0xa4,0xa3},{0xaa,0x63},{0xbc,0xc6}, {0xaf,0xc1},{0xb0,0xd1},{0xb6,0xeb},{0xac,0xd9},{0xb8,0xad}, {0xbb,0xa1},{0xb1,0xfe},{0xa8,0xb0},{0xa8,0x48},{0xac,0x42}, {0xad,0x59},{0xb1,0xb0},{0xb2,0xa4},{0xab,0x47},{0xa8,0xe2}, {0x84,0x5b},{0xb1,0xe7},{0xc2,0xb3},{0xa8,0x7d},{0xbd,0xcc}, {0xb6,0x71},{0xc0,0x79},{0xa7,0x66},{0xa4,0x6b},{0xc3,0x66}, {0xae,0xc8},{0xc2,0x6f},{0xc4,0x72},{0xbe,0x5b},{0xc6,0x7a}, {0xc4,0x52},{0xbe,0xa4},{0xa4,0x4f},{0xbe,0xe4},{0xbe,0xfa}, {0xf7,0x65},{0xa6,0x7e},{0xbc,0xa6},{0xc5,0xca},{0xbc,0xbf}, {0xba,0xa7},{0xb7,0xd2},{0xe6,0xa3},{0x9d,0xce},{0xbd,0x6d}, {0xc1,0x70},{0xbd,0xfb},{0xbd,0xac},{0xb3,0x73},{0xc1,0xe5}, {0xa6,0x43},{0xa6,0x48},{0xab,0x7c},{0xaf,0x50},{0xb5,0xf5}, {0xbb,0xa1},{0xb7,0x47},{0xa9,0xc0},{0xb1,0xc9},{0xc0,0xd4}, {0xc3,0xae},{0xc2,0x79},{0xa5,0x4f},{0xcb,0xf1},{0xb9,0xe7}, {0xc0,0xad},{0xcc,0xb0},{0xac,0xc2},{0xbc,0xfc},{0xb2,0xdc}, {0xb2,0xe2},{0xb9,0x61},{0xb9,0x73},{0xc6,0x46},{0xbb,0xe2}, {0xa8,0xd2},{0xc2,0xa7},{0xc4,0xbf},{0xc1,0xf5},{0xb4,0x63}, {0xa4,0x46},{0xb9,0xb1},{0xbc,0x64},{0xa7,0xbf},{0xae,0xc6}, {0xbc,0xd6},{0xbf,0x52},{0xc0,0xf8},{0xe7,0x64},{0xbf,0xf1}, {0xc0,0x73},{0xb7,0x77},{0xa8,0xbf},{0xbc,0x42},{0xcc,0xd8}, {0xac,0x68},{0xac,0x79},{0xb7,0xc8},{0xaf,0x5b},{0xaf,0x64}, {0xb2,0xb8},{0xaf,0xc3},{0xc3,0xfe},{0xa4,0xbb},{0xbc,0xae}, {0xb3,0xb0},{0xad,0xdb},{0xb1,0x5b},{0xb2,0x5f},{0xbd,0xfc}, {0xab,0xdf},{0xb7,0x58},{0xae,0xdf},{0xb2,0x76},{0xb6,0xa9}, {0xa7,0x51},{0xa6,0x4f},{0xbc,0x69},{0xa9,0xf6},{0xa7,0xf5}, {0xb1,0xf9},{0xaa,0x64},{0xb2,0x7a},{0xb5,0x67},{0xbf,0xa9}, {0xf9,0xd8},{0xb8,0xcc},{0xa8,0xbd},{0xc2,0xf7},{0xb0,0xce}, {0xb7,0xc4},{0xa7,0x5b},{0xbf,0x4d},{0xbf,0x5a},{0xc4,0xa9}, {0x95,0xf9},{0xc5,0xec},{0xc5,0xef},{0xaa,0x4c},{0xb2,0x4f}, {0xc1,0x7b},{0xa5,0xdf},{0xb2,0xc1},{0xb2,0xc9},{0xaa,0xac}, {0xaa,0xa5},{0xc3,0xd1},{0xa4,0xb0},{0xaf,0xf9},{0xa8,0xeb}, {0xa4,0xc1},{0xab,0xd7},{0xa9,0xdd},{0xbf,0x7d},{0xa6,0x76}, {0xac,0x7d},{0xbc,0xc9},{0xbf,0xe7},{0xa6,0xe6},{0xad,0xb0}, {0xa8,0xa3},{0xb9,0xf8},{0xc9,0x4a},{0xdd,0xfc},{0x98,0x77}, {0x98,0x78},{0xb6,0xef},{0x98,0x79},{0xb4,0xb8},{0x98,0x7a}, {0x98,0x7b},{0xe8,0xf9},{0x95,0xbd},{0xaf,0x71},{0x98,0x7c}, {0xaf,0xab},{0xb2,0xbb},{0xba,0xd6},{0xb9,0x74},{0xba,0xeb}, {0xa6,0xd0},{0x98,0x7d},{0x98,0x7e},{0x98,0xa1},{0xbd,0xd1}, {0x98,0xa2},{0x98,0xa3},{0xb6,0x68},{0xb3,0xa3},{0x98,0xa4}, {0x98,0xa5},{0x98,0xa6},{0xb6,0xba},{0xb9,0x7d},{0xc0,0x5d}, {0xc5,0x62},{0x00,0x00},{0x00,0x00},{0xab,0x56},{0xb9,0xac}, {0xa7,0x4b},{0xab,0x6a},{0xb6,0xd4},{0xa8,0xf5},{0xb3,0xdc}, {0xb9,0xc4},{0xbe,0xb9},{0x94,0x59},{0xbe,0xa5},{0xbc,0x68}, {0xc9,0x4b},{0xae,0xac},{0xb4,0x6e},{0xbc,0xa8},{0xc3,0x67}, {0xb1,0xd3},{0xac,0x4a},{0xb4,0xbb},{0xb1,0xf6},{0xae,0xfc}, {0xb2,0x5a},{0xba,0x7e},{0xb5,0x4e},{0x9c,0x70},{0xb5,0x5a}, {0xb8,0x4f},{0xaa,0xc0},{0xac,0xe7},{0xac,0xe8},{0xaf,0xa7}, {0xaf,0xaa},{0xaf,0xac},{0xba,0xd7},{0xba,0xd5},{0xbd,0x5c}, {0xac,0xf0},{0xb8,0x60},{0xbd,0x6d},{0xbf,0xa7},{0xc1,0x63}, {0xb8,0x70},{0xaa,0xcc},{0xaf,0xe4},{0x9c,0xd2},{0x9c,0xd2}, {0xb5,0xdb},{0xbd,0xc5},{0xb5,0xf8},{0xbf,0xd6},{0xc2,0xd4}, {0xbb,0xab},{0xc3,0xd8},{0x9c,0xe0},{0xb6,0x68},{0xc3,0xf8}, {0xc5,0x54},{0xc0,0x57},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0x4a},{0xa1,0x57},{0x00,0x00}, {0xa1,0x59},{0xa1,0x5b},{0xa1,0x5f},{0xa1,0x60},{0xa1,0x63}, {0xa1,0x64},{0xa1,0x67},{0xa1,0x68},{0xa1,0x6b},{0xa1,0x6c}, {0xa1,0x6f},{0xa1,0x70},{0xa1,0x73},{0xa1,0x74},{0xa1,0x77}, {0xa1,0x78},{0xa1,0x7b},{0xa1,0x7c},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0xa1,0xc6},{0xa1,0xc7},{0xa1,0xca}, {0xa1,0xcb},{0xa1,0xc8},{0xa1,0xc9},{0xa1,0x5c},{0xa1,0x4d}, {0xa1,0x4e},{0xa1,0x4f},{0x00,0x00},{0xa1,0x51},{0xa1,0x52}, {0xa1,0x53},{0xa1,0x54},{0x00,0x00},{0xa1,0x7d},{0xa1,0x7e}, {0xa1,0xa1},{0xa1,0xa2},{0xa1,0xa3},{0xa1,0xa4},{0xa1,0xcc}, {0xa1,0xcd},{0xa1,0xce},{0xa1,0xde},{0xa1,0xdf},{0xa1,0xe0}, {0xa1,0xe1},{0xa1,0xe2},{0x00,0x00},{0xa2,0x42},{0xa2,0x4c}, {0xa2,0x4d},{0xa2,0x4e},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0xa1,0x49},{0xc8,0xd0},{0xa1,0xad},{0xa2,0x43}, {0xa2,0x48},{0xa1,0xae},{0x91,0xc2},{0xa1,0x5d},{0xa1,0x5e}, {0xa1,0xaf},{0xa1,0xcf},{0xa1,0x41},{0xa1,0xd0},{0xa1,0x44}, {0xa1,0xfe},{0xa2,0xaf},{0xa2,0xb0},{0xa2,0xb1},{0xa2,0xb2}, {0xa2,0xb3},{0xa2,0xb4},{0xa2,0xb5},{0xa2,0xb6},{0xa2,0xb7}, {0xa2,0xb8},{0xa1,0x47},{0xa1,0x46},{0xa1,0xd5},{0xa1,0xd7}, {0xa1,0xd6},{0xa1,0x48},{0xa2,0x49},{0xa2,0xcf},{0xa2,0xd0}, {0xa2,0xd1},{0xa2,0xd2},{0xa2,0xd3},{0xa2,0xd4},{0xa2,0xd5}, {0xa2,0xd6},{0xa2,0xd7},{0xa2,0xd8},{0xa2,0xd9},{0xa2,0xda}, {0xa2,0xdb},{0xa2,0xdc},{0xa2,0xdd},{0xa2,0xde},{0xa2,0xdf}, {0xa2,0xe0},{0xa2,0xe1},{0xa2,0xe2},{0xa2,0xe3},{0xa2,0xe4}, {0xa2,0xe5},{0xa2,0xe6},{0xa2,0xe7},{0xa2,0xe8},{0xc6,0xe4}, {0xa2,0x40},{0xc6,0xe5},{0x5e,0x20},{0xa1,0xc4},{0xa1,0xab}, {0xa2,0xe9},{0xa2,0xea},{0xa2,0xeb},{0xa2,0xec},{0xa2,0xed}, {0xa2,0xee},{0xa2,0xef},{0xa2,0xf0},{0xa2,0xf1},{0xa2,0xf2}, {0xa2,0xf3},{0xa2,0xf4},{0xa2,0xf5},{0xa2,0xf6},{0xa2,0xf7}, {0xa2,0xf8},{0xa2,0xf9},{0xa2,0xfa},{0xa2,0xfb},{0xa2,0xfc}, {0xa2,0xfd},{0xa2,0xfe},{0xa3,0x40},{0xa3,0x41},{0xa3,0x42}, {0xa3,0x43},{0xa1,0x61},{0xa1,0x55},{0xa1,0x62},{0xa1,0xe3}, {0x00,0x00},{0x00,0x00},{0xc8,0xb9},{0xc8,0xba},{0xc8,0xbb}, {0xc8,0xbc},{0xc8,0xbd},{0xc8,0xbe},{0xc8,0xbf},{0xc8,0xc0}, {0xc8,0xc1},{0xc8,0xc2},{0xc8,0xc3},{0xc8,0xc4},{0xc8,0xc5}, {0xc8,0xc6},{0xc8,0xc7},{0xc8,0xc8},{0xc8,0xc9},{0xc8,0xca}, {0xc8,0xcb},{0xc8,0xcc},{0xc8,0xd4},{0xc8,0xd5},{0xc8,0xd6}, {0xc8,0xd7},{0xc8,0xd8},{0xc8,0xd9},{0xc8,0xda},{0xc8,0xdb}, {0xc8,0xdc},{0xc8,0xdd},{0xc8,0xde},{0xc8,0xdf},{0xc8,0xe0}, {0xc8,0xe1},{0xc8,0xe2},{0xc8,0xe3},{0xc8,0xe4},{0xc8,0xe5}, {0xc8,0xe6},{0xc8,0xe7},{0xc8,0xe8},{0xc8,0xe9},{0xc8,0xea}, {0xc8,0xeb},{0xc8,0xec},{0xc8,0xed},{0xc8,0xee},{0xc8,0xef}, {0xc8,0xf0},{0xc8,0xf1},{0xc8,0xf2},{0xc8,0xf3},{0xc8,0xf4}, {0xc8,0xf5},{0xc8,0xf6},{0xc8,0xf7},{0xc8,0xf8},{0xc8,0xf9}, {0xc8,0xfa},{0xc8,0xfb},{0xc8,0xfc},{0xc8,0xfd},{0xc8,0xfe}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0xa2,0x46}, {0xa2,0x47},{0xc8,0xcd},{0xa1,0xc3},{0xc8,0xce},{0xa2,0x44}, {0x00,0x00},{0x00,0x00},{0xa2,0x78},{0xa1,0xf6},{0xa1,0xf4}, {0xa1,0xf7},{0xa1,0xf5},{0xa1,0xbd},{0xa1,0xb3},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00},{0x00,0x00}, {0x00,0x00} }; static int qt_Big5ToUnicode(const uchar *s, uint *pwc) { uchar c1 = s[0]; int idx; ushort wc = 0xfffd; if ((c1 >= 0x81 && c1 <= 0xfe)) { uchar c2 = s[1]; if (c2 < 0x40 || c2 > 0xfe || (idx = ((c1 - 0x81) * 191) + (c2 - 0x40), (wc = big5_to_ucs[idx]) == 0)) return 0; else { *pwc = (uint) wc; return 2; } } else if (c1 < 0x80) { *pwc = (uint) c1; return 1; } return 0; } static int qt_UnicodeToBig5(uint wc, uchar *r) { const Summary16 *summary = NULL; const uchar * c; if (wc < 0x80) { r[0] = (uchar) wc; return 1; } else { if (wc >= 0 && wc <= 65535){ c = ucs_to_big5[wc]; if (c [0] == '\0') return 0; if (c [1] != 0) { r[0] = c[0]; r[1] = c[1]; return 2; } else { // (c [1] == 0) r[0] = c[0]; return 1; } } } return 0; } QString UAOCodec::convertToUnicode(const char* chars, int len, ConverterState *state) const { QChar replacement = QChar::ReplacementCharacter; uchar buf[2] = {0}; int nbuf = 0; if (state) { if (state->flags & ConvertInvalidToNull) replacement = QChar::Null; nbuf = state->remainingChars; buf[0] = state->state_data[0]; buf[1] = state->state_data[1]; } int invalid = 0; //qDebug("UAOCodec::toUnicode(const char* chars = \"%s\", int len = %d)", chars, len); QString result; for (int i=0; iremainingChars = nbuf; state->state_data[0] = buf[0]; state->state_data[1] = buf[1]; state->invalidChars += invalid; } return result; } QByteArray UAOCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const { char replacement = '?'; if (state) { if (state->flags & ConvertInvalidToNull) replacement = 0; } int invalid = 0; int rlen = 2*len + 1; QByteArray rstr; rstr.resize(rlen); uchar* cursor = (uchar*)rstr.data(); for (int i=0; i= 0x81 && c[0] <= 0xfe) { *cursor++ = c[0]; *cursor++ = c[1]; } else { *cursor++ = replacement; ++invalid; } } rstr.resize(cursor - (uchar*)rstr.constData()); if (state) { state->invalidChars += invalid; } return rstr; } QList UAOCodec::_aliases() { QList aliases; aliases += "Unicode-at-on"; return aliases; } /* ====================================================================== */ #endif // QT_NO_TEXTCODEC QT_END_NAMESPACE qterm-0.7.3/src/uaocodec.h000066400000000000000000000043321332762052600154030ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ // Most of the code here was originally written by UAO project (http://uao.cpatch.org/) // Ported to Qt by hooey (from uao-051123-src.tar.gz) #ifndef UAOCODEC_H #define UAOCODEC_H #include #include QT_BEGIN_NAMESPACE class UAOCodec : public QTextCodec { public: static QByteArray _name(); static QList _aliases(); static int _mibEnum(); QByteArray name() const { return _name(); } QList aliases() const { return _aliases(); } int mibEnum() const { return _mibEnum(); } QString convertToUnicode(const char *, int, ConverterState *) const; QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const; }; QT_END_NAMESPACE #endif // UAOCODEC_H qterm-0.7.3/src/ui/000077500000000000000000000000001332762052600140635ustar00rootroot00000000000000qterm-0.7.3/src/ui/aboutdialog.ui000066400000000000000000000140121332762052600167120ustar00rootroot00000000000000 aboutDialog 0 0 606 433 0 0 0 0 About QTerm false :/pic/qterm_32x32.png true 50 false QFrame::NoFrame QFrame::Plain <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:12pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:600;">QTerm 0.5.12 (QT 4.8 based)</span></p></body></html> Qt::Horizontal 40 20 0 About Qt::Horizontal :/pic/qterm.png QTerm --- BBS Client based on Qt (C) 2001-2016, The QTerm Developers http://www.qterm.org Authors :/pic/qterm.png kingson xiaokiangwang@yahoo.com fiasco yinshouyi@peoplemail.com.cn hooey hephooey@fastmail.fm Credits Qt::Horizontal 40 20 Close closeButton mainTabWidget closeButton clicked() aboutDialog accept() 339 261 211 249 qterm-0.7.3/src/ui/addrdialog.ui000066400000000000000000001625661332762052600165340ustar00rootroot00000000000000 addrDialog 0 0 500 500 0 0 500 500 16777215 16777215 AddressBook false Qt::Horizontal Qt::CustomContextMenu true QAbstractItemView::DragDrop QAbstractItemView::ExtendedSelection false Qt::Vertical 0 0 1 General 75 true General: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter nameLineEdit Address: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter addrLineEdit Port: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter portSpinBox 65535 Protocol: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter protocolComboBox 75 true Advanced Settings: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter hostTypeComboBox BBS Encoding: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter bbscodeComboBox Text Conversion: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter displaycodeComboBox Load Control Script: System Script: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter scriptLineEdit Browse... Qt::Vertical 20 229 Display Blink cursor ASCII Font: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter asciiFontComboBox QFontComboBox::AllFonts Menu Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter menuTypeComboBox ANSI Color 100 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter schemeComboBox 100 100 Qt::Horizontal Qt::LeftToRight Adjust Font Size Automatically QFontComboBox::AllFonts Font Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter fontSizeSpinBox Opacity: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter schemeComboBox 75 true Menu and Cursor: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 378 32 General Font: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter generalFontComboBox Color... Cursor Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter cursorTypeComboBox Always Highlight 75 true Text and Color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 398 32 Configure... Color Scheme: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter schemeComboBox Qt::Vertical 20 169 Terminal 75 true Terminal Settings: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Term Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter termtypeLineEdit Key Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter keytypeComboBox Escape string (i.e. *[ ): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter escapeLineEdit Columns: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter columnSpinBox 5 500 Rows: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter rowSpinBox 5 500 Scroll Lines: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter scrollSpinBox 10000 Qt::Vertical 20 407 BBS 75 true Internal Settings: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Auto Login User: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter userLineEdit Password: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter passwdLineEdit QLineEdit::Password Pre-login: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter preloginLineEdit Post-login: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter postloginLineEdit Auto Reply Key to reply message: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter replykeyLineEdit Auto Reply Message: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter replyLineEdit Anti-idle String: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter antiLineEdit Max Idle Time (sec): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter idletimeLineEdit Qt::Vertical 20 236 Misc 75 true Proxy: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxytypeComboBox Address: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxyaddrLineEdit Port: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxyportSpinBox 65535 Authentication User: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxyuserLineEdit Password: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit 75 true Connection: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Auto Reconnect Reconnect Delay (s): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter reconnectLineEdit Qt::Vertical 20 288 SSH 75 true General: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 718 20 Username: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit 75 true Password Authentication: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 20 Password: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit QLineEdit::Password 75 true Public Key Authentication (RSA or DSA): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 408 20 Private Key File: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit Browse... Passphrase: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit QLineEdit::Password 75 true Host Verification: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 568 20 Server Host Key: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter proxypasswdLineEdit Qt::Vertical 20 277 Reset Qt::Horizontal 40 20 Apply Connect true true Close true qPixmapFromMimeSource nameTreeView tabWidget nameLineEdit addrLineEdit portSpinBox protocolComboBox hostTypeComboBox bbscodeComboBox displaycodeComboBox scriptCheckBox scriptLineEdit scriptPushButton asciiFontComboBox generalFontComboBox fontSizeSpinBox schemeComboBox schemePushButton ansicolorCheckBox cursorTypeComboBox menuTypeComboBox menuColorButton termtypeLineEdit keytypeComboBox escapeLineEdit columnSpinBox rowSpinBox scrollSpinBox autoLoginCheckBox userLineEdit passwdLineEdit preloginLineEdit postloginLineEdit replyCheckBox replykeyLineEdit replyLineEdit antiLineEdit idletimeLineEdit proxytypeComboBox proxyaddrLineEdit proxyportSpinBox authCheckBox proxyuserLineEdit proxypasswdLineEdit reconnectCheckBox reconnectLineEdit connectPushButton applyPushButton closePushButton resetPushButton scriptCheckBox toggled(bool) scriptLineEdit setEnabled(bool) 190 82 190 82 scriptCheckBox toggled(bool) scriptPushButton setEnabled(bool) 190 82 190 82 autoLoginCheckBox toggled(bool) userLineEdit setEnabled(bool) 190 82 190 82 autoLoginCheckBox toggled(bool) passwdLineEdit setEnabled(bool) 190 82 190 82 autoLoginCheckBox toggled(bool) preloginLineEdit setEnabled(bool) 190 82 190 82 autoLoginCheckBox toggled(bool) postloginLineEdit setEnabled(bool) 190 82 190 82 replyCheckBox toggled(bool) replykeyLineEdit setEnabled(bool) 190 82 190 82 replyCheckBox toggled(bool) replyLineEdit setEnabled(bool) 190 82 190 82 authCheckBox toggled(bool) proxyuserLineEdit setEnabled(bool) 190 82 190 82 authCheckBox toggled(bool) proxypasswdLineEdit setEnabled(bool) 190 82 190 82 reconnectCheckBox toggled(bool) reconnectLineEdit setEnabled(bool) 190 82 190 82 opacityHorizontalSlider valueChanged(int) TextLabel3_24 setNum(int) 786 312 990 318 qterm-0.7.3/src/ui/articledialog.ui000066400000000000000000000050671332762052600172350ustar00rootroot00000000000000 articleDialog 0 0 543 484 Article Viewer Qt::Horizontal 40 31 120 31 Save... Qt::Horizontal QSizePolicy::Fixed 30 31 120 31 Close qPixmapFromMimeSource textBrowser saveButton closeButton closeButton clicked() articleDialog reject() 445 460 211 450 qterm-0.7.3/src/ui/closedialog.ui000066400000000000000000000111261332762052600167100ustar00rootroot00000000000000 closeDialog 0 0 378 350 Dialog Qt::Vertical QSizePolicy::Fixed 20 13 75 true The following sites are connected: siteListWidget Qt::Vertical QSizePolicy::Fixed 20 13 Qt::Vertical QSizePolicy::Fixed 20 13 Qt::Horizontal 40 20 120 31 Quit Qt::Horizontal QSizePolicy::Fixed 20 20 120 31 Cancel quitButton cancelButton siteListWidget quitButton clicked() closeDialog accept() 310 327 200 313 cancelButton clicked() closeDialog reject() 473 321 410 304 qterm-0.7.3/src/ui/imageviewer.ui000066400000000000000000000024541332762052600167330ustar00rootroot00000000000000 QTermImage 0 0 703 473 Image Viewer QFrame::StyledPanel QFrame::Raised 200 16777215 QTerm::Canvas QFrame
qtermcanvas.h
1
QTerm::ImageListViewer QListView
imagelistviewer.h
qterm-0.7.3/src/ui/keydialog.ui000066400000000000000000000361711332762052600164020ustar00rootroot00000000000000 keyDialog 0 0 720 492 Key Setup Add Delete Update Qt::Horizontal 40 20 Close Name Define Key General Keys Up Down Left Right Enter Script Browse... Program Browse... qPixmapFromMimeSource radioButton1 toggled(bool) keyEdit setEnabled(bool) 69 230 109 230 radioButton1 toggled(bool) upButton setEnabled(bool) 66 230 151 266 radioButton1 toggled(bool) downButton setEnabled(bool) 20 237 234 267 radioButton1 toggled(bool) leftButton setEnabled(bool) 69 230 299 263 radioButton1 toggled(bool) rightButton setEnabled(bool) 50 230 359 265 radioButton1 toggled(bool) enterButton setEnabled(bool) 64 230 417 264 radioButton1 toggled(bool) scriptEdit setDisabled(bool) 20 246 124 314 radioButton1 toggled(bool) scriptButton setDisabled(bool) 41 230 362 293 radioButton1 toggled(bool) programEdit setDisabled(bool) 20 245 111 354 radioButton1 toggled(bool) programButton setDisabled(bool) 64 230 409 343 radioButton2 toggled(bool) keyEdit setDisabled(bool) 20 296 101 230 radioButton2 toggled(bool) upButton setDisabled(bool) 85 290 142 284 radioButton2 toggled(bool) downButton setDisabled(bool) 20 307 205 277 radioButton2 toggled(bool) leftButton setDisabled(bool) 21 290 299 277 radioButton2 toggled(bool) rightButton setDisabled(bool) 25 290 359 284 radioButton2 toggled(bool) enterButton setDisabled(bool) 81 290 419 266 radioButton2 toggled(bool) scriptEdit setEnabled(bool) 76 290 119 290 radioButton2 toggled(bool) scriptButton setEnabled(bool) 82 290 341 290 radioButton2 toggled(bool) programEdit setDisabled(bool) 20 294 113 354 radioButton2 toggled(bool) programButton setDisabled(bool) 83 305 346 354 radioButton3 toggled(bool) keyEdit setDisabled(bool) 20 339 116 248 radioButton3 toggled(bool) upButton setDisabled(bool) 20 349 173 271 radioButton3 toggled(bool) downButton setDisabled(bool) 96 349 200 284 radioButton3 toggled(bool) leftButton setDisabled(bool) 20 349 299 270 radioButton3 toggled(bool) rightButton setDisabled(bool) 20 349 359 275 radioButton3 toggled(bool) enterButton setDisabled(bool) 90 349 419 277 radioButton3 toggled(bool) scriptEdit setDisabled(bool) 77 349 269 312 radioButton3 toggled(bool) scriptButton setDisabled(bool) 98 333 346 309 radioButton3 toggled(bool) programEdit setEnabled(bool) 72 349 128 349 radioButton3 toggled(bool) programButton setEnabled(bool) 73 335 342 335 qterm-0.7.3/src/ui/mainframe.ui000066400000000000000000000543321332762052600163700ustar00rootroot00000000000000 Frame 0 0 674 393 QTerm QMdiArea::TabbedView true 0 0 674 25 &File &View Language Theme Toolbar Scrollbar &Edit Paste w Color Clipboard Conversion &Favorites &BBS &Options &Script &Help &Window Terminal Qt::Horizontal TopToolBarArea false Main TopToolBarArea false Key Setup TopToolBarArea false ANSI Edit TopToolBarArea false ANSI Edit 1 true 0 0 60 270 :/pic/quick.png:/pic/quick.png Quick Login This provides an express way to connect. :/pic/addr.png:/pic/addr.png &AddressBook New ANSI Open ANSI &Quit Quit Quit This will close all windows. You will be prompted to confirm disconnent active sessions or save modified files. Save Save As... New &Console :/pic/copy.png:/pic/copy.png &Copy :/pic/paste.png:/pic/paste.png &Paste true :/pic/color-copy.png:/pic/color-copy.png Copy w Color true Paste w Wordwrap :/pic/rect.png:/pic/rect.png Rectangle Selection true &Auto Copy Symbols Symbols true &Fullscreen Default Session Setting :/pic/pref.png:/pic/pref.png &Preference Add To Favorites Manage Favorites ... :/pic/article.png:/pic/article.png &Copy Article true :/pic/auto-reply.png:/pic/auto-reply.png &Auto Reply true :/pic/mouse.png:/pic/mouse.png Support &Mouse true :/pic/sound.png:/pic/sound.png &Beep on message Configure Shortcuts :/pic/message.png:/pic/message.png &View Message Run... Stop Contents... About QTerm About Qt Print Print Preview Close true :/pic/anti-idle.png:/pic/anti-idle.png Anti-&Idle Debug Console What's this? QTerm Online Configure Toolbars Cu&t :/pic/fonts.png:/pic/fonts.png UI Font true Statusbar Show/Hide Statusbar Show/Hide Statusbar Article Manager :/pic/refresh.png:/pic/refresh.png Refresh Reload Script Image Viewer true None true CHS -> CHT true CHT -> CHS true English true None true ESC ESC [ true Ctrl+U [ true Custom ... true Simplified Chinese true Traditional Chinese :/pic/keys.png:/pic/keys.png Key Setup Key Setup :/pic/disconnect.png:/pic/disconnect.png Disconnect Disconnect :/pic/connect.png:/pic/connect.png Connect Connect true Hide Hide Scrollbar true Left true Right :/pic/appearance.png:/pic/appearance.png Current Session Setting true MenuBar true Boss Color true Underline Underline true Blink Blink QTerm::CharTable QWidget
chartable.h
1
qterm-0.7.3/src/ui/msgdialog.ui000066400000000000000000000040441332762052600163720ustar00rootroot00000000000000 msgDialog 0 0 600 428 Messages Viewer 9 6 Qt::Horizontal QSizePolicy::Expanding 40 20 Qt::Horizontal QSizePolicy::Expanding 40 20 OK qPixmapFromMimeSource okButton clicked() msgDialog accept() 311 403 396 403 qterm-0.7.3/src/ui/pallete.ui000066400000000000000000000155751332762052600160650ustar00rootroot00000000000000 Pallete 0 0 220 40 220 40 60 0 20 20 background-color: rgb(0, 0, 0); 80 0 20 20 background-color: rgb(205, 0, 0); 100 0 20 20 background-color: rgb(0, 205, 0); 120 0 20 20 background-color: rgb(205, 205, 0); 180 0 20 20 background-color: rgb(0, 205, 205); 140 0 20 20 background-color: rgb(0, 0, 238); 160 0 20 20 background-color: rgb(205, 0, 205); 200 0 20 20 background-color: rgb(229, 229, 229); 160 20 20 20 background-color: rgb(255, 0, 255); 200 20 20 20 background-color: rgb(255, 255, 255); 180 20 20 20 background-color: rgb(55, 255, 255); 100 20 20 20 background-color: rgb(0, 255, 0); 60 20 20 20 background-color: rgb(127, 127, 127); 140 20 20 20 background-color: rgb(92, 92, 255); 80 20 20 20 background-color: rgb(255, 0, 0); 120 20 20 20 background-color: rgb(255, 255, 0); 0 10 31 21 background-color: rgb(0, 0, 0); 20 20 31 21 background-color: rgb(255, 255, 255); bgLabel fgLabel clr0Frame clr1Frame clr2Frame clr3Frame clr6Frame clr4Frame clr5Frame clr7Frame clr8Frame clr9Frame clr10Frame clr11Frame clr12Frame clr13Frame clr14Frame clr15Frame qterm-0.7.3/src/ui/prefdialog.ui000066400000000000000000000422151332762052600165420ustar00rootroot00000000000000 prefDialog 0 0 1035 772 0 0 Preference Qt::Vertical 0 0 0 Internal Settings 75 true Miscellaneous Options: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Input Conversion: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter ximComboBox 0 0 No Conversion Simplified to Traditional Traditional to Simplified Paste Word-Wrap at: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 Alternative Mouse Wheel Control Detect URL When Mouse Move Blink Tab When Receive Message Warn When Exit Connected Anti-Aliasing Show System Tray Icon Clear ZModem and HTTP directory When Exit Cursor Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 16 32 48 64 Qt::Vertical 20 195 External Settings 75 true Directories and Files: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 Zmodem Directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter zmodemLineEdit Browse... HTTP Directory: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter poolLineEdit Browse... Sound File: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter wavefileLineEdit Browse... 75 true External Applications: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 368 32 HTTP Browser: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter httpLineEdit Choose... Image Viewer: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter imageLineEdit Choose... Sound Player: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter playerLineEdit Choose... Qt::Vertical 20 234 Reset Qt::Horizontal 40 20 OK Cancel qPixmapFromMimeSource ximComboBox wheelCheckBox urlCheckBox blinkCheckBox warnCheckBox aacheckBox trayCheckBox clearCheckBox httpLineEdit choosehttpPushButton imageLineEdit imagePushButton playerLineEdit selectsoundPushButton okPushButton cancelPushButton tabWidget qterm-0.7.3/src/ui/quickdialog.ui000066400000000000000000000121431332762052600167170ustar00rootroot00000000000000 quickDialog 0 0 599 283 Quick Login QFrame::NoFrame QFrame::Plain History: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter historyComboBox Delete Address: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter addrLineEdit Port: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter portSpinBox 65535 Protocol: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter protocolComboBox Telnet SSH Qt::Vertical 20 30 Add Qt::Horizontal 40 20 Advanced... Connect Close qPixmapFromMimeSource historyComboBox deletePushButton addrLineEdit portSpinBox protocolComboBox connectPushButton closePushButton addPushButton advPushButton qterm-0.7.3/src/ui/schemedialog.ui000066400000000000000000000254711332762052600170570ustar00rootroot00000000000000 schemeDialog 0 0 659 552 Scheme Editor Color 4: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr3Button Color 1: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr0Button Normal Qt::AlignCenter clr0Button Color 3: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr2Button Title: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter titleLineEdit Bright Qt::AlignCenter clr8Button Color 7: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr6Button Color 2: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr1Button Color 8: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr7Button Color 6: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr5Button Color 5: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter clr4Button Qt::Vertical 20 40 Add Qt::Horizontal 40 20 Delete Reset Qt::Horizontal 40 20 OK Cancel nameListWidget qPixmapFromMimeSource nameListWidget titleLineEdit clr0Button clr8Button clr1Button clr9Button clr2Button clr10Button clr3Button clr11Button clr4Button clr12Button clr5Button clr13Button clr6Button clr14Button clr7Button clr15Button saveButton removeButton resetButton okButton cancelButton qterm-0.7.3/src/ui/shortcutsdialog.ui000066400000000000000000000105431332762052600176430ustar00rootroot00000000000000 ShortcutsDialog 0 0 702 486 0 0 Qt::ClickFocus Qt::NoContextMenu Shortcuts Dialog QAbstractItemView::NoEditTriggers QAbstractItemView::SelectRows 2 Actions Shortcuts Press any key here: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter editShortcut Assign Remove Qt::Horizontal Default Qt::Horizontal 40 20 OK true Cancel editShortcut buttonAssign buttonRemove buttonDone buttonCancel buttonDefault tableWidget buttonDone clicked() ShortcutsDialog accept() 520 500 179 282 buttonCancel clicked() ShortcutsDialog reject() 585 473 88 423 qterm-0.7.3/src/ui/soundconf.ui000066400000000000000000000111461332762052600164230ustar00rootroot00000000000000 soundConf 0 0 453 332 453 332 453 332 Configure 10 9 431 71 Sound File: 10 30 290 25 330 30 80 25 Select... 10 190 431 71 External Program: 10 30 290 25 330 30 80 25 Select... 220 280 80 25 OK 340 280 80 25 Cancel 10 89 431 91 Play With: 10 60 97 19 ARTS 330 60 80 25 Test 170 60 97 19 External 170 20 98 19 ESD true 10 20 98 19 Internal qPixmapFromMimeSource qterm-0.7.3/src/ui/sshlogin.ui000066400000000000000000000065121332762052600162540ustar00rootroot00000000000000 SSHLogin 0 0 618 254 Login Bitstream Vera Sans 14 50 false false false false Please enter your username and password UserName: Password: Qt::Vertical 20 40 Qt::Horizontal 40 20 OK Cancel qPixmapFromMimeSource bOK clicked() SSHLogin accept() 80 139 140 117 bCancel clicked() SSHLogin reject() 265 136 338 117 qterm-0.7.3/src/ui/toolbardialog.ui000066400000000000000000000241301332762052600172440ustar00rootroot00000000000000 ToolbarDialog 0 0 796 600 0 0 796 600 796 600 Configure Toolbars Qt::Vertical ToolBar: 0 0 Qt::Horizontal Available Actions: 0 0 30 30 41 27 > Qt::Vertical 20 40 0 0 30 30 77 27 V 0 0 30 30 ^ 0 0 30 30 < Qt::Vertical 20 40 Current Actions: Text Position: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Icon Only Text Only Text beside Icon Text below Icon Icon Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 16x16 22x22 32x32 48x48 Default Qt::Horizontal 40 20 OK comboToolbars listAllActions listUsedActions buttonRemove buttonAdd buttonUp buttonDown comboButtonStyle comboIconSize buttonDone buttonDefault buttonDone clicked() ToolbarDialog accept() 278 253 96 254 qterm-0.7.3/src/ui/zmodemdialog.ui000066400000000000000000000054731332762052600171060ustar00rootroot00000000000000 zmodemDialog 0 0 333 259 Zmodem Status 9 6 7 1 0 0 textLabel1 Qt::Horizontal QSizePolicy::Expanding 121 20 Qt::Horizontal QSizePolicy::Expanding 111 20 Cancel 7 5 0 0 textLabel2 24 Qt::Horizontal qPixmapFromMimeSource qterm-0.7.3/src/wallet.cpp000066400000000000000000000056371332762052600154550ustar00rootroot00000000000000// // C++ Implementation: Wallet // // Description: // // // Author: hooey , (C) 2009 // // Copyright: See COPYING file that comes with this distribution // // #include "wallet.h" #include "qterm.h" #include #include #include namespace QTerm { Wallet::Wallet(QObject * parent) :m_walletName(),m_handle(0) { m_wallet = NULL; } Wallet::~Wallet() { close(); } bool Wallet::isWalletAvailable() { QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); return interface && interface->isServiceRegistered("org.kde.kwalletd"); } void Wallet::open() { if (m_wallet != NULL) { if (m_wallet->isOpen(m_handle)) { return; } else { emit error("Failed to open the wallet"); return; } } m_wallet = new OrgKdeKWalletInterface("org.kde.kwalletd","/modules/kwalletd",QDBusConnection::sessionBus(),this); m_walletName = m_wallet->localWallet(); // FIXME: how to get win id? //WId wid = static_cast (parent())->winId(); m_handle = m_wallet->open(m_walletName, 0, "QTerm"); connect(m_wallet,SIGNAL(walletOpened(const QString &)), this, SLOT(walletOpened(const QString &))); connect(m_wallet,SIGNAL(walletClosed(int)), this, SLOT(walletClosed(int))); } void Wallet::close() { if (m_wallet == NULL) { return; } m_wallet->close(m_handle,false,"QTerm"); delete m_wallet; m_wallet = NULL; m_handle = 0; } void Wallet::walletOpened(const QString & walletName) { if (!m_wallet->isOpen(m_handle)) { qDebug() << "Failed to open the wallet"; emit error("Failed to open the wallet"); return; } if (!m_wallet->hasFolder(m_handle, "QTerm", "QTerm")) { m_wallet->createFolder(m_handle, "QTerm", "QTerm"); } } void Wallet::walletClosed(int handle) { if (handle == m_handle) { delete m_wallet; m_wallet = NULL; m_handle = 0; } } QString Wallet::readPassword(const QString & site, const QString & username) { if (!m_wallet->isOpen(m_handle)) { return QString(); } QString key = site+"_"+username; QString password=m_wallet->readPassword(m_handle, "QTerm", key, "QTerm"); return password; } bool Wallet::writePassword(const QString & site, const QString & username, const QString & password) { if (!m_wallet->isOpen(m_handle)) { return false; } QString key = site+"_"+username; if (m_wallet->writePassword(m_handle, "QTerm", key, password, "QTerm")==0) { return true; } return false; } bool Wallet::removePassword(const QString & site, const QString & username) { if (!m_wallet->isOpen(m_handle)) { return false; } QString key = site+"_"+username; if (m_wallet->removeEntry(m_handle, "QTerm", key, "QTerm")==0) { return true; } return false; } } #include qterm-0.7.3/src/wallet.h000066400000000000000000000030561332762052600151130ustar00rootroot00000000000000// // C++ Interface: Wallet // // Description: // // // Author: hooey , (C) 2009 // /* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef WALLET_H #define WALLET_H #include namespace QTerm{ class Wallet : public QObject { Q_OBJECT public: Wallet(QObject * parent = 0); ~Wallet(); static bool isWalletAvailable(); QString readPassword(const QString & site, const QString & username); bool writePassword(const QString & site, const QString & username, const QString & password); bool removePassword(const QString & site, const QString & username); void open(); void close(); signals: void error(const QString & message); private slots: void walletOpened(const QString & wallet); void walletClosed(int handle); private: OrgKdeKWalletInterface * m_wallet; QString m_walletName; int m_handle; }; } #endif // WALLET_H qterm-0.7.3/src/zmodemdialog.cpp000066400000000000000000000026721332762052600166340ustar00rootroot00000000000000#include "zmodemdialog.h" #include "qtermglobal.h" #include namespace QTerm { zmodemDialog::zmodemDialog(QWidget *parent, Qt::WindowFlags fl) : QDialog(parent, fl) { ui.setupUi(this); connect( ui.buttonCancel, SIGNAL(clicked()), this, SLOT(slotCancel()) ); restoreGeometry(Global::instance()->loadGeometry("ZModem")); } zmodemDialog::~zmodemDialog() { Global::instance()->saveGeometry("ZModem",saveGeometry()); } void zmodemDialog::setProgress(int offset) { ui.pbProgress->setValue(offset); QString strTmp; strTmp = QString("%1 out of %2 bytes").arg(offset).arg(ui.pbProgress->maximum()); ui.labelStatus->setText(strTmp); } void zmodemDialog::setFileInfo(const QString& name, int size) { ui.labelFileName->setText(name); ui.pbProgress->setMaximum(size); } void zmodemDialog::addErrorLog(const QString& err) { // FIXME:display error message; //browserError->append(err); } void zmodemDialog::clearErrorLog() { //browserError->clear(); } void zmodemDialog::slotCancel() { QMessageBox mb( "QTerm", "We dont support cancel operation yet. " "But you can try, it will crash when downloading.\n" "Do you want to continue?", QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No | QMessageBox::Escape | QMessageBox::Default, 0,this); if ( mb.exec() == QMessageBox::Yes ) { emit canceled(); hide(); } } } // namespace QTerm #include qterm-0.7.3/src/zmodemdialog.h000066400000000000000000000007411332762052600162740ustar00rootroot00000000000000#ifndef ZMODEMDIALOG_H #define ZMODEMDIALOG_H #include "ui_zmodemdialog.h" namespace QTerm { class zmodemDialog : public QDialog { Q_OBJECT public: zmodemDialog( QWidget *parent=0, Qt::WindowFlags fl=0 ); ~zmodemDialog(); void setFileInfo(const QString&, int); void addErrorLog(const QString&); void clearErrorLog(); void setProgress(int); public slots: void slotCancel(); signals: void canceled(); private: Ui::zmodemDialog ui; }; } // namespace QTerm #endif