From e8ae40fe32e2c7791119d8fe72a1ac4d52461630 Mon Sep 17 00:00:00 2001 From: Igor Cananea Date: Tue, 25 Apr 2023 10:27:30 -0400 Subject: [PATCH] Updated arduino library manager related files and deleted more code. (#3) --- CMakeLists.txt | 4 +- LICENSE | 681 +++++++++++++++++- component.mk | 4 +- .../Composite/BaseExample/BaseExample.ino | 278 ------- .../240x320/DoubleBuffer/DoubleBuffer.ino | 129 ---- .../240x320/DoubleBuffer/ballstest.h | 100 --- .../240x320/DoubleBuffer/polygonstest.h | 127 ---- .../240x320/DoubleBuffer/spritestest.h | 127 ---- .../ILI9341_TFT/240x320/Rotate/Rotate.ino | 93 --- .../SimpleTerminalOut/SimpleTerminalOut.ino | 235 ------ .../240x320/SimpleTerminalOut/vtanimations.h | 34 - .../CollisionDetection/CollisionDetection.ino | 198 ----- .../128x32/CollisionDetection/bitmaps.h | 232 ------ .../SimpleTerminalOut/SimpleTerminalOut.ino | 171 ----- .../CollisionDetection/CollisionDetection.ino | 211 ------ .../128x64/CollisionDetection/bitmaps.h | 283 -------- .../128x64/DoubleBuffer/DoubleBuffer.ino | 90 --- .../NetworkTerminal/NetworkTerminal.ino | 418 ----------- .../SSD1306_OLED/128x64/RTClock/RTClock.ino | 246 ------- .../SimpleTerminalOut/SimpleTerminalOut.ino | 175 ----- examples/SSD1306_OLED/128x64/UI/UI.ino | 112 --- .../240x240/DoubleBuffer/DoubleBuffer.ino | 126 ---- .../240x240/DoubleBuffer/ballstest.h | 100 --- .../240x240/DoubleBuffer/polygonstest.h | 127 ---- .../240x240/DoubleBuffer/spritestest.h | 127 ---- .../240x240/FileBrowser/FileBrowser.ino | 289 -------- examples/ST7789_TFT/240x240/Rotate/Rotate.ino | 91 --- .../SimpleTerminalOut/SimpleTerminalOut.ino | 211 ------ .../ST7789_TFT/240x240/Sprites/Sprites.ino | 276 ------- library.json | 15 +- library.properties | 14 +- 31 files changed, 687 insertions(+), 4637 deletions(-) delete mode 100644 examples/Composite/BaseExample/BaseExample.ino delete mode 100644 examples/ILI9341_TFT/240x320/DoubleBuffer/DoubleBuffer.ino delete mode 100644 examples/ILI9341_TFT/240x320/DoubleBuffer/ballstest.h delete mode 100644 examples/ILI9341_TFT/240x320/DoubleBuffer/polygonstest.h delete mode 100644 examples/ILI9341_TFT/240x320/DoubleBuffer/spritestest.h delete mode 100644 examples/ILI9341_TFT/240x320/Rotate/Rotate.ino delete mode 100644 examples/ILI9341_TFT/240x320/SimpleTerminalOut/SimpleTerminalOut.ino delete mode 100644 examples/ILI9341_TFT/240x320/SimpleTerminalOut/vtanimations.h delete mode 100644 examples/SSD1306_OLED/128x32/CollisionDetection/CollisionDetection.ino delete mode 100644 examples/SSD1306_OLED/128x32/CollisionDetection/bitmaps.h delete mode 100644 examples/SSD1306_OLED/128x32/SimpleTerminalOut/SimpleTerminalOut.ino delete mode 100644 examples/SSD1306_OLED/128x64/CollisionDetection/CollisionDetection.ino delete mode 100644 examples/SSD1306_OLED/128x64/CollisionDetection/bitmaps.h delete mode 100644 examples/SSD1306_OLED/128x64/DoubleBuffer/DoubleBuffer.ino delete mode 100644 examples/SSD1306_OLED/128x64/NetworkTerminal/NetworkTerminal.ino delete mode 100644 examples/SSD1306_OLED/128x64/RTClock/RTClock.ino delete mode 100644 examples/SSD1306_OLED/128x64/SimpleTerminalOut/SimpleTerminalOut.ino delete mode 100644 examples/SSD1306_OLED/128x64/UI/UI.ino delete mode 100644 examples/ST7789_TFT/240x240/DoubleBuffer/DoubleBuffer.ino delete mode 100644 examples/ST7789_TFT/240x240/DoubleBuffer/ballstest.h delete mode 100644 examples/ST7789_TFT/240x240/DoubleBuffer/polygonstest.h delete mode 100644 examples/ST7789_TFT/240x240/DoubleBuffer/spritestest.h delete mode 100644 examples/ST7789_TFT/240x240/FileBrowser/FileBrowser.ino delete mode 100644 examples/ST7789_TFT/240x240/Rotate/Rotate.ino delete mode 100644 examples/ST7789_TFT/240x240/SimpleTerminalOut/SimpleTerminalOut.ino delete mode 100644 examples/ST7789_TFT/240x240/Sprites/Sprites.ino diff --git a/CMakeLists.txt b/CMakeLists.txt index 47381331a..d48c3e8fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,6 @@ idf_component_register(SRC_DIRS src src/comdrivers src/devdrivers src/dispdrivers - src/emudevs src/network INCLUDE_DIRS src src/fonts @@ -10,11 +9,10 @@ idf_component_register(SRC_DIRS src src/comdrivers src/devdrivers src/dispdrivers - src/emudevs src/network REQUIRES fatfs spiffs esp_adc_cal ulp nvs_flash - soc) \ No newline at end of file + soc) diff --git a/LICENSE b/LICENSE index 88c4a195b..f288702d2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,674 @@ - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. + 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. -* Please contact fdivitto2013@gmail.com if you need a commercial license. + Preamble + The GNU General Public License is a free, copyleft license for +software and other kinds of works. -* This library and related software is available under GPL v3. + 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. - FabGL 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. + 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. - FabGL 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. + 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. - You should have received a copy of the GNU General Public License + 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 +. diff --git a/component.mk b/component.mk index ee0b033e0..1900250a4 100644 --- a/component.mk +++ b/component.mk @@ -1,5 +1,5 @@ -COMPONENT_ADD_INCLUDEDIRS := src src/comdrivers src/devdrivers src/dispdrivers src/emudevs src/network src/fonts src/images -COMPONENT_SRCDIRS := src src/comdrivers src/devdrivers src/dispdrivers src/emudevs src/network src/fonts src/images +COMPONENT_ADD_INCLUDEDIRS := src src/comdrivers src/devdrivers src/dispdrivers src/network src/fonts src/images +COMPONENT_SRCDIRS := src src/comdrivers src/devdrivers src/dispdrivers src/network src/fonts src/images CXXFLAGS += -O2 diff --git a/examples/Composite/BaseExample/BaseExample.ino b/examples/Composite/BaseExample/BaseExample.ino deleted file mode 100644 index d09e57260..000000000 --- a/examples/Composite/BaseExample/BaseExample.ino +++ /dev/null @@ -1,278 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -#include - - -#include "fabgl.h" -#include "devdrivers/cvbsgenerator.h" - - -#define VIDEOOUT_GPIO GPIO_NUM_25 - - -Preferences preferences; - - -fabgl::CVBS16Controller DisplayController; -fabgl::PS2Controller PS2Controller; - - - -// preferences keys -static const char * PREF_MODE = "Mode"; -static const char * PREF_MONO = "Mono"; -static const char * PREF_HRATE = "HRate"; - - - -// defaults -#define MODES_DEFAULT 1 // P-PAL-B -#define MONO_DEFAULT 0 // color -#define HRATE_DEFAULT 2 // horizontal rate (1 = x1, 2 = x2, 3 = x3) - - - -// modes - -static const char * MODES_DESC[] = { "Interlaced PAL-B", - "Progressive PAL-B", - "Interlaced NTSC-M", - "Progressive NTSC-M", - "Interlaced PAL-B Wide", - "Progressive PAL-B Wide", - "Interlaced NTSC-M Wide", - "Progressive NTSC-M Wide", - "Progressive NTSC-M Ext", - }; - -static const char * MODES_STD[] = { "I-PAL-B", - "P-PAL-B", - "I-NTSC-M", - "P-NTSC-M", - "I-PAL-B-WIDE", - "P-PAL-B-WIDE", - "I-NTSC-M-WIDE", - "P-NTSC-M-WIDE", - "P-NTSC-M-EXT", - }; - - - -// UI Style - -enum { STYLE_NONE, STYLE_LABEL, STYLE_STATICLABEL, STYLE_BUTTON, STYLE_COMBOBOX, STYLE_CHECKBOX }; - -#define BACKGROUND_COLOR RGB888(0, 0, 0) - -#define COLORBARS_HEIGHT 30 -#define CIRCLE_SIZE 80 - -struct DialogStyle : uiStyle { - void setStyle(uiObject * object, uint32_t styleClassID) { - switch (styleClassID) { - case STYLE_LABEL: - ((uiLabel*)object)->labelStyle().backgroundColor = BACKGROUND_COLOR; - ((uiLabel*)object)->labelStyle().textColor = RGB888(255, 255, 255); - break; - case STYLE_STATICLABEL: - ((uiStaticLabel*)object)->labelStyle().backgroundColor = BACKGROUND_COLOR; - ((uiStaticLabel*)object)->labelStyle().textColor = RGB888(255, 255, 255); - break; - case STYLE_BUTTON: - ((uiButton*)object)->windowStyle().borderColor = RGB888(128, 128, 128); - ((uiButton*)object)->buttonStyle().backgroundColor = RGB888(0, 255, 0); - break; - case STYLE_COMBOBOX: - ((uiComboBox*)object)->windowStyle().borderColor = RGB888(255, 255, 255); - ((uiComboBox*)object)->windowStyle().borderSize = 1; - break; - case STYLE_CHECKBOX: - ((uiCheckBox*)object)->windowStyle().borderColor = RGB888(255, 255, 255); - ((uiCheckBox*)object)->checkBoxStyle().mouseOverForegroundColor = RGB888(0, 0, 0); - ((uiCheckBox*)object)->checkBoxStyle().mouseOverBackgroundColor = RGB888(0, 255, 0); - break; - } - } -} dialogStyle; - - - -// main app - -struct MyApp : public uiApp { - - uiComboBox * modeComboBox; - uiCheckBox * monoCheckbox; - uiComboBox * hrateComboBox; - - void init() { - - setStyle(&dialogStyle); - - // set root window background color to dark green - rootWindow()->frameStyle().backgroundColor = BACKGROUND_COLOR; - //rootWindow()->windowStyle().borderColor = RGB888(255, 255, 0); - //rootWindow()->windowStyle().borderSize = 1; - - // some static text - rootWindow()->onPaint = [&]() { - auto cv = canvas(); - cv->selectFont(&fabgl::FONT_SLANT_8x14); - cv->setPenColor(RGB888(0, 128, 255)); - cv->drawText(2, 5, "Composite Video Test - fabgl.com"); - - cv->selectFont(&fabgl::FONT_std_12); - cv->setPenColor(RGB888(255, 128, 0)); - cv->drawText(2, 19, "2019/22 by Fabrizio Di Vittorio"); - - // color test - auto w = cv->getWidth(); - auto h = cv->getHeight(); - cv->drawText(2, h - COLORBARS_HEIGHT - 15, "RGB Colors Test"); - cv->setBrushColor(Color::BrightRed); - cv->fillRectangle(0, h - COLORBARS_HEIGHT, w / 3, h - 1); - cv->setBrushColor(Color::BrightGreen); - cv->fillRectangle(w / 3, h - COLORBARS_HEIGHT, w * 2 / 3, h - 1); - cv->setBrushColor(Color::BrightBlue); - cv->fillRectangle(w * 2 / 3, h - COLORBARS_HEIGHT, w - 1, h - 1); - - // aspect ratio test - int cx = w - CIRCLE_SIZE / 2 - 1; - int cy = h - COLORBARS_HEIGHT - CIRCLE_SIZE / 2 - 1; - cv->setPenColor(Color::BrightYellow); - cv->drawText(cx - CIRCLE_SIZE / 2 + 2, cy - 3, "Aspect Ratio Test"); - cv->setBrushColor(Color::BrightWhite); - cv->drawEllipse(cx, cy, CIRCLE_SIZE, CIRCLE_SIZE); - }; - - // mode selection - new uiStaticLabel(rootWindow(), "Mode", Point(2, 60), true, STYLE_STATICLABEL); - modeComboBox = new uiComboBox(rootWindow(), Point(40, 58), Size(140, 20), 80, true, STYLE_COMBOBOX); - modeComboBox->items().append(MODES_DESC, sizeof(MODES_DESC) / sizeof(char*)); - modeComboBox->selectItem(getMode()); - - // monochromatic checkbox - new uiStaticLabel(rootWindow(), "B/W", Point(2, 88), true, STYLE_STATICLABEL); - monoCheckbox = new uiCheckBox(rootWindow(), Point(40, 85), Size(16, 20), uiCheckBoxKind::CheckBox, true, STYLE_CHECKBOX); - monoCheckbox->setChecked(getMonochromatic()); - monoCheckbox->onChange = [&]() { - DisplayController.setMonochrome(monoCheckbox->checked()); - }; - - // horizontal rate - new uiStaticLabel(rootWindow(), "H. Rate", Point(103, 88), true, STYLE_STATICLABEL); - hrateComboBox = new uiComboBox(rootWindow(), Point(145, 84), Size(35, 20), 55, true, STYLE_COMBOBOX); - hrateComboBox->items().appendSepList("x1,x2,x3", ','); - hrateComboBox->selectItem(getHRate() - 1); - - // apply button - auto applyButton = new uiButton(rootWindow(), "Apply", Point(40, 117), Size(80, 20), uiButtonKind::Button, true, STYLE_BUTTON); - applyButton->onClick = [&]() { - apply(); - }; - - // info label - auto infoLabel = new uiLabel(rootWindow(), "", Point(2, rootWindow()->clientSize().height - COLORBARS_HEIGHT * 2), Size(0, 0), true, STYLE_LABEL); - infoLabel->setTextFmt("Free Mem: %d KiB Resolution: %d x %d", heap_caps_get_free_size(MALLOC_CAP_32BIT) / 1024, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()); - - } - - static int getMode() { - return preferences.getInt(PREF_MODE, MODES_DEFAULT); - } - - static bool getMonochromatic() { - return preferences.getInt(PREF_MONO, MONO_DEFAULT); - } - - static int getHRate() { - return preferences.getInt(PREF_HRATE, HRATE_DEFAULT); - } - - void apply() { - bool reboot = modeComboBox->selectedItem() != getMode() || - hrateComboBox->selectedItem() != getHRate(); - - preferences.putInt(PREF_MODE, modeComboBox->selectedItem()); - preferences.putInt(PREF_MONO, monoCheckbox->checked()); - preferences.putInt(PREF_HRATE, hrateComboBox->selectedItem() + 1); - - if (reboot) - ESP.restart(); - } - - -} app; - - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - preferences.begin("CVBS", false); - - PS2Controller.begin(PS2Preset::KeyboardPort0_MousePort1, KbdMode::GenerateVirtualKeys); - - DisplayController.begin(VIDEOOUT_GPIO); - - auto mode = MyApp::getMode(); - - DisplayController.setHorizontalRate(MyApp::getHRate()); - DisplayController.setMonochrome(MyApp::getMonochromatic()); - - DisplayController.setResolution(MODES_STD[mode]); - -} - - -#if FABGLIB_CVBSCONTROLLER_PERFORMANCE_CHECK -namespace fabgl { - extern volatile uint64_t s_cvbsctrlcycles; -} -using fabgl::s_cvbsctrlcycles; -#endif - - -void loop() -{ - app.runAsync(&DisplayController, 2000); - - #if FABGLIB_CVBSCONTROLLER_PERFORMANCE_CHECK - uint32_t s1 = 0; - while (true) { - printf("%lld / %d (%d%%)\n", s_cvbsctrlcycles, fabgl::getCycleCount() - s1, (int)((double)s_cvbsctrlcycles/240000000*100)); - s_cvbsctrlcycles = 0; - s1 = fabgl::getCycleCount(); - delay(1000); - } - #else - vTaskDelete(NULL); - #endif - - -} diff --git a/examples/ILI9341_TFT/240x320/DoubleBuffer/DoubleBuffer.ino b/examples/ILI9341_TFT/240x320/DoubleBuffer/DoubleBuffer.ino deleted file mode 100644 index 3b3263253..000000000 --- a/examples/ILI9341_TFT/240x320/DoubleBuffer/DoubleBuffer.ino +++ /dev/null @@ -1,129 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * CS => GPIO 5 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - -#include "fabgl.h" - - - -fabgl::ILI9341Controller DisplayController; -fabgl::Canvas canvas(&DisplayController); - - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_CS 5 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - -#define DOUBLEBUFFERING 1 - - -struct Test { - virtual ~Test() { }; - virtual void update() = 0; - virtual bool nextState() = 0; - virtual int testState() = 0; - virtual char const * name() = 0; -}; - - -#include "ballstest.h" -#include "polygonstest.h" -#include "spritestest.h" - - - -void setup() -{ - Serial.begin(115200); - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, TFT_CS, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x320, -1, -1, DOUBLEBUFFERING); - - // get a font for about 40x14 text screen - canvas.selectFont(&fabgl::FONT_8x8); - - canvas.setGlyphOptions(GlyphOptions().FillBackground(true)); -} - - -void loop() -{ - static int64_t stime = esp_timer_get_time(); - static int FPS = 0; - static int FPSCounter = 0; - static int testIndex = 0; - static Test * test = new BallsTest; - - if (test->nextState() == false) { - delete test; - ++testIndex; - switch (testIndex) { - case 1: - test = new PolygonsTest; - break; - case 2: - test = new SpritesTest; - break; - default: - testIndex = 0; - test = new BallsTest; - break; - } - } - - if (esp_timer_get_time() - stime > 1000000) { - // calculate FPS - FPS = FPSCounter; - stime = esp_timer_get_time(); - FPSCounter = 0; - } - ++FPSCounter; - - test->update(); - - // display test state and FPS - canvas.setPenColor(Color::Blue); - canvas.setBrushColor(Color::Yellow); - canvas.drawTextFmt(50, 5, " %d %s at %d FPS ", test->testState(), test->name(), FPS); - - if (DOUBLEBUFFERING) { - canvas.swapBuffers(); - } -} diff --git a/examples/ILI9341_TFT/240x320/DoubleBuffer/ballstest.h b/examples/ILI9341_TFT/240x320/DoubleBuffer/ballstest.h deleted file mode 100644 index 69ed93903..000000000 --- a/examples/ILI9341_TFT/240x320/DoubleBuffer/ballstest.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -class BallsTest : public Test { -public: - - virtual ~BallsTest() - { - free(balls_); - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < ballsCount_; ++i) { - Ball * ball = &balls_[i]; - - // test collision with borders and bounce - if (ball->x < ball->size / 2 || ball->x > canvas.getWidth() - ball->size / 2) - ball->dir = PI - ball->dir; - else if (ball->y < ball->size / 2 || ball->y > canvas.getHeight() - ball->size / 2) - ball->dir = 2 * PI - ball->dir; - - ball->x += ball->vel * cos(ball->dir); - ball->y += ball->vel * sin(ball->dir); - - canvas.setBrushColor(ball->color); - canvas.fillEllipse(ceil(ball->x), ceil(ball->y), ball->size, ball->size); - } - } - - bool nextState() - { - if (counter_++ % 5) - return true; - if (ballsCount_ == MAXBALLS) - return false; - // create a new ball - ++ballsCount_; - balls_ = (Ball*) realloc(balls_, sizeof(Ball) * ballsCount_); - Ball * newBall = &balls_[ballsCount_ - 1]; - newBall->x = canvas.getWidth() / 2; - newBall->y = canvas.getHeight() / 2; - newBall->size = random(6, canvas.getHeight() / 6); - newBall->dir = random(360) * PI / 180.0; - newBall->vel = 0.1 + random(10) / 2.0; - newBall->color = (Color) random(1, 16); - return true; - } - - int testState() - { - return ballsCount_; - } - - char const * name() { return "Balls"; } - -private: - - static const int MAXBALLS = 100; - - struct Ball { - double x; - double y; - double dir; // radians - double vel; - int size; - Color color; - } * balls_ = nullptr; - - int ballsCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ILI9341_TFT/240x320/DoubleBuffer/polygonstest.h b/examples/ILI9341_TFT/240x320/DoubleBuffer/polygonstest.h deleted file mode 100644 index 1376633ce..000000000 --- a/examples/ILI9341_TFT/240x320/DoubleBuffer/polygonstest.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -class PolygonsTest : public Test { - - static const int MAXPOINTS = 7; - static const int MAXPOLYGONS = 60; - static const int MAXPOLYSIZE = 80; - - struct DPoint { - double X; - double Y; - }; - - struct Polygon { - DPoint dpoints[MAXPOINTS]; - DPoint center; - Point ipoints[MAXPOINTS]; - double avel; - int pointsCount; - Color color; - }; - -public: - - virtual ~PolygonsTest() - { - free(polygons_); - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < polygonsCount_; ++i) { - Polygon * polygon = &polygons_[i]; - - rotate(polygon); - - canvas.setBrushColor(polygon->color); - canvas.fillPath(polygon->ipoints, polygon->pointsCount); - } - } - - bool nextState() - { - if (counter_++ % 5) - return true; - if (polygonsCount_ == MAXPOLYGONS) - return false; - // create a new polygon - ++polygonsCount_; - polygons_ = (Polygon*) realloc(polygons_, sizeof(Polygon) * polygonsCount_); - Polygon * newPolygon = &polygons_[polygonsCount_ - 1]; - newPolygon->pointsCount = random(3, MAXPOINTS); - int translateX = random(-MAXPOLYSIZE / 2, canvas.getWidth() - MAXPOLYSIZE / 2); - int translateY = random(-MAXPOLYSIZE / 2, canvas.getHeight() - MAXPOLYSIZE / 2); - newPolygon->center.X = 0; - newPolygon->center.Y = 0; - for (int i = 0; i < newPolygon->pointsCount; ++i) { - newPolygon->dpoints[i].X = random(0, MAXPOLYSIZE) + translateX; - newPolygon->dpoints[i].Y = random(0, MAXPOLYSIZE) + translateY; - newPolygon->center.X += newPolygon->dpoints[i].X; - newPolygon->center.Y += newPolygon->dpoints[i].Y; - } - newPolygon->center.X /= newPolygon->pointsCount; - newPolygon->center.Y /= newPolygon->pointsCount; - newPolygon->color = (Color) random(1, 16); - newPolygon->avel = PI / random(5, 300) * (random(2) ? 1 : -1); - return true; - } - - int testState() - { - return polygonsCount_; - } - - void rotate(Polygon * polygon) - { - for (int i = 0; i < polygon->pointsCount; ++i) { - polygon->dpoints[i].X -= polygon->center.X; - polygon->dpoints[i].Y -= polygon->center.Y; - double x = polygon->dpoints[i].X * cos(polygon->avel) - polygon->dpoints[i].Y * sin(polygon->avel); - double y = polygon->dpoints[i].X * sin(polygon->avel) + polygon->dpoints[i].Y * cos(polygon->avel); - polygon->dpoints[i].X = x + polygon->center.X; - polygon->dpoints[i].Y = y + polygon->center.Y; - polygon->ipoints[i].X = ceil(polygon->dpoints[i].X); - polygon->ipoints[i].Y = ceil(polygon->dpoints[i].Y); - } - } - - char const * name() { return "Polygons"; } - -private: - - - Polygon * polygons_ = nullptr; - - int polygonsCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ILI9341_TFT/240x320/DoubleBuffer/spritestest.h b/examples/ILI9341_TFT/240x320/DoubleBuffer/spritestest.h deleted file mode 100644 index 06a84852e..000000000 --- a/examples/ILI9341_TFT/240x320/DoubleBuffer/spritestest.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -#include "fabutils.h" - - -using fabgl::twrap; - - -const uint8_t spaceship_data[] = { - 0x00, 0x00, 0xd5, 0xd5, 0xd9, 0xd9, 0xd9, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xea, 0xc0, 0x00, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd9, 0xd5, 0x00, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0x00, 0xd4, 0xe9, 0xe9, 0xea, 0xea, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe9, 0xe9, 0xc0, 0xe9, 0xc0, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0xea, 0xea, 0xc0, 0xea, 0xc0, 0xea, 0xea, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd9, 0xd9, 0xd9, 0xc0, 0xd9, 0xc0, 0xd9, 0xd9, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd5, 0xd5, 0xc0, 0xd5, 0xc0, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd4, 0xd9, 0xd9, 0xe9, 0xe9, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd5, 0xd5, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe9, 0xc0, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap spaceship = Bitmap(16, 16, &spaceship_data[0], PixelFormat::RGBA2222); - - -struct MySprite : Sprite { - double fx; - double fy; - double dir; // radians -}; - - - - - -class SpritesTest : public Test { -public: - - SpritesTest() - { - sprites_ = new MySprite[MAXSPRITES]; - } - - virtual ~SpritesTest() - { - DisplayController.removeSprites(); - delete [] sprites_; - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < spritesCount_; ++i) { - MySprite * sprite = &sprites_[i]; - sprite->fx = twrap(sprite->fx + 3 * cos(sprite->dir), 0, canvas.getWidth()); - sprite->fy = twrap(sprite->fy + 3 * sin(sprite->dir), 0, canvas.getHeight()); - sprite->moveTo(ceil(sprite->fx), ceil(sprite->fy)); - } - DisplayController.refreshSprites(); - } - - bool nextState() - { - if (spritesCount_ == MAXSPRITES) - return false; - if (counter_ % 40 == 0) { - // create a new sprite - MySprite * newSprite = &sprites_[spritesCount_++]; - newSprite->addBitmap(&spaceship); - newSprite->dir = random(0, 360) * PI / 180.0; - newSprite->fx = canvas.getWidth() / 2.0; - newSprite->fy = canvas.getHeight() / 2.0; - newSprite->moveTo(ceil(newSprite->fx), ceil(newSprite->fy)); - DisplayController.setSprites(sprites_, spritesCount_); - } - ++counter_; - return true; - } - - int testState() - { - return spritesCount_; - } - - char const * name() { return "Sprites"; } - -private: - - static const int MAXSPRITES = 20; - - MySprite * sprites_ = nullptr; - - int spritesCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ILI9341_TFT/240x320/Rotate/Rotate.ino b/examples/ILI9341_TFT/240x320/Rotate/Rotate.ino deleted file mode 100644 index 6c510359a..000000000 --- a/examples/ILI9341_TFT/240x320/Rotate/Rotate.ino +++ /dev/null @@ -1,93 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * CS => GPIO 5 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - - -#include "fabgl.h" - - - -fabgl::ILI9341Controller DisplayController; - - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_CS 5 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - - -void test(Color bcolor, char const * msg) -{ - Canvas cv(&DisplayController); - cv.setBrushColor(bcolor); - cv.clear(); - cv.setBrushColor(Color::BrightRed); - int w = cv.getWidth(); - int h = cv.getHeight(); - Serial.printf("%d %d\n", w, h); - Point pts[3] = { {w/2, 0}, {w-1, h-1}, {0, h-1} }; - cv.fillPath(pts, 3); - cv.drawPath(pts, 3); - cv.selectFont(&fabgl::FONT_8x14); - cv.drawTextFmt(w/3, h/2, "%s", msg); - delay(2000); -} - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, TFT_CS, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x320); -} - - -void loop() -{ - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate0); - test(Color::Blue, "Rotate0"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate90); - test(Color::Green, "Rotate90"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate180); - test(Color::Yellow,"Rotate180"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate270); - test(Color::Magenta, "Rotate270"); -} - diff --git a/examples/ILI9341_TFT/240x320/SimpleTerminalOut/SimpleTerminalOut.ino b/examples/ILI9341_TFT/240x320/SimpleTerminalOut/SimpleTerminalOut.ino deleted file mode 100644 index f170a827b..000000000 --- a/examples/ILI9341_TFT/240x320/SimpleTerminalOut/SimpleTerminalOut.ino +++ /dev/null @@ -1,235 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * CS => GPIO 5 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - - -#include "fabgl.h" - -#include "vtanimations.h" - - - -fabgl::ILI9341Controller DisplayController; -fabgl::Terminal Terminal; - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_CS 5 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, TFT_CS, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x320); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate90); - - Terminal.begin(&DisplayController); - //Terminal.setLogStream(Serial); // DEBUG ONLY - - Terminal.loadFont(&fabgl::FONT_6x10); - - Terminal.enableCursor(true); -} - - -void slowPrintf(const char * format, ...) -{ - va_list ap; - va_start(ap, format); - int size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - for (int i = 0; i < size; ++i) { - Terminal.write(buf[i]); - delay(25); - } - } - va_end(ap); -} - - -void demo1() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - Terminal.write("\e[2J"); // clear screen - Terminal.write("\e[1;1H"); // move cursor to 1,1 - slowPrintf("* * * * W E L C O M E T O F a b G L * * * *\r\n"); - slowPrintf("2019-2022 by Fabrizio Di Vittorio - www.fabgl.com\r\n"); - slowPrintf("===============================================\r\n\n"); - slowPrintf("This is a VGA Controller, PS2 Mouse and Keyboard Controller, Graphics Library, Game Engine and ANSI/VT Terminal for the ESP32\r\n\n"); - slowPrintf("Current settings\r\n"); - slowPrintf("Screen Size : %d x %d\r\n", DisplayController.getScreenWidth(), DisplayController.getScreenHeight()); - slowPrintf("Terminal Size : %d x %d\r\n", Terminal.getColumns(), Terminal.getRows()); - slowPrintf("Free Memory : %d bytes\r\n\n", heap_caps_get_free_size(MALLOC_CAP_8BIT)); -} - -void demo2() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("8 or 64 colors supported (depends by GPIOs used)\r\n"); - slowPrintf("ANSI colors:\r\n"); - // foregrounds - Terminal.write("\e[31mRED\t"); delay(500); - Terminal.write("\e[32mGREEN\t"); delay(500); - Terminal.write("\e[33mYELLOW\t"); delay(500); - Terminal.write("\e[34mBLUE\t"); delay(500); - Terminal.write("\e[35mMAGENTA\t"); delay(500); - Terminal.write("\e[36mCYAN\t"); delay(500); - Terminal.write("\e[37mWHITE\r\n"); delay(500); - Terminal.write("\e[90mHBLACK\t"); delay(500); - Terminal.write("\e[91mHRED\t"); delay(500); - Terminal.write("\e[92mHGREEN\t"); delay(500); - Terminal.write("\e[93mHYELLOW\t"); delay(500); - Terminal.write("\e[94mHBLUE\t"); delay(500); - Terminal.write("\e[95mHMAGENTA\t"); delay(500); - Terminal.write("\e[96mHCYAN\t"); delay(500); - Terminal.write("\e[97mHWHITE\r\n"); delay(500); - // backgrounds - Terminal.write("\e[40mBLACK\t"); delay(500); - Terminal.write("\e[41mRED\e[40m\t"); delay(500); - Terminal.write("\e[42mGREEN\e[40m\t"); delay(500); - Terminal.write("\e[43mYELLOW\e[40m\t"); delay(500); - Terminal.write("\e[44mBLUE\e[40m\t"); delay(500); - Terminal.write("\e[45mMAGENTA\e[40m\t"); delay(500); - Terminal.write("\e[46mCYAN\e[40m\t"); delay(500); - Terminal.write("\e[47mWHITE\e[40m\r\n"); delay(500); - Terminal.write("\e[100mHBLACK\e[40m\t"); delay(500); - Terminal.write("\e[101mHRED\e[40m\t"); delay(500); - Terminal.write("\e[102mHGREEN\e[40m\t"); delay(500); - Terminal.write("\e[103mHYELLOW\e[40m\t"); delay(500); - Terminal.write("\e[104mHBLUE\e[40m\t"); delay(500); - Terminal.write("\e[105mHMAGENTA\e[40m\t"); delay(500); - Terminal.write("\e[106mHCYAN\e[40m\r\n"); delay(500); -} - -void demo3() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nSupported styles:\r\n"); - slowPrintf("\e[0mNormal\r\n"); - slowPrintf("\e[1mBold\e[0m\r\n"); - slowPrintf("\e[3mItalic\e[0m\r\n"); - slowPrintf("\e[4mUnderlined\e[0m\r\n"); - slowPrintf("\e[5mBlink\e[0m\r\n"); - slowPrintf("\e[7mInverse\e[0m\r\n"); - slowPrintf("\e[1;3mBoldItalic\e[0m\r\n"); - slowPrintf("\e[1;3;4mBoldItalicUnderlined\e[0m\r\n"); - slowPrintf("\e[1;3;4;5mBoldItalicUnderlinedBlinking\e[0m\r\n"); - slowPrintf("\e[1;3;4;5;7mBoldItalicUnderlinedBlinkingInverse\e[0m\r\n"); - slowPrintf("\e#6Double Width Line\r\n"); - slowPrintf("\e#6\e#3Double Height Line\r\n"); // top half - slowPrintf("\e#6\e#4Double Height Line\r\n"); // bottom half -} - -void demo4() -{ - Canvas cv(&DisplayController); - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nMixed text and graphics:\r\n"); - slowPrintf("Points...\r\n"); - for (int i = 0; i < 500; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.setPixel(random(cv.getWidth()), random(cv.getHeight())); - delay(15); - } - delay(500); - slowPrintf("\e[40;32mLines...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawLine(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mRectangles...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawRectangle(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mEllipses...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawEllipse(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - for (int i = 0; i < 30; ++i) { - Terminal.write("\e[40;32mScrolling...\r\n"); - delay(250); - } -} - -void demo5() -{ - Terminal.write("\e[40;93m"); // background: black, foreground: yellow - Terminal.write("\e[2J"); // clear screen - slowPrintf("\e[1;37HVT/ANSI animation"); - Terminal.write("\e[20h"); // automatic new line on - Terminal.write("\e[92m"); // light-green - Terminal.enableCursor(false); - for (int j = 0; j < 4; ++j) { - for (int i = 0; i < sizeof(vt_animation); ++i) { - Terminal.write(vt_animation[i]); - if (vt_animation[i] == 0x1B && vt_animation[i + 1] == 0x5B && vt_animation[i + 2] == 0x48) - delay(120); // pause 100ms every frame - } - } - Terminal.enableCursor(true); - Terminal.write("\e[20l"); // automatic new line off -} - -void loop() -{ - delay(1000); - demo1(); - delay(4000); - demo2(); - delay(4000); - demo3(); - delay(4000); - demo4(); - delay(4000); - demo5(); - delay(4000); -} diff --git a/examples/ILI9341_TFT/240x320/SimpleTerminalOut/vtanimations.h b/examples/ILI9341_TFT/240x320/SimpleTerminalOut/vtanimations.h deleted file mode 100644 index 7667a43fc..000000000 --- a/examples/ILI9341_TFT/240x320/SimpleTerminalOut/vtanimations.h +++ /dev/null @@ -1,34 +0,0 @@ - -#ifndef vtanimations_h -#define vtanimations_h - -static const unsigned char vt_animation[] = { - 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2d, 0x6f, 0x23, 0x26, 0x26, 0x2a, 0x27, 0x27, 0x27, 0x27, 0x3f, 0x64, 0x3a, 0x3e, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x2f, 0x22, 0x60, 0x27, 0x27, 0x20, 0x20, 0x27, 0x27, 0x2c, 0x2c, 0x20, 0x64, 0x4d, 0x46, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x26, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x4d, 0x62, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x22, 0x22, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x6f, 0x64, 0x4d, 0x2a, 0x24, 0x26, 0x26, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x4d, 0x26, 0x6f, 0x6f, 0x64, 0x2c, 0x7e, 0x27, 0x60, 0x28, 0x26, 0x23, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x62, 0x3f, 0x23, 0x62, 0x6f, 0x62, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4c, 0x0a, 0x20, 0x20, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x37, 0x4d, 0x4d, 0x4d, 0x24, 0x52, 0x2a, 0x48, 0x6b, 0x0a, 0x20, 0x3f, 0x24, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2f, 0x48, 0x4d, 0x4d, 0x4d, 0x7c, 0x60, 0x2a, 0x4c, 0x0a, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x54, 0x2c, 0x0a, 0x24, 0x48, 0x23, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x23, 0x7d, 0x27, 0x20, 0x20, 0x60, 0x3f, 0x0a, 0x5d, 0x4d, 0x4d, 0x48, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x22, 0x2a, 0x22, 0x22, 0x22, 0x22, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x2d, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2c, 0x64, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x27, 0x0a, 0x20, 0x3a, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x2e, 0x4d, 0x7c, 0x2e, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x2e, 0x39, 0x4d, 0x4d, 0x4d, 0x5b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x39, 0x4d, 0x4d, 0x6b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x23, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7e, 0x2c, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x2d, 0x2d, 0x2e, 0x5f, 0x2c, 0x64, 0x64, 0x23, 0x23, 0x23, 0x70, 0x70, 0x3d, 0x22, 0x22, 0x27, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x76, 0x2d, 0x3e, 0x23, 0x48, 0x23, 0x50, 0x3f, 0x20, 0x22, 0x27, 0x3a, 0x6f, 0x3c, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x64, 0x50, 0x60, 0x20, 0x60, 0x27, 0x27, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x6f, 0x2e, 0x2b, 0x48, 0x36, 0x26, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x48, 0x39, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x26, 0x62, 0x48, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x4d, 0x50, 0x22, 0x27, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6f, 0x4d, 0x50, 0x2a, 0x23, 0x26, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x53, 0x64, 0x6f, 0x62, 0x2f, 0x2f, 0x60, 0x5e, 0x26, 0x23, 0x23, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x6f, 0x3e, 0x23, 0x6f, 0x6f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x26, 0x48, 0x4d, 0x5b, 0x52, 0x5c, 0x0a, 0x20, 0x64, 0x22, 0x5a, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5b, 0x48, 0x4d, 0x4d, 0x7c, 0x3a, 0x0a, 0x2d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x4d, 0x50, 0x27, 0x20, 0x3a, 0x0a, 0x3a, 0x3f, 0x3f, 0x4d, 0x62, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x21, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2a, 0x22, 0x22, 0x22, 0x22, 0x60, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x2d, 0x0a, 0x7c, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x2e, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x60, 0x0a, 0x2d, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x2c, 0x2f, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x46, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x2c, 0x50, 0x27, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x5e, 0x27, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x60, 0x48, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x3a, 0x2a, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x60, 0x5c, 0x2c, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x7e, 0x5c, 0x2e, 0x5f, 0x5f, 0x2c, 0x6f, 0x62, 0x62, 0x23, 0x71, 0x3d, 0x3d, 0x7e, 0x27, 0x27, 0x27, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x76, 0x72, 0x3a, 0x48, 0x4d, 0x4d, 0x23, 0x3f, 0x3a, 0x60, 0x27, 0x20, 0x3e, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x3a, 0x26, 0x48, 0x69, 0x27, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x22, 0x27, 0x20, 0x5c, 0x5c, 0x7c, 0x26, 0x62, 0x53, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x23, 0x2a, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x26, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x48, 0x22, 0x27, 0x27, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x6f, 0x48, 0x48, 0x2a, 0x26, 0x26, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x5c, 0x62, 0x64, 0x3c, 0x7c, 0x22, 0x2a, 0x26, 0x23, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x48, 0x48, 0x3f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x62, 0x64, 0x23, 0x6f, 0x64, 0x4d, 0x4d, 0x4c, 0x0a, 0x20, 0x20, 0x48, 0x27, 0x20, 0x7c, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x39, 0x4d, 0x6b, 0x0a, 0x20, 0x4a, 0x4c, 0x2f, 0x22, 0x37, 0x2b, 0x2c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x39, 0x4d, 0x4c, 0x0a, 0x2d, 0x60, 0x48, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x7c, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x5c, 0x5c, 0x23, 0x4d, 0x23, 0x64, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2e, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x2a, 0x22, 0x22, 0x27, 0x22, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x0a, 0x2d, 0x2e, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x6f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x60, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5c, 0x7c, 0x3a, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x2e, 0x50, 0x2e, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x27, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x60, 0x39, 0x4d, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x60, 0x62, 0x2c, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x5c, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x3a, 0x62, 0x7e, 0x5c, 0x5c, 0x5f, 0x2c, 0x6f, 0x64, 0x64, 0x71, 0x3d, 0x3d, 0x2d, 0x2d, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x23, 0x23, 0x27, 0x39, 0x4d, 0x4d, 0x48, 0x62, 0x27, 0x3a, 0x27, 0x2d, 0x2c, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x22, 0x3a, 0x48, 0x48, 0x24, 0x27, 0x20, 0x22, 0x22, 0x27, 0x20, 0x20, 0x22, 0x27, 0x20, 0x2d, 0x5c, 0x37, 0x2a, 0x52, 0x26, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x48, 0x23, 0x39, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x5c, 0x62, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x22, 0x22, 0x27, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x22, 0x48, 0x39, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x48, 0x4c, 0x62, 0x64, 0x3c, 0x7c, 0x3f, 0x26, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x4d, 0x48, 0x23, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x62, 0x3e, 0x62, 0x48, 0x62, 0x0a, 0x20, 0x20, 0x3a, 0x4d, 0x48, 0x20, 0x20, 0x2e, 0x22, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x26, 0x0a, 0x20, 0x2e, 0x3a, 0x4d, 0x3a, 0x64, 0x2d, 0x22, 0x7c, 0x3a, 0x62, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x0a, 0x3a, 0x20, 0x20, 0x22, 0x2a, 0x48, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4c, 0x76, 0x64, 0x48, 0x48, 0x23, 0x64, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x2a, 0x22, 0x27, 0x22, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x2d, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x4d, 0x4d, 0x4d, 0x54, 0x2f, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x2a, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x23, 0x27, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x48, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x60, 0x23, 0x3f, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x7c, 0x2e, 0x23, 0x71, 0x6f, 0x5f, 0x5f, 0x2c, 0x2c, 0x6f, 0x62, 0x3d, 0x7e, 0x7e, 0x2d, 0x27, 0x27, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x70, 0x70, 0x48, 0x5b, 0x60, 0x4d, 0x4d, 0x4d, 0x44, 0x3a, 0x3a, 0x2d, 0x2d, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x48, 0x4d, 0x52, 0x22, 0x3a, 0x26, 0x4d, 0x26, 0x2e, 0x20, 0x22, 0x22, 0x27, 0x20, 0x20, 0x22, 0x27, 0x20, 0x20, 0x2f, 0x26, 0x5c, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x48, 0x23, 0x39, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x3c, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x22, 0x22, 0x27, 0x60, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x50, 0x23, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x5c, 0x64, 0x6f, 0x3f, 0x26, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x69, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x23, 0x3f, 0x0a, 0x20, 0x20, 0x3a, 0x20, 0x5a, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x37, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x0a, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x4d, 0x36, 0x5f, 0x64, 0x7c, 0x22, 0x60, 0x24, 0x7c, 0x76, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4c, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x2a, 0x48, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x5c, 0x5c, 0x64, 0x48, 0x4d, 0x23, 0x64, 0x64, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x2a, 0x22, 0x22, 0x3f, 0x48, 0x4d, 0x4d, 0x4d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x6f, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x4d, 0x4d, 0x50, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x27, 0x0a, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x4d, 0x4d, 0x54, 0x0a, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x3f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x4d, 0x3a, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x7e, 0x2d, 0x64, 0x48, 0x62, 0x5f, 0x5f, 0x5c, 0x6f, 0x76, 0x2b, 0x7e, 0x7e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x6f, 0x3e, 0x23, 0x26, 0x48, 0x36, 0x3f, 0x2a, 0x4d, 0x4d, 0x48, 0x3a, 0x2d, 0x2e, 0x2e, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x52, 0x3a, 0x22, 0x26, 0x4d, 0x5a, 0x5c, 0x20, 0x60, 0x22, 0x27, 0x20, 0x20, 0x22, 0x20, 0x20, 0x7c, 0x24, 0x2d, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x4d, 0x4d, 0x4d, 0x23, 0x39, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x48, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x2c, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x22, 0x60, 0x27, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x50, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x24, 0x62, 0x26, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x23, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x48, 0x3f, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x54, 0x54, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x3e, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x5c, 0x2c, 0x23, 0x2d, 0x22, 0x22, 0x24, 0x7e, 0x62, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x22, 0x48, 0x26, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x5c, 0x76, 0x2c, 0x23, 0x4d, 0x48, 0x64, 0x64, 0x63, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x22, 0x3a, 0x48, 0x4d, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x6f, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x54, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x54, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x4d, 0x3a, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x2d, 0x7e, 0x6f, 0x6f, 0x48, 0x48, 0x5f, 0x5f, 0x2c, 0x2c, 0x76, 0x7e, 0x2d, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x64, 0x3e, 0x48, 0x26, 0x48, 0x26, 0x5a, 0x3f, 0x23, 0x4d, 0x23, 0x62, 0x2d, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x5c, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, - 0x52, 0x3f, 0x60, 0x5c, 0x4d, 0x36, 0x62, 0x2e, 0x22, 0x60, 0x27, 0x20, 0x27, 0x27, 0x60, 0x60, 0x76, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x2e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x23, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x7e, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x22, 0x27, 0x2d, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x62, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x26, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x48, 0x23, 0x23, 0x52, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x37, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x3a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x5f, 0x5f, 0x23, 0x7c, 0x60, 0x22, 0x5c, 0x3e, 0x3f, 0x76, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4c, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x27, 0x23, 0x48, 0x64, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x5c, 0x2c, 0x5c, 0x3f, 0x48, 0x48, 0x23, 0x62, 0x62, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x62, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x62, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x22, 0x54, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x6f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x23, 0x2a, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x48, 0x3a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x2e, 0x2d, 0x2b, 0x6f, 0x6f, 0x64, 0x48, 0x4c, 0x5f, 0x2c, 0x2d, 0x2d, 0x2f, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x5c, 0x3f, 0x64, 0x5a, 0x6b, 0x4d, 0x48, 0x46, 0x26, 0x24, 0x2a, 0x71, 0x23, 0x62, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x2f, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x3a, 0x27, 0x48, 0x4d, 0x5c, 0x5c, 0x22, 0x60, 0x2d, 0x27, 0x27, 0x60, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x60, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x22, 0x27, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x23, 0x4d, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x0a, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x39, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, - 0x21, 0x27, 0x3a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x6b, 0x0a, 0x20, 0x2e, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x5c, 0x5f, 0x3f, 0x70, 0x20, 0x22, 0x22, 0x3a, 0x2d, 0x62, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4c, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x27, 0x22, 0x48, 0x26, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x5c, 0x2c, 0x5c, 0x64, 0x4d, 0x48, 0x23, 0x62, 0x23, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x62, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x6f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x27, 0x2e, 0x2e, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x20, 0x2d, 0x76, 0x6f, 0x62, 0x6f, 0x6f, 0x23, 0x26, 0x3a, 0x2c, 0x2d, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x3a, 0x5c, 0x62, 0x6b, 0x39, 0x39, 0x4d, 0x5b, 0x3c, 0x24, 0x24, 0x2b, 0x62, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x24, 0x2a, 0x22, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5b, 0x3a, 0x22, 0x5c, 0x4d, 0x62, 0x5c, 0x3f, 0x5e, 0x22, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x60, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x3f, 0x2e, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x22, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x23, 0x48, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x28, 0x2a, 0x4d, 0x4d, 0x4d, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x0a, 0x20, 0x3a, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x62, 0x5f, 0x5f, 0x23, 0x7c, 0x22, 0x22, 0x60, 0x7c, 0x2b, 0x76, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x27, 0x2a, 0x48, 0x23, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x5c, 0x76, 0x2c, 0x23, 0x4d, 0x23, 0x62, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x2e, 0x0a, 0x2d, 0x3a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x27, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x60, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x23, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x48, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x52, 0x22, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x5f, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x20, 0x2e, 0x76, 0x6f, 0x6f, 0x64, 0x6f, 0x6f, 0x64, 0x63, 0x3f, 0x2e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5c, 0x6f, 0x6f, 0x5c, 0x3f, 0x64, 0x64, 0x6b, 0x39, 0x4d, 0x52, 0x62, 0x53, 0x3e, 0x76, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x3a, 0x3e, 0x2a, 0x22, 0x22, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x3f, 0x7c, 0x48, 0x3f, 0x24, 0x3f, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2d, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x5f, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x26, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x48, 0x23, 0x48, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x37, 0x48, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x5c, 0x5f, 0x3f, 0x63, 0x60, 0x22, 0x22, 0x2b, 0x3f, 0x5c, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x60, 0x23, 0x26, 0x23, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x2c, 0x5c, 0x23, 0x4d, 0x48, 0x64, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x2e, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2c, 0x20, 0x2d, 0x0a, 0x3a, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x34, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x60, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x2d, 0x0a, 0x3a, 0x2e, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x22, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x60, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x27, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x48, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x27, 0x2d, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x2e, 0x2e, 0x2d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x20, 0x2e, 0x5c, 0x6f, 0x6f, 0x6f, 0x6f, 0x62, 0x6f, 0x6f, 0x3c, 0x5e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x2c, 0x3a, 0x6f, 0x3f, 0x5c, 0x3f, 0x64, 0x4d, 0x26, 0x4d, 0x48, 0x63, 0x63, 0x7e, 0x2c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x5e, 0x27, 0x3a, 0x26, 0x23, 0x22, 0x22, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x3a, 0x3f, 0x26, 0x26, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x60, 0x20, 0x20, 0x2d, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x70, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x22, 0x27, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x23, 0x5b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x5a, 0x39, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7e, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x62, 0x5f, 0x3f, 0x70, 0x22, 0x22, 0x2d, 0x3f, 0x76, 0x2e, 0x2e, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x27, 0x2a, 0x26, 0x23, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x2c, 0x6f, 0x48, 0x48, 0x23, 0x3f, 0x20, 0x20, 0x2e, 0x0a, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2c, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x2c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x0a, 0x2d, 0x2d, 0x20, 0x2e, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x0a, 0x20, 0x3a, 0x2e, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x0a, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x50, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x48, 0x3f, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x3a, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x23, 0x22, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x2a, 0x27, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x27, 0x3a, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x2e, 0x20, 0x2e, 0x5c, 0x6f, 0x6f, 0x6f, 0x6f, 0x64, 0x6f, 0x76, 0x7e, 0x5e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x5c, 0x3a, 0x2c, 0x3f, 0x3f, 0x5c, 0x3f, 0x3f, 0x4d, 0x52, 0x39, 0x23, 0x63, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x76, 0x2f, 0x27, 0x27, 0x27, 0x3a, 0x26, 0x23, 0x22, 0x22, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x3f, 0x2a, 0x64, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x7e, 0x27, 0x20, 0x2d, 0x20, 0x2d, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x76, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x21, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x23, 0x7c, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x28, 0x23, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x60, 0x3a, 0x2c, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x62, 0x5f, 0x3e, 0x2f, 0x22, 0x7c, 0x5c, 0x2c, 0x2e, 0x3a, 0x0a, 0x2e, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x27, 0x23, 0x26, 0x62, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x5c, 0x6f, 0x48, 0x48, 0x3f, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x4d, 0x4d, 0x4d, 0x26, 0x0a, 0x3a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x2f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x5c, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x4d, 0x50, 0x0a, 0x3a, 0x2e, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x27, 0x0a, 0x20, 0x5c, 0x2e, 0x2e, 0x2e, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x4d, 0x4d, 0x54, 0x0a, 0x20, 0x20, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x5c, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x2e, 0x20, 0x60, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x26, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x20, 0x60, 0x7c, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x26, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2f, 0x5c, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x5f, 0x5c, 0x6f, 0x2c, 0x6f, 0x6f, 0x76, 0x2b, 0x2d, 0x2d, 0x27, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x64, 0x3f, 0x2c, 0x3a, 0x3f, 0x6f, 0x3f, 0x3a, 0x3f, 0x48, 0x4d, 0x3e, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x48, 0x2a, 0x22, 0x27, 0x27, 0x60, 0x27, 0x48, 0x23, 0x2a, 0x22, 0x2a, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x24, 0x24, 0x76, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x2f, 0x2f, 0x22, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x60, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x22, 0x60, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x3e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3a, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x5c, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5a, 0x23, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x60, 0x2c, 0x3a, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x48, 0x48, 0x5f, 0x3e, 0x3a, 0x60, 0x5c, 0x2c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x27, 0x2a, 0x26, 0x7c, 0x20, 0x60, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x5c, 0x48, 0x62, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x69, 0x4d, 0x4d, 0x0a, 0x4d, 0x62, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x0a, 0x3a, 0x3a, 0x2e, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x4d, 0x50, 0x0a, 0x60, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x27, 0x0a, 0x20, 0x39, 0x48, 0x2c, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x54, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x2a, 0x4d, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x60, 0x6f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x3a, 0x20, 0x20, 0x7c, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x22, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3c, 0x27, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x2d, 0x3d, 0x2e, 0x2c, 0x5f, 0x2c, 0x2c, 0x2c, 0x6f, 0x6f, 0x76, 0x2d, 0x7e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x6f, 0x63, 0x3e, 0x3f, 0x5f, 0x3a, 0x62, 0x3f, 0x6f, 0x3f, 0x48, 0x48, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x76, 0x2f, 0x39, 0x39, 0x2a, 0x22, 0x22, 0x22, 0x20, 0x27, 0x2a, 0x48, 0x23, 0x22, 0x22, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5a, 0x2c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x2a, 0x20, 0x2f, 0x22, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x2a, 0x3e, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x62, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x3a, 0x0a, 0x20, 0x20, 0x2f, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x26, 0x4d, 0x48, 0x20, 0x60, 0x5c, 0x0a, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x48, 0x62, 0x3f, 0x3f, 0x5c, 0x0a, - 0x2c, 0x2d, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x26, 0x2c, 0x2e, 0x0a, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x7d, 0x0a, 0x21, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x0a, 0x24, 0x2c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x31, 0x0a, 0x3f, 0x60, 0x4d, 0x3f, 0x3f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x0a, 0x3f, 0x2e, 0x3a, 0x3a, 0x7c, 0x20, 0x27, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x0a, 0x20, 0x4d, 0x3f, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x27, 0x0a, 0x20, 0x39, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x23, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x39, 0x23, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x3a, 0x22, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2d, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x60, 0x5e, 0x3d, 0x3d, 0x5c, 0x5f, 0x2e, 0x2c, 0x2c, 0x2c, 0x6f, 0x76, 0x2d, 0x2d, 0x5c, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5c, 0x6f, 0x23, 0x23, 0x3f, 0x3f, 0x2c, 0x3a, 0x69, 0x6f, 0x3f, 0x3f, 0x24, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x23, 0x22, 0x48, 0x39, 0x2a, 0x22, 0x22, 0x22, 0x20, 0x22, 0x60, 0x23, 0x48, 0x2a, 0x22, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x2d, 0x20, 0x2d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x2a, 0x48, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x23, 0x53, 0x3e, 0x2d, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x26, 0x26, 0x2c, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x23, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x3f, 0x2d, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x48, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x48, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x5a, 0x48, 0x62, 0x3a, 0x0a, 0x20, 0x2f, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x3f, 0x4c, 0x0a, 0x7c, 0x3a, 0x7c, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x3a, 0x0a, 0x3a, 0x3f, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x0a, 0x3e, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x4d, 0x7c, 0x5c, 0x2c, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x0a, 0x21, 0x7c, 0x22, 0x3a, 0x48, 0x48, 0x3f, 0x2d, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x5e, 0x27, 0x5f, 0x3a, 0x3f, 0x22, 0x5c, 0x20, 0x60, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x2d, 0x20, 0x7c, 0x4d, 0x4c, 0x3f, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x3a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x3e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x5e, 0x4d, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x60, 0x22, 0x23, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x2b, 0x3f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x5c, 0x62, 0x3d, 0x70, 0x3f, 0x2e, 0x2e, 0x5f, 0x5c, 0x5c, 0x76, 0x76, 0x2d, 0x2d, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x6f, 0x23, 0x62, 0x48, 0x5c, 0x3f, 0x3f, 0x3a, 0x3a, 0x3f, 0x6f, 0x3f, 0x63, 0x62, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x23, 0x4d, 0x48, 0x23, 0x2a, 0x2a, 0x53, 0x48, 0x22, 0x22, 0x27, 0x20, 0x22, 0x60, 0x2a, 0x48, 0x23, 0x22, 0x2a, 0x23, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x5e, 0x20, 0x20, 0x5e, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2a, 0x48, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x23, 0x22, 0x3e, 0x3e, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x48, 0x3a, 0x52, 0x5f, 0x6f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x27, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x4d, 0x4c, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x52, 0x21, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x6b, 0x0a, 0x20, 0x64, 0x26, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4c, 0x0a, 0x3a, 0x4d, 0x20, 0x3a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x0a, 0x2f, 0x7c, 0x20, 0x21, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x6b, 0x2e, 0x24, 0x2d, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7d, 0x39, 0x52, 0x3a, 0x21, 0x2c, 0x2c, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x5c, 0x3a, 0x3a, 0x5c, 0x27, 0x3a, 0x60, 0x2a, 0x4d, 0x23, 0x5c, 0x2d, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x3a, 0x20, 0x22, 0x27, 0x27, 0x2e, 0x2e, 0x3a, 0x22, 0x21, 0x60, 0x5c, 0x20, 0x20, 0x27, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x4d, 0x62, 0x2e, 0x48, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2e, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, - 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x60, 0x39, 0x4d, 0x23, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x27, 0x20, 0x20, 0x20, 0x22, 0x23, 0x23, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x62, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x2a, 0x23, 0x64, 0x23, 0x23, 0x63, 0x2e, 0x2e, 0x5f, 0x5c, 0x76, 0x2d, 0x2d, 0x2d, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x6f, 0x23, 0x26, 0x6f, 0x48, 0x62, 0x3f, 0x5c, 0x6f, 0x3a, 0x3a, 0x64, 0x3f, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x23, 0x2a, 0x2a, 0x24, 0x4d, 0x22, 0x22, 0x60, 0x20, 0x22, 0x60, 0x2a, 0x48, 0x48, 0x22, 0x23, 0x26, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x44, 0x27, 0x20, 0x2e, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x62, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x27, 0x2f, 0x7c, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x62, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x54, 0x7c, 0x5f, 0x6f, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x26, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x0a, 0x20, 0x2f, 0x4d, 0x48, 0x37, 0x27, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x3a, 0x4d, 0x4d, 0x20, 0x20, 0x7b, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x69, 0x3f, 0x27, 0x20, 0x2e, 0x21, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x7b, 0x2c, 0x20, 0x6f, 0x7c, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x54, 0x3f, 0x39, 0x4d, 0x5c, 0x3a, 0x2d, 0x27, 0x6f, 0x2c, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x5c, 0x3f, 0x3a, 0x3a, 0x60, 0x60, 0x22, 0x60, 0x3f, 0x39, 0x4d, 0x48, 0x6f, 0x2e, 0x2f, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x2e, 0x20, 0x20, 0x27, 0x22, 0x60, 0x27, 0x5e, 0x20, 0x5f, 0x2e, 0x60, 0x22, 0x21, 0x22, 0x5e, 0x2e, 0x20, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x62, 0x4d, 0x4d, 0x3f, 0x2e, 0x4d, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x48, 0x2a, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x60, 0x22, 0x2a, 0x23, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x2a, 0x23, 0x23, 0x48, 0x23, 0x23, 0x23, 0x3a, 0x2e, 0x5f, 0x5c, 0x2d, 0x2d, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x23, 0x48, 0x26, 0x64, 0x23, 0x62, 0x3f, 0x5c, 0x62, 0x3a, 0x5f, 0x3e, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x22, 0x2a, 0x39, 0x52, 0x22, 0x27, 0x2d, 0x60, 0x60, 0x2a, 0x23, 0x50, 0x5c, 0x2d, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x20, 0x20, 0x2e, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x60, 0x5e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x22, 0x2c, 0x3f, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x3f, 0x7d, 0x2e, 0x2c, 0x64, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x2f, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x26, 0x27, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x64, 0x50, 0x54, 0x4d, 0x4d, 0x50, 0x3e, 0x27, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x3f, 0x20, 0x2d, 0x4d, 0x4d, 0x7d, 0x20, 0x20, 0x2e, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x4a, 0x27, 0x20, 0x3a, 0x3a, 0x2a, 0x27, 0x20, 0x20, 0x2d, 0x24, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x3f, 0x62, 0x20, 0x2e, 0x2c, 0x48, 0x2d, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x7c, 0x36, 0x2e, 0x26, 0x4d, 0x50, 0x3a, 0x3a, 0x20, 0x21, 0x2e, 0x2c, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x3a, 0x3a, 0x20, 0x22, 0x27, 0x20, 0x22, 0x60, 0x3a, 0x22, 0x4d, 0x4d, 0x23, 0x2c, 0x2d, 0x5e, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0x3a, 0x27, 0x20, 0x5f, 0x2e, 0x3a, 0x22, 0x3f, 0x60, 0x60, 0x5c, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3f, 0x62, 0x4d, 0x4d, 0x4c, 0x2e, 0x5d, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x23, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x23, 0x23, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x2b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x2a, 0x23, 0x23, 0x48, 0x4d, 0x48, 0x23, 0x23, 0x3a, 0x5f, 0x5f, 0x2c, 0x2d, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x23, 0x23, 0x4d, 0x62, 0x62, 0x26, 0x62, 0x6f, 0x3f, 0x3f, 0x6f, 0x5f, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x2a, 0x23, 0x3f, 0x4d, 0x2a, 0x27, 0x20, 0x22, 0x3f, 0x2a, 0x26, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x34, 0x20, 0x20, 0x60, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x22, 0x5c, 0x3f, 0x2e, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x22, 0x39, 0x3a, 0x5f, 0x2c, 0x64, 0x27, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x5e, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x3a, 0x7b, 0x4d, 0x2a, 0x22, 0x4d, 0x4d, 0x4d, 0x50, 0x54, 0x22, 0x27, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x2e, 0x20, 0x3a, 0x0a, 0x2e, 0x27, 0x4d, 0x27, 0x20, 0x20, 0x27, 0x4d, 0x4d, 0x4d, 0x2e, 0x20, 0x20, 0x2d, 0x54, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x2d, 0x20, 0x6b, 0x20, 0x20, 0x20, 0x69, 0x3a, 0x3f, 0x27, 0x27, 0x20, 0x20, 0x2d, 0x7c, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x60, 0x20, 0x20, 0x2d, 0x6f, 0x26, 0x20, 0x20, 0x2e, 0x2c, 0x48, 0x2d, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x3a, 0x60, 0x48, 0x4d, 0x50, 0x7c, 0x3a, 0x27, 0x21, 0x2e, 0x6f, 0x2e, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3c, 0x3a, 0x3a, 0x3a, 0x27, 0x3c, 0x5e, 0x20, 0x27, 0x22, 0x60, 0x60, 0x39, 0x4d, 0x48, 0x23, 0x2c, 0x2d, 0x5e, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x27, 0x27, 0x60, 0x60, 0x27, 0x27, 0x2e, 0x5f, 0x2e, 0x60, 0x22, 0x3f, 0x60, 0x5e, 0x7c, 0x20, 0x20, 0x20, 0x5e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x23, 0x64, 0x4d, 0x4d, 0x5f, 0x2e, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x64, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x48, 0x2a, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x23, 0x23, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x7e, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x60, 0x2a, 0x23, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x3c, 0x3a, 0x2c, 0x2e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x64, 0x64, 0x23, 0x48, 0x4d, 0x62, 0x26, 0x64, 0x48, 0x6f, 0x3f, 0x5c, 0x3f, 0x3a, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x2a, 0x2a, 0x39, 0x50, 0x27, 0x60, 0x22, 0x5c, 0x76, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3e, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x27, 0x7c, 0x7e, 0x2d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x3e, 0x60, 0x48, 0x2e, 0x5f, 0x2c, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x60, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x26, 0x2e, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x64, 0x27, 0x20, 0x48, 0x4d, 0x4d, 0x22, 0x22, 0x26, 0x4d, 0x4d, 0x4d, 0x50, 0x54, 0x27, 0x27, 0x20, 0x3a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x2d, 0x0a, 0x2c, 0x27, 0x20, 0x20, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x60, 0x54, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x7c, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x7c, 0x20, 0x20, 0x20, 0x23, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x3f, - 0x20, 0x2a, 0x22, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x26, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x21, 0x20, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x2f, 0x3f, 0x48, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x72, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x3a, 0x20, 0x48, 0x4d, 0x4d, 0x5e, 0x3c, 0x7e, 0x2d, 0x3e, 0x2c, 0x6f, 0x2e, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x3a, 0x3a, 0x3a, 0x27, 0x60, 0x2a, 0x2d, 0x60, 0x60, 0x27, 0x3a, 0x60, 0x39, 0x4d, 0x48, 0x62, 0x2c, 0x7c, 0x2d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x27, 0x27, 0x27, 0x3a, 0x27, 0x20, 0x3a, 0x5f, 0x20, 0x22, 0x22, 0x21, 0x22, 0x5e, 0x2e, 0x20, 0x20, 0x60, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x64, 0x62, 0x48, 0x4d, 0x36, 0x5f, 0x7c, 0x48, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x64, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x48, 0x2a, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3f, 0x23, 0x23, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2f, 0x22, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x22, 0x23, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x3c, 0x3e, 0x2e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x23, 0x23, 0x62, 0x48, 0x4d, 0x62, 0x26, 0x64, 0x23, 0x62, 0x64, 0x2c, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x2a, 0x2a, 0x39, 0x52, 0x22, 0x2d, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x3f, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x22, 0x2e, 0x7d, 0x2d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x2f, 0x60, 0x48, 0x20, 0x5f, 0x6f, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4c, 0x20, 0x20, 0x60, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x62, 0x50, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x3a, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x0a, 0x20, 0x64, 0x4d, 0x48, 0x27, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x22, 0x48, 0x4d, 0x4d, 0x4d, 0x52, 0x27, 0x54, 0x22, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x48, 0x27, 0x20, 0x20, 0x20, 0x2d, 0x4d, 0x52, 0x27, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x4d, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x20, 0x20, 0x50, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x31, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x2e, 0x60, 0x2a, 0x22, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x26, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x5c, 0x26, 0x7c, 0x20, 0x20, 0x2e, 0x2c, 0x23, 0x7e, 0x20, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x48, 0x4c, 0x2e, 0x7c, 0x48, 0x4d, 0x48, 0x5c, 0x63, 0x7e, 0x60, 0x7c, 0x76, 0x2c, 0x5c, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x7c, 0x3a, 0x3a, 0x3a, 0x27, 0x3a, 0x60, 0x2d, 0x60, 0x60, 0x20, 0x27, 0x22, 0x4d, 0x4d, 0x23, 0x5c, 0x2d, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x3a, 0x0a, 0x25, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x27, 0x60, 0x60, 0x27, 0x60, 0x27, 0x20, 0x3a, 0x5f, 0x20, 0x27, 0x3f, 0x27, 0x60, - 0x7c, 0x20, 0x60, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x7c, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x64, 0x4d, 0x4d, 0x3f, 0x2e, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x60, 0x20, 0x2d, 0x0a, 0x20, 0x3f, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x6f, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x60, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x48, 0x23, 0x2a, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x2a, 0x23, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x3a, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x2e, 0x76, 0x27, 0x27, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x5c, 0x2b, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x72, 0x7e, 0x2e, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x2c, 0x3e, 0x23, 0x62, 0x26, 0x48, 0x4d, 0x48, 0x64, 0x26, 0x26, 0x62, 0x62, 0x3e, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x2a, 0x48, 0x3a, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x76, 0x60, 0x3f, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x60, 0x2b, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x7c, 0x3f, 0x2b, 0x2e, 0x2c, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x64, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x6b, 0x5a, 0x2a, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x64, 0x54, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x22, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x54, 0x22, 0x60, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x4d, 0x36, 0x48, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x34, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x60, 0x22, 0x48, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x21, 0x7c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x31, 0x4d, 0x48, 0x70, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x24, 0x20, 0x2a, 0x22, 0x27, 0x20, 0x20, 0x2e, 0x2d, 0x3a, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x71, 0x3a, 0x48, 0x2e, 0x20, 0x20, 0x2e, 0x6f, 0x23, 0x2d, 0x60, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x48, 0x3f, 0x2e, 0x7c, 0x4d, 0x4d, 0x48, 0x3a, 0x3a, 0x3a, 0x3a, 0x2d, 0x6f, 0x2c, 0x5f, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x4d, 0x5b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x3f, 0x3a, 0x3a, 0x3a, 0x27, 0x7c, 0x60, 0x20, 0x60, 0x22, 0x60, 0x3a, 0x39, 0x4d, 0x48, 0x5c, 0x7e, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x60, 0x0a, 0x26, 0x4d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x22, 0x27, 0x60, 0x27, 0x5e, 0x27, 0x2e, 0x3a, 0x2e, 0x60, 0x3f, 0x27, 0x60, 0x2e, 0x20, 0x27, 0x7c, 0x20, 0x20, 0x2d, 0x3a, 0x0a, 0x60, 0x4d, 0x7c, 0x64, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x62, 0x48, 0x4d, 0x5b, 0x2e, 0x31, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x3a, 0x0a, 0x20, 0x39, 0x7c, 0x7c, 0x7c, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x62, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2c, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x48, 0x2e, 0x5e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x48, 0x23, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x2c, 0x3a, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x27, 0x20, 0x2e, 0x2d, 0x27, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x5c, 0x62, 0x71, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x62, 0x2d, 0x2d, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x3a, 0x2c, 0x23, 0x26, 0x36, 0x64, 0x48, 0x48, 0x48, 0x62, 0x26, 0x23, 0x23, 0x6f, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2a, 0x5c, 0x2c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x3a, 0x27, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x7c, 0x5c, 0x2f, 0x27, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x26, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2f, 0x22, 0x26, 0x2e, 0x2c, 0x64, 0x2e, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x62, 0x6f, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4c, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x24, 0x5a, 0x2a, 0x2a, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x64, 0x4d, 0x4d, 0x7d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x48, 0x3f, 0x22, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x27, 0x54, 0x27, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x4d, 0x4d, 0x4d, 0x62, 0x4d, 0x23, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x22, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x4d, 0x4d, 0x4d, 0x48, 0x2e, 0x20, 0x20, 0x20, 0x3c, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3f, 0x60, 0x2a, 0x22, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x26, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x76, 0x2f, 0x48, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x44, 0x20, 0x22, 0x27, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x3a, 0x20, 0x34, 0x4d, 0x4d, 0x2a, 0x3a, 0x3a, 0x2d, 0x21, 0x76, 0x2c, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x3f, 0x3a, 0x3a, 0x22, 0x20, 0x22, 0x27, 0x60, 0x60, 0x22, 0x3f, 0x39, 0x4d, 0x62, 0x3a, 0x3a, 0x2e, 0x20, 0x3a, 0x0a, 0x26, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x27, 0x22, 0x27, 0x7c, 0x22, 0x2e, 0x5f, 0x20, 0x22, 0x3f, 0x60, 0x7c, 0x20, 0x2d, 0x20, 0x3a, 0x0a, 0x60, 0x4d, 0x4d, 0x4d, 0x7d, 0x2e, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x64, 0x4d, 0x5b, 0x5f, 0x48, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x3a, 0x0a, 0x20, 0x39, 0x4d, 0x4d, 0x69, 0x60, 0x4d, 0x3a, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x39, 0x4d, 0x62, 0x20, 0x60, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x23, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x23, 0x22, 0x27, 0x20, 0x2c, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x22, 0x20, 0x76, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2a, 0x23, 0x64, 0x23, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x22, 0x2d, 0x27, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2c, 0x3c, 0x5f, 0x3a, 0x26, 0x53, 0x36, 0x64, 0x48, 0x48, 0x48, 0x62, 0x26, 0x62, 0x62, 0x5c, - 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x64, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x2d, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x64, 0x3a, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2d, 0x24, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x3a, 0x3a, 0x64, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3a, 0x5c, 0x2e, 0x3f, 0x3f, 0x20, 0x2d, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x64, 0x62, 0x6f, 0x48, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2c, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x37, 0x4d, 0x4d, 0x4d, 0x62, 0x24, 0x52, 0x2a, 0x2a, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x60, 0x24, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x22, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x26, 0x27, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x31, 0x48, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x27, 0x39, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x0a, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x7e, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x2e, 0x60, 0x2a, 0x22, 0x20, 0x20, 0x2e, 0x2d, 0x39, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x76, 0x37, 0x3f, 0x20, 0x20, 0x2e, 0x2c, 0x48, 0x20, 0x60, 0x27, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x53, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x39, 0x4d, 0x5f, 0x2d, 0x4d, 0x4d, 0x48, 0x3a, 0x3a, 0x2d, 0x5c, 0x76, 0x5f, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x3a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x5f, 0x3a, 0x22, 0x27, 0x7c, 0x27, 0x60, 0x27, 0x3a, 0x39, 0x4d, 0x76, 0x5c, 0x2e, 0x0a, 0x2d, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x22, 0x60, 0x27, 0x60, 0x27, 0x3a, 0x2e, 0x60, 0x3f, 0x5c, 0x20, 0x5c, 0x0a, 0x60, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x2e, 0x64, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3f, 0x62, 0x4d, 0x36, 0x2c, 0x7c, 0x20, 0x20, 0x7c, 0x0a, 0x20, 0x3a, 0x3f, 0x4d, 0x4d, 0x4d, 0x36, 0x20, 0x20, 0x4d, 0x7c, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x2e, 0x3f, 0x4d, 0x4d, 0x4d, 0x2d, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x60, 0x48, 0x4d, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x48, 0x23, 0x2a, 0x4d, 0x4d, 0x4d, 0x3f, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x60, 0x23, 0x2a, 0x3a, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x27, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2d, 0x23, 0x23, 0x48, 0x48, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x48, 0x23, 0x22, 0x22, 0x60, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x2c, 0x64, 0x5f, 0x3f, 0x64, 0x5a, 0x64, 0x6f, 0x48, 0x48, 0x48, 0x62, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x76, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x26, 0x2c, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x3f, 0x52, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x7c, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x5c, 0x3f, 0x3e, 0x60, 0x54, 0x23, 0x52, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x60, 0x5c, 0x7c, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x62, 0x64, 0x23, 0x6f, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2c, 0x60, 0x27, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x48, 0x4d, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x24, 0x5a, 0x50, 0x2a, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x24, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x3f, 0x22, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x54, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x6f, 0x4d, 0x48, 0x2a, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x2b, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x31, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x23, 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x23, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x60, 0x23, 0x22, 0x20, 0x20, 0x2d, 0x54, 0x3a, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x2a, 0x27, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7e, 0x3f, 0x26, 0x20, 0x20, 0x2e, 0x3f, 0x7d, 0x20, 0x27, 0x20, 0x27, 0x20, 0x2e, 0x0a, 0x2d, 0x20, 0x34, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x3f, 0x20, 0x48, 0x4d, 0x54, 0x63, 0x3a, 0x5c, 0x5c, 0x2e, 0x3a, 0x0a, 0x3a, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x23, 0x3a, 0x3a, 0x3a, 0x60, 0x3e, 0x60, 0x22, 0x3f, 0x4d, 0x7b, 0x0a, 0x2e, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x27, 0x60, 0x60, 0x27, 0x5f, 0x60, 0x3a, 0x2d, 0x0a, 0x2d, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x64, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x4d, 0x62, 0x5c, 0x27, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x20, 0x69, 0x4d, 0x7c, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x3a, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4a, 0x4d, 0x23, 0x2a, 0x4d, 0x4d, 0x54, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x23, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2d, 0x3d, 0x26, 0x26, 0x4d, 0x48, 0x23, 0x23, 0x48, 0x4d, 0x48, 0x48, 0x23, 0x22, 0x22, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x3a, 0x3f, 0x2c, 0x5a, 0x3f, 0x3a, 0x26, 0x24, 0x64, 0x48, 0x48, 0x23, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x3a, 0x62, 0x71, 0x52, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3f, 0x48, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x6f, 0x2f, 0x2a, 0x4d, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x76, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x3a, 0x48, 0x5c, 0x62, 0x5c, 0x27, 0x7c, 0x3f, 0x23, 0x48, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x3f, 0x5a, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2e, 0x3f, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x64, 0x62, 0x62, 0x6f, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5c, 0x27, 0x3a, 0x0a, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x37, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x3f, 0x36, 0x50, 0x2a, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5f, 0x20, 0x3a, 0x0a, 0x20, 0x5c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x22, 0x60, 0x4d, 0x4d, 0x4d, 0x52, 0x3c, 0x27, 0x20, 0x2e, 0x20, 0x2d, 0x0a, 0x2e, 0x31, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5d, 0x4d, 0x23, 0x22, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x52, 0x27, 0x20, 0x20, 0x20, 0x60, 0x3f, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x5c, 0x2e, 0x20, 0x3a, 0x0a, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x23, 0x7c, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x26, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x60, 0x2a, 0x27, 0x20, 0x2e, 0x5c, 0x20, 0x2e, 0x0a, 0x2d, 0x3f, 0x22, 0x22, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x3f, 0x62, 0x20, 0x20, 0x2c, 0x7d, 0x22, 0x20, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x5f, 0x7c, 0x4d, 0x7d, 0x72, 0x5c, 0x3f, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x24, 0x5f, 0x3a, 0x60, 0x27, 0x22, 0x48, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x22, 0x60, 0x60, 0x3a, 0x3a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x6f, 0x48, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x23, 0x4d, 0x2d, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x2e, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x6f, 0x4d, 0x4d, 0x54, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x4d, 0x4d, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x48, 0x39, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2d, 0x3d, 0x3d, 0x70, 0x48, 0x4d, 0x4d, 0x48, 0x23, 0x23, 0x48, 0x48, 0x23, 0x22, 0x22, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x2e, 0x2e, 0x2d, 0x3a, 0x62, 0x26, 0x3a, 0x3a, 0x26, 0x3f, 0x26, 0x26, 0x23, 0x23, 0x62, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x3f, 0x2d, 0x23, 0x26, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x2e, 0x31, 0x26, 0x23, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x2e, 0x6f, 0x2f, 0x23, 0x23, 0x52, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x20, 0x7c, 0x4d, 0x53, 0x64, 0x3f, 0x7c, 0x27, 0x60, 0x24, 0x3f, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x64, 0x23, 0x23, 0x6f, 0x6f, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3a, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x4a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x37, 0x48, 0x4d, 0x4d, 0x4d, 0x48, 0x24, 0x53, 0x52, 0x2a, 0x2a, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x3e, 0x0a, 0x20, 0x3a, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x60, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x3f, 0x22, 0x2a, 0x4d, 0x4d, 0x5b, 0x7c, 0x20, 0x3a, 0x0a, 0x2d, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3c, 0x4d, 0x48, 0x2a, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x27, 0x48, 0x4d, 0x3f, 0x20, 0x7c, 0x2e, 0x0a, 0x3a, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x23, 0x48, 0x2d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x23, 0x2c, 0x20, 0x20, 0x60, 0x20, 0x7c, 0x60, 0x3f, 0x20, 0x2f, 0x7c, 0x0a, 0x2e, 0x20, 0x20, 0x3f, 0x22, 0x22, 0x22, 0x3f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x76, 0x26, 0x20, 0x2e, 0x7d, 0x3f, 0x0a, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x3a, 0x26, 0x48, 0x26, 0x0a, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x7c, 0x3f, 0x22, 0x3f, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x60, 0x5c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x2d, 0x2e, 0x64, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x7c, 0x0a, 0x20, 0x3a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x7b, 0x4d, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x64, 0x54, 0x0a, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x52, 0x27, 0x20, 0x20, 0x60, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x4d, 0x50, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x26, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x3d, 0x3d, 0x70, 0x23, 0x23, 0x48, 0x4d, 0x4d, 0x48, 0x70, 0x26, 0x23, 0x22, 0x22, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x76, 0x2d, 0x2d, 0x2d, 0x3a, 0x3f, 0x26, 0x3f, 0x3a, 0x3f, 0x26, 0x3f, 0x26, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x20, 0x69, 0x3a, 0x20, 0x23, 0x4d, 0x24, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x2d, 0x5d, 0x4d, 0x23, 0x48, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x6f, 0x50, 0x2a, 0x26, 0x36, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x26, 0x52, 0x62, 0x62, 0x64, 0x2d, 0x2f, 0x60, 0x3f, 0x3a, 0x23, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x3f, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x6f, 0x64, 0x23, 0x62, 0x6f, 0x6f, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x69, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5b, 0x2a, 0x4d, 0x4d, 0x4d, 0x48, 0x26, 0x24, 0x52, 0x2a, 0x2a, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4c, 0x22, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x60, 0x60, 0x4d, 0x4d, 0x4d, 0x50, 0x22, 0x48, 0x4d, 0x4d, 0x3a, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2f, 0x4d, 0x48, 0x22, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x52, 0x20, 0x20, 0x20, 0x2a, 0x4d, 0x2c, 0x7c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x23, 0x26, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x44, 0x2e, 0x20, 0x20, 0x20, 0x3f, 0x7c, 0x5c, 0x0a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2a, 0x22, 0x27, 0x22, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x2d, 0x64, 0x2c, 0x4a, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x7c, 0x4d, 0x0a, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x3f, 0x0a, 0x26, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x0a, 0x60, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x2c, 0x64, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x2a, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x46, 0x27, 0x20, 0x2e, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x60, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x0a, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x2e, 0x20, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x5c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x2e, 0x3d, 0x70, 0x23, 0x23, 0x23, 0x23, 0x48, 0x4d, 0x48, 0x26, 0x3d, 0x22, 0x22, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x76, 0x6f, 0x7e, 0x5e, 0x27, 0x27, 0x3a, 0x26, 0x62, 0x3a, 0x3a, 0x64, 0x2c, 0x23, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x60, 0x22, 0x20, 0x60, 0x3a, 0x76, 0x20, 0x2b, 0x39, 0x50, 0x5d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x62, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2c, 0x6f, 0x6f, 0x4d, 0x2a, 0x26, 0x26, 0x26, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x62, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x39, 0x39, 0x53, 0x6f, 0x6f, 0x3f, 0x7c, 0x27, 0x60, 0x2a, 0x3f, 0x23, 0x23, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x23, 0x6f, 0x64, 0x23, 0x62, 0x6f, 0x6f, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x36, 0x37, 0x48, 0x4d, 0x4d, 0x48, 0x26, 0x24, 0x52, 0x2a, 0x2a, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2f, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x60, 0x39, 0x4d, 0x4d, 0x27, 0x48, 0x4c, 0x0a, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x5c, 0x4d, 0x4d, 0x2a, 0x27, 0x27, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x5b, 0x20, 0x60, 0x39, 0x7c, 0x0a, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x23, 0x23, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x46, 0x2e, 0x20, 0x3a, 0x3f, 0x0a, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x22, 0x2a, 0x22, 0x27, 0x22, 0x60, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x20, 0x6b, 0x0a, 0x4d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x48, 0x0a, 0x4d, 0x4d, 0x48, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x0a, 0x26, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x60, 0x4d, 0x4d, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x2e, 0x6f, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x39, 0x4d, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x20, 0x20, 0x64, 0x48, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x48, 0x69, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x20, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x54, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2e, 0x2e, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2e, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x2e, 0x20, 0x2f, 0x2f, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x4d, 0x23, 0x62, 0x7e, 0x22, 0x22, 0x0a, 0x1b, 0x5b, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x6f, 0x6f, 0x71, 0x3d, 0x22, 0x22, 0x27, 0x27, 0x24, 0x62, 0x24, 0x5f, 0x26, 0x3f, 0x62, 0x5c, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x5e, 0x22, 0x20, 0x20, 0x22, 0x27, 0x6f, 0x20, 0x7c, 0x26, 0x4d, 0x3a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x5f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x24, 0x4d, 0x62, 0x23, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x6f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x6f, 0x6f, 0x48, 0x50, 0x2a, 0x26, 0x52, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x3f, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x52, 0x62, 0x6f, 0x64, 0x3f, 0x7c, 0x27, 0x60, 0x2b, 0x3f, 0x23, 0x23, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x5c, 0x0a, 0x20, 0x20, 0x2e, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x23, 0x6f, 0x64, 0x23, 0x23, 0x6f, 0x62, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x20, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x48, 0x4d, 0x4d, 0x48, 0x24, 0x5a, 0x50, 0x2a, 0x48, 0x4d, 0x4d, 0x62, 0x0a, 0x20, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x7c, 0x39, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x22, 0x4d, 0x36, 0x5c, 0x0a, 0x2e, 0x2d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x5d, 0x4d, 0x2a, 0x27, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x52, 0x20, 0x7c, 0x0a, 0x31, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x23, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x2c, 0x3a, 0x0a, 0x4d, 0x48, 0x2c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x60, 0x2a, 0x22, 0x22, 0x27, 0x22, 0x2a, 0x23, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x60, 0x0a, 0x4d, 0x4d, 0x36, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x26, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x0a, 0x21, 0x4d, 0x4d, 0x4d, 0x4d, 0x62, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x48, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x2b, 0x2e, 0x3f, 0x26, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x54, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x20, 0x20, 0x64, 0x48, 0x27, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x39, 0x4d, 0x4d, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x50, 0x27, 0x20, 0x20, 0x22, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x39, 0x4d, 0x4c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x4d, 0x4d, 0x4d, 0x23, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x60, 0x48, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x5c, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2d, 0x5c, 0x20, 0x20, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x20, 0x2e, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2e, 0x2d, 0x60, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x27, 0x2d, 0x5c, 0x2e, 0x20, 0x2c, 0x62, 0x23, 0x23, 0x23, 0x23, 0x23, 0x70, 0x26, 0x2a, 0x2a, 0x5e, 0x60, 0x0a -}; - - -#endif /* vtanimations_h */ diff --git a/examples/SSD1306_OLED/128x32/CollisionDetection/CollisionDetection.ino b/examples/SSD1306_OLED/128x32/CollisionDetection/CollisionDetection.ino deleted file mode 100644 index 9586f0ff6..000000000 --- a/examples/SSD1306_OLED/128x32/CollisionDetection/CollisionDetection.ino +++ /dev/null @@ -1,198 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - /* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - -#include "fabgl.h" - -#include "bitmaps.h" - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; - - - -#define SPACESHIP_COUNT 2 -#define ASTEROID_COUNT 2 - -#define OBJECTS_COUNT (SPACESHIP_COUNT + ASTEROID_COUNT) - - -struct MySprite : Sprite { - int velX; - int velY; - bool isAlive; - bool isAsteroid; -}; - - -struct MyScene : public Scene { - - MySprite objects_[OBJECTS_COUNT]; - - MyScene() - : Scene(OBJECTS_COUNT, 20, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()) - { - } - - void startSprite(MySprite * sprite) - { - // set initial position to one of the four sides of the screen - int q = random(4); // select beginning screen side - int x = (q == 0 ? random(getWidth()) : (q == 1 ? getWidth() - sprite->getWidth() : (q == 2 ? random(getWidth()) : 0))); - int y = (q == 0 ? 0 : (q == 1 ? random(getHeight()) : (q == 2 ? getHeight() - sprite->getHeight() : random(getHeight())))); - sprite->moveTo(x, y); - sprite->visible = true; - sprite->velX = - sprite->getWidth() / 4 + random(sprite->getWidth() / 2); - sprite->velY = - sprite->getHeight() / 4 + random(sprite->getHeight() / 2); - sprite->isAlive = true; - } - - void init() - { - paintSpace(); - - // setup spaceship and asteroid sprites - for (int i = 0; i < OBJECTS_COUNT; ++i) { - MySprite * sprite = &objects_[i]; - if (i <= SPACESHIP_COUNT) { - // each spaceship sprite of type Ship has 9 bitmaps: one "spaceship" bitmap and eight "explosion[]" bitmaps - sprite->addBitmap(&spaceship)->addBitmap(explosion, 8); - sprite->isAsteroid = false; - addSprite(sprite); // add sprite to collision detector - startSprite(sprite); - } else { - // each spaceship sprite of type Asteroid has just one bitmap: "asteroid" - sprite->addBitmap(&asteroid); - sprite->isAsteroid = true; - addSprite(sprite); // add sprite to collision detector - startSprite(sprite); - } - } - - DisplayController.setSprites(objects_, OBJECTS_COUNT); - } - - void update(int updateCount) - { - for (int i = 1; i < OBJECTS_COUNT; ++i) { - - MySprite * sprite = &objects_[i]; - - // just alive objects can be moved or checked for collisions - if (sprite->isAlive) { - - // this object is alive, move to the next position - sprite->moveBy(sprite->velX, sprite->velY, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()); - - // update the collision detector and check for a possible collision - updateSpriteAndDetectCollisions(sprite); - - } else if ((updateCount % 8) == 0) { - - // this sprite is dead, go to next frame (animate explosion) every 8 updates - sprite->nextFrame(); - if (sprite->currentFrame == 0) - startSprite(sprite); // explosion animation ended, live again - - } - } - - DisplayController.refreshSprites(); - } - - void collisionDetected(Sprite * spriteA, Sprite * spriteB, Point collisionPoint) - { - MySprite * a = (MySprite*) spriteA; - MySprite * b = (MySprite*) spriteB; - // two asteroids cannot colide - if (a->isAsteroid && b->isAsteroid) - return; - // collision ok, mark both objects as dead - a->isAlive = b->isAlive = false; - // if collided object is an asteroid no explosion is shown, just hide it. Otherwise go to next frame. - if (a->isAsteroid) - a->visible = false; - else - a->nextFrame(); - if (b->isAsteroid) - b->visible = false; - else - b->nextFrame(); - } - - void paintSpace() - { - Canvas cv(&DisplayController); - cv.setBrushColor(Color::Black); - cv.clear(); - cv.setPenColor(Color::White); - cv.setBrushColor(Color::White); - // stars - cv.setPenColor(255, 255, 255); - for (int i = 0; i < 50; ++i) - cv.setPixel(random(getWidth()), random(getHeight())); - // galaxy - cv.drawBitmap(5, 5, &galaxy); - cv.drawBitmap(90, 16, &galaxy); - } - -}; - - -void setup() -{ - // just for debug - Serial.begin(115200); - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR); - DisplayController.setResolution(OLED_128x32); - - while (DisplayController.available() == false) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } -} - - -void loop() -{ - MyScene scene; - scene.start(); - vTaskSuspend(nullptr); -} diff --git a/examples/SSD1306_OLED/128x32/CollisionDetection/bitmaps.h b/examples/SSD1306_OLED/128x32/CollisionDetection/bitmaps.h deleted file mode 100644 index b05b467c7..000000000 --- a/examples/SSD1306_OLED/128x32/CollisionDetection/bitmaps.h +++ /dev/null @@ -1,232 +0,0 @@ -const uint8_t spaceship_data[] = { - 0x00, 0x00, 0xd5, 0xd5, 0xd9, 0xd9, 0xd9, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xea, 0xc0, 0x00, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd9, 0xd5, 0x00, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0x00, 0xd4, 0xe9, 0xe9, 0xea, 0xea, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe9, 0xe9, 0xc0, 0xe9, 0xc0, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0xea, 0xea, 0xc0, 0xea, 0xc0, 0xea, 0xea, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd9, 0xd9, 0xd9, 0xc0, 0xd9, 0xc0, 0xd9, 0xd9, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd5, 0xd5, 0xc0, 0xd5, 0xc0, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd4, 0xd9, 0xd9, 0xe9, 0xe9, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd5, 0xd5, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe9, 0xc0, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap spaceship = Bitmap(16, 16, &spaceship_data[0], PixelFormat::RGBA2222); - -const uint8_t expl1_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xeb, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xeb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xff, 0xff, 0xdb, 0xeb, 0xeb, 0xdb, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xdb, 0xdb, 0xdb, 0xdb, 0xc7, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xeb, 0xdb, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl1 = Bitmap(16, 16, &expl1_data[0], PixelFormat::RGBA2222); - -const uint8_t expl2_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xdb, 0xff, 0xff, 0xc7, 0xdb, 0xdb, 0xc7, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0xdb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xeb, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xeb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xeb, 0xeb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc6, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdb, 0xdb, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xeb, 0xdb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xdb, 0xc7, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xc7, 0xc7, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xdb, 0xc7, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xeb, 0xdb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xff, 0xeb, 0xeb, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xdb, 0xeb, 0xdb, 0xdb, 0xc7, 0xdb, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc7, 0xc7, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl2 = Bitmap(16, 16, &expl2_data[0], PixelFormat::RGBA2222); - -const uint8_t expl3_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xeb, 0xdb, 0xdb, 0xeb, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xdb, 0xeb, 0xff, 0xeb, 0xeb, 0xff, 0xdb, 0xeb, 0xdb, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xeb, 0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xeb, 0xdb, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xdb, 0xc7, 0xc7, 0x00, - 0x00, 0xc1, 0xeb, 0xc7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdb, 0xeb, 0xdb, 0xc2, 0xc6, 0x00, - 0x00, 0xc2, 0xc7, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xc7, 0xc7, 0xdb, 0xc7, 0xc6, 0xc1, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xeb, 0xdb, 0xeb, 0xeb, 0xc7, 0xc6, 0xc6, 0xc2, 0x00, - 0x00, 0x00, 0xc6, 0xff, 0xff, 0xeb, 0xff, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xdb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xdb, 0xeb, 0xeb, 0xff, 0xeb, 0xeb, 0xdb, 0xeb, 0xeb, 0xc2, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xeb, 0xdb, 0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xc2, 0xc6, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xeb, 0xc7, 0xdb, 0xc7, 0xc7, 0xdb, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc7, 0xdb, 0xeb, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc7, 0xc7, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl3 = Bitmap(16, 16, &expl3_data[0], PixelFormat::RGBA2222); - -const uint8_t expl4_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xcb, 0xcb, 0xc7, 0x00, 0xc2, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xcb, 0xc7, 0xdb, 0xc7, 0xcb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc6, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xc6, 0xcb, 0xc7, 0xcb, 0xcb, 0xdb, 0xc6, 0x00, - 0x00, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xc7, 0x00, - 0x00, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xc7, 0xdb, 0xc6, 0xc2, - 0x00, 0xc6, 0xc7, 0xcb, 0xcb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xc7, 0xcb, 0xcb, 0xc7, - 0x00, 0xc7, 0xc7, 0xcb, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xcb, 0xc6, 0xcb, 0xcb, 0xcb, - 0xc7, 0xdb, 0xc7, 0xc7, 0xc7, 0xc7, 0xdb, 0xdb, 0xdb, 0xc7, 0xcb, 0xc7, 0xcb, 0xcb, 0xcb, 0xc7, - 0xc7, 0xdb, 0xc7, 0xc7, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc7, 0xc7, 0xc6, - 0xc7, 0xdb, 0xc7, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xcb, 0xc7, 0xcb, 0xcb, 0xcb, 0xcb, 0xc7, 0xc2, - 0x00, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc7, 0x00, - 0x00, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xcb, 0xc6, 0xc7, 0x00, - 0x00, 0x00, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc7, 0xc6, 0xc2, - 0x00, 0x00, 0xc6, 0xc6, 0xcb, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xc7, 0xc7, 0xc7, 0xc2, 0xc2, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0xc7, 0xc6, 0xc2, 0xc2, 0xc7, 0xc7, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl4 = Bitmap(16, 16, &expl4_data[0], PixelFormat::RGBA2222); - -const uint8_t expl5_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0xc7, 0xc7, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xc2, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0xc2, 0xc7, 0xc2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0x00, 0x00, - 0xc2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc2, 0x00, 0x00, - 0x00, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc1, 0x00, - 0x00, 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0x00, 0x00, - 0x00, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc2, 0x00, - 0x00, 0xc7, 0xc7, 0xc7, 0xc7, 0xc2, 0xc2, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0xc2, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc2, 0xc2, 0xc6, 0xc7, 0xc6, 0xc1, 0x00, 0x00, - 0xc1, 0xc1, 0xc6, 0xc2, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc2, 0xc7, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xc7, 0xc7, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc2, 0xc1, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc6, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xc1, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl5 = Bitmap(16, 16, &expl5_data[0], PixelFormat::RGBA2222); - -const uint8_t expl6_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc6, 0xc6, 0xc2, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc6, 0xc1, 0xc2, 0x00, 0xc1, 0xc1, 0x00, - 0x00, 0xc2, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc1, 0x00, 0xc1, 0x00, - 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc1, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc2, 0xc1, 0xc1, 0x00, - 0x00, 0xc2, 0xc6, 0xc2, 0xc6, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc1, 0x00, 0x00, - 0x00, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc6, 0x00, 0xc1, 0x00, - 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc6, 0xc6, 0xc1, 0xc6, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0xc1, 0x00, 0x00, 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, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl6 = Bitmap(16, 16, &expl6_data[0], PixelFormat::RGBA2222); - -const uint8_t expl7_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc1, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0xc2, 0xc2, 0xc1, 0x00, - 0x00, 0x00, 0xc2, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc1, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, - 0x00, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl7 = Bitmap(16, 16, &expl7_data[0], PixelFormat::RGBA2222); - -const uint8_t expl8_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 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, -}; -Bitmap expl8 = Bitmap(16, 16, &expl8_data[0], PixelFormat::RGBA2222); - -Bitmap * explosion[] = { &expl1, &expl2, &expl3, &expl4, &expl5, &expl6, &expl7, &expl8 }; - - -const uint8_t galaxy_data[] = { - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0xea, 0xd5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0xea, 0xff, 0xff, 0xc0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xea, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0xea, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xc0, 0x3f, 0xd5, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xd5, 0xff, 0xea, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc0, 0xff, 0xea, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xea, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xea, 0xff, 0xea, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, -}; -Bitmap galaxy = Bitmap(32, 32, &galaxy_data[0], PixelFormat::RGBA2222); - -const uint8_t asteroid_data[] = { - 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0x95, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd5, 0xd5, 0xd5, 0xc0, 0x6a, 0x3f, - 0x3f, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xd5, 0x3f, - 0xea, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, - 0xea, 0xd5, 0xea, 0xd5, 0xd5, 0xc0, 0xd5, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd5, 0xd5, 0x3f, - 0x3f, 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd5, 0x3f, - 0x3f, 0x3f, 0xea, 0xea, 0xea, 0x3f, 0x3f, 0x3f, -}; -Bitmap asteroid = Bitmap(8, 8, &asteroid_data[0], PixelFormat::RGBA2222); - - diff --git a/examples/SSD1306_OLED/128x32/SimpleTerminalOut/SimpleTerminalOut.ino b/examples/SSD1306_OLED/128x32/SimpleTerminalOut/SimpleTerminalOut.ino deleted file mode 100644 index d02a6de7a..000000000 --- a/examples/SSD1306_OLED/128x32/SimpleTerminalOut/SimpleTerminalOut.ino +++ /dev/null @@ -1,171 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - - /* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - - -#include "fabgl.h" - - - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; -fabgl::Terminal Terminal; - - - - -void slowPrintf(const char * format, ...) -{ - va_list ap; - va_start(ap, format); - int size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - for (int i = 0; i < size; ++i) { - Terminal.write(buf[i]); - delay(45); - } - } - va_end(ap); -} - - -void demo1() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - Terminal.write("\e[2J"); // clear screen - Terminal.write("\e[1;1H"); // move cursor to 1,1 - slowPrintf("\e[1mWELCOME TO FabGL\e[0m\r\n"); - slowPrintf("www.fabgl.com\r\n"); - slowPrintf("================\r\n\n"); - slowPrintf("This is a Display Controller, PS2 Mouse and Keyboard Controller, Graphics Library, Game Engine and ANSI/VT Terminal for the ESP32\r\n\n"); - slowPrintf("Current settings\r\n"); - slowPrintf("Screen Size:\r\n \e[1m%d x %d\e[0m\r\n", DisplayController.getScreenWidth(), DisplayController.getScreenHeight()); - slowPrintf("Terminal Size:\r\n \e[1m%d x %d\e[0m\r\n", Terminal.getColumns(), Terminal.getRows()); - slowPrintf("Free Memory:\r\n \e[1m%d bytes\e[0m\r\n\n", heap_caps_get_free_size(MALLOC_CAP_8BIT)); -} - -void demo3() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nSupported styles:\r\n"); - slowPrintf("\e[0mNormal\r\n"); - slowPrintf("\e[1mBold\e[0m\r\n"); - slowPrintf("\e[3mItalic\e[0m\r\n"); - slowPrintf("\e[4mUnderlined\e[0m\r\n"); - slowPrintf("\e[5mBlink\e[0m\r\n"); - slowPrintf("\e[7mInverse\e[0m\r\n"); - slowPrintf("\e[1;3mBoldItalic\e[0m\r\n"); - slowPrintf("\e#6Double W.\r\n"); - slowPrintf("\e#6\e#3Double H.\r\n"); // top half - slowPrintf("\e#6\e#4Double H.\r\n"); // bottom half -} - -void demo4() -{ - Canvas cv(&DisplayController); - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nMixed text and graphics:\r\n"); - slowPrintf("Points...\r\n"); - for (int i = 0; i < 100; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.setPixel(random(cv.getWidth()), random(cv.getHeight())); - delay(15); - } - delay(500); - slowPrintf("\e[40;32mLines...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawLine(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mRectangles...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawRectangle(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mEllipses...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawEllipse(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - for (int i = 0; i < 30; ++i) { - Terminal.write("\e[40;32mScrolling...\r\n"); - delay(250); - } - cv.clear(); -} - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR); - DisplayController.setResolution(OLED_128x32); - - while (DisplayController.available() == false) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } - - Terminal.begin(&DisplayController); - Terminal.setLogStream(Serial); // DEBUG ONLY - Terminal.loadFont(&fabgl::FONT_6x8); - Terminal.enableCursor(true); -} - - -void loop() -{ - delay(1000); - demo1(); - delay(4000); - demo3(); - delay(4000); - demo4(); -} diff --git a/examples/SSD1306_OLED/128x64/CollisionDetection/CollisionDetection.ino b/examples/SSD1306_OLED/128x64/CollisionDetection/CollisionDetection.ino deleted file mode 100644 index 94ef2c9ef..000000000 --- a/examples/SSD1306_OLED/128x64/CollisionDetection/CollisionDetection.ino +++ /dev/null @@ -1,211 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - -/* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - - -#include "fabgl.h" - -#include "bitmaps.h" - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; - - - -#define SPACESHIP_COUNT 4 -#define ASTEROID_COUNT 2 - -#define OBJECTS_COUNT (SPACESHIP_COUNT + ASTEROID_COUNT + 1) // +1 = is for jupiter! - - -struct MySprite : Sprite { - int velX; - int velY; - bool isAlive; - bool isAsteroid; -}; - - -struct MyScene : public Scene { - - MySprite objects_[OBJECTS_COUNT]; - - MyScene() - : Scene(OBJECTS_COUNT, 20, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()) - { - } - - void startSprite(MySprite * sprite) - { - // set initial position to one of the four sides of the screen - int q = random(4); // select beginning screen side - int x = (q == 0 ? random(getWidth()) : (q == 1 ? getWidth() - sprite->getWidth() : (q == 2 ? random(getWidth()) : 0))); - int y = (q == 0 ? 0 : (q == 1 ? random(getHeight()) : (q == 2 ? getHeight() - sprite->getHeight() : random(getHeight())))); - sprite->moveTo(x, y); - sprite->visible = true; - sprite->velX = - sprite->getWidth() / 4 + random(sprite->getWidth() / 2); - sprite->velY = - sprite->getHeight() / 4 + random(sprite->getHeight() / 2); - sprite->isAlive = true; - } - - void init() - { - paintSpace(); - - // setup spaceship and asteroid sprites - for (int i = 0; i < OBJECTS_COUNT; ++i) { - MySprite * sprite = &objects_[i]; - if (i == 0) { - // setup Jupiter sprite - sprite->addBitmap(&jupiter); - sprite->moveTo(0, getHeight() / 2); - } else if (i <= SPACESHIP_COUNT) { - // each spaceship sprite of type Ship has 9 bitmaps: one "spaceship" bitmap and eight "explosion[]" bitmaps - sprite->addBitmap(&spaceship)->addBitmap(explosion, 8); - sprite->isAsteroid = false; - addSprite(sprite); // add sprite to collision detector - startSprite(sprite); - } else { - // each spaceship sprite of type Asteroid has just one bitmap: "asteroid" - sprite->addBitmap(&asteroid); - sprite->isAsteroid = true; - addSprite(sprite); // add sprite to collision detector - startSprite(sprite); - } - } - - DisplayController.setSprites(objects_, OBJECTS_COUNT); - } - - void update(int updateCount) - { - for (int i = 1; i < OBJECTS_COUNT; ++i) { - - MySprite * sprite = &objects_[i]; - - // just alive objects can be moved or checked for collisions - if (sprite->isAlive) { - - // this object is alive, move to the next position - sprite->moveBy(sprite->velX, sprite->velY, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()); - - // update the collision detector and check for a possible collision - updateSpriteAndDetectCollisions(sprite); - - } else if ((updateCount % 8) == 0) { - - // this sprite is dead, go to next frame (animate explosion) every 8 updates - sprite->nextFrame(); - if (sprite->currentFrame == 0) - startSprite(sprite); // explosion animation ended, live again - - } - } - - // move Jupiter every 20 updates - if ((updateCount % 20) == 0) - objects_[0].moveBy(1, 0, DisplayController.getViewPortWidth(), DisplayController.getViewPortHeight()); - - DisplayController.refreshSprites(); - } - - void collisionDetected(Sprite * spriteA, Sprite * spriteB, Point collisionPoint) - { - MySprite * a = (MySprite*) spriteA; - MySprite * b = (MySprite*) spriteB; - // two asteroids cannot colide - if (a->isAsteroid && b->isAsteroid) - return; - // collision ok, mark both objects as dead - a->isAlive = b->isAlive = false; - // if collided object is an asteroid no explosion is shown, just hide it. Otherwise go to next frame. - if (a->isAsteroid) - a->visible = false; - else - a->nextFrame(); - if (b->isAsteroid) - b->visible = false; - else - b->nextFrame(); - } - - void paintSpace() - { - Canvas cv(&DisplayController); - cv.setBrushColor(Color::Black); - cv.clear(); - cv.setPenColor(Color::White); - cv.setBrushColor(Color::White); - // stars - cv.setPenColor(255, 255, 255); - for (int i = 0; i < 50; ++i) - cv.setPixel(random(getWidth()), random(getHeight())); - // galaxy - cv.drawBitmap(5, 5, &galaxy); - cv.drawBitmap(90, 35, &galaxy); - } - -}; - - -void setup() -{ - // just for debug - Serial.begin(115200); - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64); - - while (DisplayController.available() == false) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } -} - - -void loop() -{ - MyScene scene; - scene.start(); - vTaskSuspend(nullptr); -} diff --git a/examples/SSD1306_OLED/128x64/CollisionDetection/bitmaps.h b/examples/SSD1306_OLED/128x64/CollisionDetection/bitmaps.h deleted file mode 100644 index ec338a740..000000000 --- a/examples/SSD1306_OLED/128x64/CollisionDetection/bitmaps.h +++ /dev/null @@ -1,283 +0,0 @@ -const uint8_t spaceship_data[] = { - 0x00, 0x00, 0xd5, 0xd5, 0xd9, 0xd9, 0xd9, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xea, 0xc0, 0x00, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd9, 0xd5, 0x00, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0x00, 0xd4, 0xe9, 0xe9, 0xea, 0xea, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe9, 0xe9, 0xc0, 0xe9, 0xc0, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0xea, 0xea, 0xc0, 0xea, 0xc0, 0xea, 0xea, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd9, 0xd9, 0xd9, 0xc0, 0xd9, 0xc0, 0xd9, 0xd9, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd5, 0xd5, 0xc0, 0xd5, 0xc0, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd4, 0xd9, 0xd9, 0xe9, 0xe9, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd5, 0xd5, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe9, 0xc0, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap spaceship = Bitmap(16, 16, &spaceship_data[0], PixelFormat::RGBA2222); - -const uint8_t expl1_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xeb, 0xff, 0xff, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xeb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xff, 0xff, 0xdb, 0xeb, 0xeb, 0xdb, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xdb, 0xdb, 0xdb, 0xdb, 0xc7, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xeb, 0xdb, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl1 = Bitmap(16, 16, &expl1_data[0], PixelFormat::RGBA2222); - -const uint8_t expl2_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xdb, 0xff, 0xff, 0xc7, 0xdb, 0xdb, 0xc7, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0xdb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xeb, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xeb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xeb, 0xeb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xc6, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdb, 0xdb, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xeb, 0xdb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xdb, 0xc7, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xc7, 0xc7, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xdb, 0xc7, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xeb, 0xdb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xff, 0xeb, 0xeb, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc6, 0xdb, 0xeb, 0xdb, 0xdb, 0xc7, 0xdb, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc7, 0xc7, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl2 = Bitmap(16, 16, &expl2_data[0], PixelFormat::RGBA2222); - -const uint8_t expl3_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xdb, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc7, 0xeb, 0xdb, 0xdb, 0xeb, 0xeb, 0xeb, 0xdb, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xdb, 0xeb, 0xff, 0xeb, 0xeb, 0xff, 0xdb, 0xeb, 0xdb, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xeb, 0xeb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xeb, 0xdb, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xeb, 0xdb, 0xc7, 0xc7, 0x00, - 0x00, 0xc1, 0xeb, 0xc7, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xdb, 0xeb, 0xdb, 0xc2, 0xc6, 0x00, - 0x00, 0xc2, 0xc7, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xeb, 0xc7, 0xc7, 0xdb, 0xc7, 0xc6, 0xc1, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xeb, 0xdb, 0xeb, 0xeb, 0xc7, 0xc6, 0xc6, 0xc2, 0x00, - 0x00, 0x00, 0xc6, 0xff, 0xff, 0xeb, 0xff, 0xeb, 0xeb, 0xff, 0xff, 0xff, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xeb, 0xdb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xdb, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xdb, 0xeb, 0xeb, 0xff, 0xeb, 0xeb, 0xdb, 0xeb, 0xeb, 0xc2, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xeb, 0xdb, 0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xc2, 0xc6, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xeb, 0xc7, 0xdb, 0xc7, 0xc7, 0xdb, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc7, 0xdb, 0xeb, 0xdb, 0xdb, 0xc7, 0xc2, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc7, 0xc7, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl3 = Bitmap(16, 16, &expl3_data[0], PixelFormat::RGBA2222); - -const uint8_t expl4_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xcb, 0xcb, 0xc7, 0x00, 0xc2, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc7, 0xcb, 0xc7, 0xdb, 0xc7, 0xcb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc6, 0x00, 0x00, - 0x00, 0x00, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xc6, 0xcb, 0xc7, 0xcb, 0xcb, 0xdb, 0xc6, 0x00, - 0x00, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xc7, 0x00, - 0x00, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xc7, 0xdb, 0xc6, 0xc2, - 0x00, 0xc6, 0xc7, 0xcb, 0xcb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xc7, 0xcb, 0xcb, 0xc7, - 0x00, 0xc7, 0xc7, 0xcb, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xcb, 0xc6, 0xcb, 0xcb, 0xcb, - 0xc7, 0xdb, 0xc7, 0xc7, 0xc7, 0xc7, 0xdb, 0xdb, 0xdb, 0xc7, 0xcb, 0xc7, 0xcb, 0xcb, 0xcb, 0xc7, - 0xc7, 0xdb, 0xc7, 0xc7, 0xc7, 0xc7, 0xcb, 0xdb, 0xdb, 0xcb, 0xcb, 0xcb, 0xcb, 0xc7, 0xc7, 0xc6, - 0xc7, 0xdb, 0xc7, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xcb, 0xc7, 0xcb, 0xcb, 0xcb, 0xcb, 0xc7, 0xc2, - 0x00, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xdb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc7, 0x00, - 0x00, 0xc7, 0xdb, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xcb, 0xc6, 0xc7, 0x00, - 0x00, 0x00, 0xdb, 0xdb, 0xcb, 0xdb, 0xdb, 0xcb, 0xcb, 0xc7, 0xc7, 0xcb, 0xc6, 0xc7, 0xc6, 0xc2, - 0x00, 0x00, 0xc6, 0xc6, 0xcb, 0xdb, 0xdb, 0xcb, 0xc7, 0xcb, 0xc7, 0xc7, 0xc7, 0xc2, 0xc2, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0xc7, 0xc6, 0xc2, 0xc2, 0xc7, 0xc7, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl4 = Bitmap(16, 16, &expl4_data[0], PixelFormat::RGBA2222); - -const uint8_t expl5_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0xc7, 0xc7, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xc2, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0x00, 0x00, 0x00, - 0x00, 0xc2, 0xc7, 0xc2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0x00, 0x00, - 0xc2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc2, 0x00, 0x00, - 0x00, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc1, 0x00, - 0x00, 0xc7, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc6, 0x00, 0x00, - 0x00, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc7, 0xc7, 0xc2, 0x00, - 0x00, 0xc7, 0xc7, 0xc7, 0xc7, 0xc2, 0xc2, 0xc6, 0xc7, 0xc7, 0xc6, 0xc6, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0xc2, 0xc6, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc2, 0xc2, 0xc6, 0xc7, 0xc6, 0xc1, 0x00, 0x00, - 0xc1, 0xc1, 0xc6, 0xc2, 0xc7, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc2, 0xc7, 0xc7, 0xc2, 0x00, 0x00, - 0x00, 0x00, 0xc7, 0xc7, 0xc6, 0xc7, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc2, 0xc1, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc6, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xc1, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl5 = Bitmap(16, 16, &expl5_data[0], PixelFormat::RGBA2222); - -const uint8_t expl6_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xc6, 0xc6, 0xc2, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc6, 0xc1, 0xc2, 0x00, 0xc1, 0xc1, 0x00, - 0x00, 0xc2, 0xc6, 0xc6, 0xc6, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc1, 0x00, 0xc1, 0x00, - 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc1, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc2, 0xc1, 0xc1, 0x00, - 0x00, 0xc2, 0xc6, 0xc2, 0xc6, 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc1, 0x00, 0x00, - 0x00, 0xc2, 0xc2, 0xc1, 0xc1, 0xc2, 0xc1, 0xc1, 0xc2, 0xc2, 0xc1, 0xc2, 0xc6, 0x00, 0xc1, 0x00, - 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0xc1, 0xc6, 0xc6, 0xc1, 0xc6, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0xc2, 0xc1, 0xc2, 0xc2, 0xc1, 0xc1, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc6, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0xc1, 0x00, 0x00, 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, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl6 = Bitmap(16, 16, &expl6_data[0], PixelFormat::RGBA2222); - -const uint8_t expl7_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc2, 0xc1, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xc1, 0xc1, 0xc1, 0x00, 0x00, 0xc2, 0xc2, 0xc1, 0x00, - 0x00, 0x00, 0xc2, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc1, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, - 0x00, 0xc2, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap expl7 = Bitmap(16, 16, &expl7_data[0], PixelFormat::RGBA2222); - -const uint8_t expl8_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 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, -}; -Bitmap expl8 = Bitmap(16, 16, &expl8_data[0], PixelFormat::RGBA2222); - -Bitmap * explosion[] = { &expl1, &expl2, &expl3, &expl4, &expl5, &expl6, &expl7, &expl8 }; - -const uint8_t jupiter_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 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, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc5, 0xd5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xc6, 0xc5, 0x80, 0x80, 0x80, 0x80, 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, 0x80, 0x80, 0x80, 0xd5, 0xea, 0xd6, 0xd5, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc1, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x40, 0x80, 0x80, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd5, 0x80, 0x80, 0x40, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xc5, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x80, 0x80, 0xd5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xea, 0xd6, 0xd6, 0xd6, 0xd6, 0xc1, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xc5, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xd6, 0xd6, 0xd6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xd5, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xc5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc5, 0xea, 0xc5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0x80, 0x80, 0xc5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xd5, 0xd6, 0xda, 0xea, 0x80, 0x80, 0xc5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xea, 0xea, 0xda, 0xd6, 0xd6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xd5, 0x80, 0x80, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xea, 0xea, 0xd6, 0xd6, 0xda, 0xc0, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xea, 0xea, 0x80, 0x80, 0x80, 0x80, 0x80, 0xea, 0xea, 0xd5, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0xd6, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xaa, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xea, 0xea, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc6, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x80, 0xc5, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xda, 0xea, 0xd6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc6, 0x80, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xc5, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xea, 0xd6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc6, 0xc6, 0xc5, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xea, 0xea, 0xc1, 0xc1, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xea, 0xea, 0xd5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xda, 0xea, 0xc5, 0xc5, 0xc5, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xd5, 0x96, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x40, 0x80, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x40, 0x80, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0x96, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x80, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0x96, 0xd6, 0xda, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc5, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x80, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0xd6, 0xd6, 0xd6, 0xda, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc5, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xaa, 0x96, 0x80, 0xaa, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xea, 0xea, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xd6, 0xd6, 0xc6, 0xd6, 0xd6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xea, 0xea, 0xc5, 0xc5, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x80, 0xc0, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xd6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xda, 0xea, 0xd6, 0xd6, 0xd6, 0x80, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xea, 0xea, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x40, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0xc5, 0xc0, 0x80, 0x80, 0xc0, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x80, 0xda, 0xea, 0xea, 0xea, 0xda, 0xda, 0xea, 0xea, 0xea, 0xea, 0x96, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc5, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0xd5, 0xea, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xea, 0xea, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0x80, 0xd5, 0xd5, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x80, 0xda, 0x96, 0x80, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc5, 0x80, 0xd5, 0xd5, 0x80, 0x80, 0x80, 0x80, 0xc1, 0xc2, 0xc2, 0xc1, 0x80, 0x80, 0x80, 0x80, 0xda, 0xd5, 0x80, 0xc6, 0xc6, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xd6, 0xea, 0xda, 0xc5, 0xc5, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc2, 0xc0, 0x80, 0x80, 0xd6, 0xd6, 0xda, 0xd5, 0x80, 0x80, 0x80, 0x80, 0xd5, 0xda, 0xea, 0xda, 0x80, 0x80, 0xc0, 0xc6, 0xc6, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc0, 0x80, 0x80, 0x80, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xda, 0x80, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc1, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0xc0, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc1, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc5, 0xc5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xc5, 0xc5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x80, 0x80, 0xc5, 0xc6, 0xc6, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xc6, 0xc5, 0x80, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xda, 0xda, 0xda, 0xda, 0xd6, 0x80, 0xc1, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc5, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xaa, 0xaa, 0x80, 0x80, 0x80, 0xc1, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc5, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xda, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0x80, 0xc6, 0xc6, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xd5, 0x96, 0x96, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xea, 0xea, 0xea, 0xda, 0xd5, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc5, 0xc6, 0xc6, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0x80, 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, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xea, 0xea, 0xc6, 0x80, 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, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc1, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5, 0x80, 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, 0x40, 0x80, 0x80, 0x80, 0xc0, 0xc1, 0xc1, 0xc1, 0x80, 0x80, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap jupiter = Bitmap(64, 48, &jupiter_data[0], PixelFormat::RGBA2222); - -const uint8_t galaxy_data[] = { - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0xea, 0xd5, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0xea, 0xff, 0xff, 0xc0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xea, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0xea, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0xc0, 0x3f, 0xd5, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xd5, 0xff, 0xea, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xc0, 0xff, 0xea, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc0, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xea, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xea, 0xff, 0xea, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, -}; -Bitmap galaxy = Bitmap(32, 32, &galaxy_data[0], PixelFormat::RGBA2222); - -const uint8_t asteroid_data[] = { - 0x3f, 0x3f, 0x3f, 0x3f, 0xd5, 0x95, 0x3f, 0x3f, - 0x3f, 0x3f, 0xd5, 0xd5, 0xd5, 0xc0, 0x6a, 0x3f, - 0x3f, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xd5, 0x3f, - 0xea, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, - 0xea, 0xd5, 0xea, 0xd5, 0xd5, 0xc0, 0xd5, 0x3f, - 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd5, 0xd5, 0x3f, - 0x3f, 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd5, 0x3f, - 0x3f, 0x3f, 0xea, 0xea, 0xea, 0x3f, 0x3f, 0x3f, -}; -Bitmap asteroid = Bitmap(8, 8, &asteroid_data[0], PixelFormat::RGBA2222); - - diff --git a/examples/SSD1306_OLED/128x64/DoubleBuffer/DoubleBuffer.ino b/examples/SSD1306_OLED/128x64/DoubleBuffer/DoubleBuffer.ino deleted file mode 100644 index 3b95cb503..000000000 --- a/examples/SSD1306_OLED/128x64/DoubleBuffer/DoubleBuffer.ino +++ /dev/null @@ -1,90 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - -#include "fabgl.h" - - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; - - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64, 128, 64, true); - - while (!DisplayController.available()) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } - -} - - -void loop() -{ - Canvas cv(&DisplayController); - - for (int j = 1; j < 32; ++j) { - cv.setPenWidth(j); - for (int i = 0; i < 360; i += 10) { - cv.clear(); - double a = (double) i * M_PI / 180.0; - double w = cv.getWidth() / 2.0; - double h = cv.getHeight() / 2.0; - int x1 = w + cos(a) * w; - int y1 = h + sin(a) * h; - int x2 = w + cos(a + M_PI) * w; - int y2 = h + sin(a + M_PI) * h; - cv.drawLine(x1, y1, x2, y2); - cv.swapBuffers(); - delay(60); - } - } - - -} diff --git a/examples/SSD1306_OLED/128x64/NetworkTerminal/NetworkTerminal.ino b/examples/SSD1306_OLED/128x64/NetworkTerminal/NetworkTerminal.ino deleted file mode 100644 index d3fbb1c8e..000000000 --- a/examples/SSD1306_OLED/128x64/NetworkTerminal/NetworkTerminal.ino +++ /dev/null @@ -1,418 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - /* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - - -#include "fabgl.h" - -#include - -#include "network/ICMP.h" - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - - - -char const * AUTOEXEC = "info\r"; - - -enum class State { Prompt, PromptInput, UnknownCommand, Help, Info, Wifi, TelnetInit, Telnet, Scan, Ping, Reset }; - - -State state = State::Prompt; -WiFiClient client; -char const * currentScript = nullptr; -bool error = false; - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; -fabgl::PS2Controller PS2Controller; -fabgl::Terminal Terminal; -fabgl::LineEditor LineEditor(&Terminal); - - - -int clientWaitForChar() -{ - // not so good...:-) - while (!client.available()) - ; - return client.read(); -} - - -int termWaitForChar() -{ - while (!Terminal.available()) - ; - return Terminal.read(); -} - - -void exe_info() -{ - Terminal.write("FabGL Terminal\r\n"); - Terminal.printf("Terminal Size: %dx%d\r\n", Terminal.getColumns(), Terminal.getRows()); - if (!PS2Controller.keyboard()->isKeyboardAvailable()) - Terminal.write("Keyboard Error!!\r\n"); - Terminal.printf("Free Mem: %d\r\n", heap_caps_get_free_size(0)); - if (WiFi.status() == WL_CONNECTED) { - Terminal.printf("WiFi SSID: %s\r\n", WiFi.SSID().c_str()); - Terminal.printf("IP: %s\r\n", WiFi.localIP().toString().c_str()); - } - Terminal.write("Type 'help' for info\r\n"); - error = false; - state = State::Prompt; -} - - -void exe_help() -{ - Terminal.write("info\r\n"); - Terminal.write(" Shows system info.\r\n\r\n"); - termWaitForChar(); - Terminal.write("scan\r\n"); - Terminal.write(" Scan for WiFi networks.\r\n\r\n"); - termWaitForChar(); - Terminal.write("wifi SSID PASSWORD\r\n"); - Terminal.write(" Connect to SSID using PASSWORD.\r\n\r\n"); - termWaitForChar(); - Terminal.write("telnet HOST [PORT]\r\n"); - Terminal.write(" Open telnet session with HOST (IP or host name) using PORT.\r\n\r\n"); - termWaitForChar(); - Terminal.write("reboot\r\n"); - Terminal.write(" Restart the system.\r\n\r\n"); - error = false; - state = State::Prompt; -} - - -void decode_command() -{ - auto inputLine = LineEditor.get(); - if (*inputLine == 0) - state = State::Prompt; - else if (strncmp(inputLine, "help", 4) == 0) - state = State::Help; - else if (strncmp(inputLine, "info", 4) == 0) - state = State::Info; - else if (strncmp(inputLine, "wifi", 4) == 0) - state = State::Wifi; - else if (strncmp(inputLine, "telnet", 6) == 0) - state = State::TelnetInit; - else if (strncmp(inputLine, "scan", 4) == 0) - state = State::Scan; - else if (strncmp(inputLine, "ping", 4) == 0) - state = State::Ping; - else if (strncmp(inputLine, "reboot", 4) == 0) - state = State::Reset; - else - state = State::UnknownCommand; -} - - -void exe_prompt() -{ - if (currentScript) { - // process commands from script - if (*currentScript == 0 || error) { - // end of script, return to prompt - currentScript = nullptr; - state = State::Prompt; - } else { - // execute current line and move to the next one - int linelen = strchr(currentScript, '\r') - currentScript; - LineEditor.setText(currentScript, linelen); - currentScript += linelen + 1; - decode_command(); - } - } else { - // process commands from keyboard - Terminal.write(">"); - state = State::PromptInput; - } -} - - -void exe_promptInput() -{ - LineEditor.setText(""); - LineEditor.edit(); - decode_command(); -} - - -void exe_scan() -{ - static char const * ENC2STR[] = { "Open", "WEP", "WPA-PSK", "WPA2-PSK", "WPA/WPA2-PSK", "WPA-ENTERPRISE" }; - Terminal.write("Scanning...\r\n"); - Terminal.flush(); - int networksCount = WiFi.scanNetworks(); - Terminal.printf("%d network(s)\r\n", networksCount); - if (networksCount) { - for (int i = 0; i < networksCount; ++i) - Terminal.printf("#%d %s %ddBm ch%d %s\r\n", i + 1, WiFi.SSID(i).c_str(), WiFi.RSSI(i), WiFi.channel(i), ENC2STR[WiFi.encryptionType(i)]); - } - WiFi.scanDelete(); - error = false; - state = State::Prompt; -} - - -void exe_wifi() -{ - static const int MAX_SSID_SIZE = 32; - static const int MAX_PSW_SIZE = 32; - char ssid[MAX_SSID_SIZE + 1]; - char psw[MAX_PSW_SIZE + 1] = {0}; - error = true; - auto inputLine = LineEditor.get(); - if (sscanf(inputLine, "wifi %32s %32s", ssid, psw) >= 1) { - Terminal.write("Connecting WiFi..."); - Terminal.flush(); - WiFi.disconnect(true, true); - for (int i = 0; i < 2; ++i) { - WiFi.begin(ssid, psw); - if (WiFi.waitForConnectResult() == WL_CONNECTED) - break; - WiFi.disconnect(true, true); - } - if (WiFi.status() == WL_CONNECTED) { - Terminal.printf("SSID: %s\r\nIP: %s\r\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); - error = false; - } else { - Terminal.write("failed!\r\n"); - } - } - state = State::Prompt; -} - - - -void exe_telnetInit() -{ - static const int MAX_HOST_SIZE = 32; - char host[MAX_HOST_SIZE + 1]; - int port; - error = true; - auto inputLine = LineEditor.get(); - int pCount = sscanf(inputLine, "telnet %32s %d", host, &port); - if (pCount > 0) { - if (pCount == 1) - port = 23; - Terminal.printf("Trying %s...\r\n", host); - if (client.connect(host, port)) { - Terminal.printf("Connected to %s\r\n", host); - error = false; - state = State::Telnet; - } else { - Terminal.write("Unable to connect to remote host\r\n"); - state = State::Prompt; - } - } else { - Terminal.write("Mistake\r\n"); - state = State::Prompt; - } -} - - -void exe_telnet() -{ - // process data from remote host (up to 1024 codes at the time) - for (int i = 0; client.available() && i < 1024; ++i) { - int c = client.read(); - if (c == 0xFF) { - // IAC (Interpret As Command) - uint8_t cmd = clientWaitForChar(); - uint8_t opt = clientWaitForChar(); - if (cmd == 0xFD && opt == 0x1F) { - // DO WINDOWSIZE - client.write("\xFF\xFB\x1F", 3); // IAC WILL WINDOWSIZE - client.write("\xFF\xFA\x1F" "\x00\x50\x00\x19" "\xFF\xF0", 9); // IAC SB WINDOWSIZE 0 80 0 25 IAC SE - } else if (cmd == 0xFD && opt == 0x18) { - // DO TERMINALTYPE - client.write("\xFF\xFB\x18", 3); // IAC WILL TERMINALTYPE - } else if (cmd == 0xFA && opt == 0x18) { - // SB TERMINALTYPE - c = clientWaitForChar(); // bypass '1' - c = clientWaitForChar(); // bypass IAC - c = clientWaitForChar(); // bypass SE - client.write("\xFF\xFA\x18\x00" "wsvt25" "\xFF\xF0", 12); // IAC SB TERMINALTYPE 0 "...." IAC SE - } else { - uint8_t pck[3] = {0xFF, 0, opt}; - if (cmd == 0xFD) // DO -> WONT - pck[1] = 0xFC; - else if (cmd == 0xFB) // WILL -> DO - pck[1] = 0xFD; - client.write(pck, 3); - } - } else { - Terminal.write(c); - } - } - // process data from terminal (keyboard) - while (Terminal.available()) { - client.write( Terminal.read() ); - } - // return to prompt? - if (!client.connected()) { - client.stop(); - state = State::Prompt; - } -} - - -void exe_ping() -{ - char host[64]; - auto inputLine = LineEditor.get(); - int pcount = sscanf(inputLine, "ping %s", host); - if (pcount > 0) { - int sent = 0, recv = 0; - fabgl::ICMP icmp; - while (true) { - - // CTRL-C ? - if (Terminal.available() && Terminal.read() == 0x03) - break; - - int t = icmp.ping(host); - if (t >= 0) { - Terminal.printf("%s %d %dms\r\n", icmp.hostIP().toString().c_str(), icmp.receivedSeq(), (int)((double)t/1000.0)); - delay(1000); - ++recv; - } else if (t == -2) { - Terminal.printf("Cannot resolve %s: Unknown host\r\n", host); - break; - } else { - Terminal.printf("Timeout s=%d\r\n", icmp.receivedSeq()); - } - ++sent; - - } - if (sent > 0) { - Terminal.printf("--- %s ping statistics ---\r\n", host); - Terminal.printf("%d packets transmitted, %d packets received, %.1f%% packet loss\r\n", sent, recv, (double)(sent - recv) / sent * 100.0); - } - } - state = State::Prompt; -} - - -void setup() -{ - //Serial.begin(115200); // DEBUG ONLY - - PS2Controller.begin(PS2Preset::KeyboardPort0); - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64); - - Terminal.begin(&DisplayController); - Terminal.connectLocally(); // to use Terminal.read(), available(), etc.. - //Terminal.setLogStream(Serial); // DEBUG ONLY - - Terminal.setBackgroundColor(Color::Black); - Terminal.setForegroundColor(Color::BrightGreen); - Terminal.loadFont(&fabgl::FONT_6x8); - Terminal.clear(); - - Terminal.enableCursor(true); - - currentScript = AUTOEXEC; -} - - -void loop() -{ - switch (state) { - - case State::Prompt: - exe_prompt(); - break; - - case State::PromptInput: - exe_promptInput(); - break; - - case State::Help: - exe_help(); - break; - - case State::Info: - exe_info(); - break; - - case State::Wifi: - exe_wifi(); - break; - - case State::TelnetInit: - exe_telnetInit(); - break; - - case State::Telnet: - exe_telnet(); - break; - - case State::Scan: - exe_scan(); - break; - - case State::Ping: - exe_ping(); - break; - - case State::Reset: - ESP.restart(); - break; - - case State::UnknownCommand: - Terminal.write("\r\nMistake\r\n"); - state = State::Prompt; - break; - - default: - Terminal.write("\r\nNot Implemeted\r\n"); - state = State::Prompt; - break; - - } -} - diff --git a/examples/SSD1306_OLED/128x64/RTClock/RTClock.ino b/examples/SSD1306_OLED/128x64/RTClock/RTClock.ino deleted file mode 100644 index 3cd3495d8..000000000 --- a/examples/SSD1306_OLED/128x64/RTClock/RTClock.ino +++ /dev/null @@ -1,246 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * OLED and DS3231 - SDA => GPIO 4 - * OLED and DS3231 - SCL => GPIO 15 - */ - - -#include "fabgl.h" - - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - -#define DS3231_ADDR 0x68 - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; -fabgl::DS3231 DS3231; -fabgl::PS2Controller PS2Controller; -fabgl::Terminal Terminal; - - - -bool dateInvalid; - - -char const * encodeDate(fabgl::DateTime const & dt) -{ - static char str[11]; - sprintf(str, "%02d/%02d/%d", dt.dayOfMonth, dt.month, dt.year); - return str; -} - - -bool decodeDate(fabgl::DateTime * dt, char const * str) -{ - int d, m, y; - if (sscanf(str, "%02d/%02d/%d", &d, &m, &y) == 3) { - dt->dayOfMonth = d; - dt->month = m; - dt->year = y; - return true; - } - return false; -} - - -char const * encodeTime(fabgl::DateTime const & dt) -{ - static char str[9]; - sprintf(str, "%02d:%02d:%02d", dt.hours, dt.minutes, dt.seconds); - return str; -} - - -bool decodeTime(fabgl::DateTime * dt, char const * str) -{ - int h, m, s; - if (sscanf(str, "%02d:%02d:%02d", &h, &m, &s) == 3) { - dt->hours = h; - dt->minutes = m; - dt->seconds = s; - return true; - } - return false; -} - - -void inputDateTime() -{ - auto dt = DS3231.datetime(); - - Terminal.clear(); - Terminal.enableCursor(true); - - fabgl::LineEditor LineEditor(&Terminal); - LineEditor.setInsertMode(false); - - char const * dtstr; - - do { - Terminal.write("Enter Date:\r\n"); - LineEditor.setText(encodeDate(dt), false); - dtstr = LineEditor.edit(); - } while (!decodeDate(&dt, dtstr)); - - do { - Terminal.write("\nEnter Time:\r\n"); - LineEditor.setText(encodeTime(dt), false); - dtstr = LineEditor.edit(); - } while (!decodeTime(&dt, dtstr)); - - DS3231.setDateTime(dt); - - Terminal.enableCursor(false); -} - - -void paintClock(Canvas & cv, fabgl::DateTime & dt) -{ - double cx = 96; - double cy = 32; - double radius = 42; - - double pointsRadius = radius * 0.76; - double secondsRadius = radius * 0.72; - double minutesRadius = radius * 0.60; - double hoursRadius = radius * 0.48; - - double s = dt.seconds / 60.0 * TWO_PI - HALF_PI; - double m = (dt.minutes + dt.seconds / 60.0) / 60.0 * TWO_PI - HALF_PI; - double h = (dt.hours + dt.minutes / 60.0) / 24.0 * TWO_PI * 2.0 - HALF_PI; - - cv.setPenColor(Color::BrightWhite); - cv.setPenWidth(3); - cv.drawLine(cx, cy, cx + cos(h) * hoursRadius, cy + sin(h) * hoursRadius); - cv.setPenWidth(1); - cv.drawLine(cx, cy, cx + cos(s) * secondsRadius, cy + sin(s) * secondsRadius); - cv.drawLine(cx, cy, cx + cos(m) * minutesRadius, cy + sin(m) * minutesRadius); - - - for (int a = 0; a < 360; a += 6) { - double arad = radians(a); - double x = cx + cos(arad) * pointsRadius; - double y = cy + sin(arad) * pointsRadius; - cv.setPixel(x, y); - if ((a % 15) == 0) { - double x2 = cx + cos(arad) * (pointsRadius - 3); - double y2 = cy + sin(arad) * (pointsRadius - 3); - cv.drawLine(x, y, x2, y2); - } - } -} - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - PS2Controller.begin(PS2Preset::KeyboardPort0); - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64); - - while (!DisplayController.available()) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } - - Terminal.begin(&DisplayController); - Terminal.connectLocally(); - Terminal.loadFont(&fabgl::FONT_8x8); - - Canvas cv(&DisplayController); - cv.clear(); - - DS3231.begin(&I2C); - while (!DS3231.available()) { - Serial.write("DS3231 not available!\n"); - } - - // uncomment to forget date/time on powerloss - //DS3231.clockEnabled(false); - - dateInvalid = !DS3231.dateTimeValid(); - if (dateInvalid && PS2Controller.keyboard()->isKeyboardAvailable()) { - // date/time invalid, request user to insert new datetime - inputDateTime(); - } - - cv.clear(); - -} - - -void loop() -{ - static const char * D2S[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; - static const char * M2S[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - - auto dt = DS3231.datetime(); - - Canvas cv(&DisplayController); - cv.beginUpdate(); - cv.clear(); - cv.selectFont(&fabgl::FONT_std_15); - cv.drawTextFmt(0, 0, "%s, %s %d", D2S[dt.dayOfWeek-1], M2S[dt.month - 1], dt.dayOfMonth); - cv.drawTextFmt(13, 18, "%d", dt.year); - - cv.selectFont(&fabgl::FONT_std_12); - cv.drawTextFmt(78, 44, "%s", encodeTime(dt)); - - cv.selectFont(&fabgl::FONT_std_17); - cv.setGlyphOptions(GlyphOptions().Bold(true)); - cv.drawTextFmt(4, 44, "%0.1f \xb0 C", DS3231.temperature()); - cv.resetGlyphOptions(); - - - paintClock(cv, dt); - - cv.endUpdate(); - - if (Terminal.available()) { - char c = Terminal.read(); - if (c == 0x0d) { - // ENTER, set date/time - inputDateTime(); - } - } - - delay(1000); - -} diff --git a/examples/SSD1306_OLED/128x64/SimpleTerminalOut/SimpleTerminalOut.ino b/examples/SSD1306_OLED/128x64/SimpleTerminalOut/SimpleTerminalOut.ino deleted file mode 100644 index c3c9a8e48..000000000 --- a/examples/SSD1306_OLED/128x64/SimpleTerminalOut/SimpleTerminalOut.ino +++ /dev/null @@ -1,175 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - - /* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - - -#include "fabgl.h" - - - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - - - -fabgl::I2C I2C; -fabgl::SSD1306Controller DisplayController; -fabgl::Terminal Terminal; - - - - -void slowPrintf(const char * format, ...) -{ - va_list ap; - va_start(ap, format); - int size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - for (int i = 0; i < size; ++i) { - Terminal.write(buf[i]); - delay(45); - } - } - va_end(ap); -} - - -void demo1() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - Terminal.write("\e[2J"); // clear screen - Terminal.write("\e[1;1H"); // move cursor to 1,1 - slowPrintf("\e[1mWELCOME TO FabGL\e[0m\r\n"); - slowPrintf("www.fabgl.com\r\n"); - slowPrintf("================\r\n\n"); - slowPrintf("This is a Display Controller, PS2 Mouse and Keyboard Controller, Graphics Library, Game Engine and ANSI/VT Terminal for the ESP32\r\n\n"); - slowPrintf("Current settings\r\n"); - slowPrintf("Screen Size:\r\n \e[1m%d x %d\e[0m\r\n", DisplayController.getScreenWidth(), DisplayController.getScreenHeight()); - slowPrintf("Terminal Size:\r\n \e[1m%d x %d\e[0m\r\n", Terminal.getColumns(), Terminal.getRows()); - slowPrintf("Free Memory:\r\n \e[1m%d bytes\e[0m\r\n\n", heap_caps_get_free_size(MALLOC_CAP_8BIT)); -} - -void demo3() -{ - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nSupported styles:\r\n"); - slowPrintf("\e[0mNormal\r\n"); - slowPrintf("\e[1mBold\e[0m\r\n"); - slowPrintf("\e[3mItalic\e[0m\r\n"); - slowPrintf("\e[4mUnderlined\e[0m\r\n"); - slowPrintf("\e[5mBlink\e[0m\r\n"); - slowPrintf("\e[7mInverse\e[0m\r\n"); - slowPrintf("\e[1;3mBoldItalic\e[0m\r\n"); - slowPrintf("\e#6Double W.\r\n"); - slowPrintf("\e#6\e#3Double H.\r\n"); // top half - slowPrintf("\e#6\e#4Double H.\r\n"); // bottom half -} - -void demo4() -{ - Canvas cv(&DisplayController); - Terminal.write("\e[40;32m"); // background: black, foreground: green - slowPrintf("\nMixed text and graphics:\r\n"); - slowPrintf("Points...\r\n"); - for (int i = 0; i < 100; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.setPixel(random(cv.getWidth()), random(cv.getHeight())); - delay(15); - } - delay(500); - slowPrintf("\e[40;32mLines...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawLine(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mRectangles...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawRectangle(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;32mEllipses...\r\n"); - for (int i = 0; i < 10; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawEllipse(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - for (int i = 0; i < 30; ++i) { - Terminal.write("\e[40;32mScrolling...\r\n"); - delay(250); - } - cv.clear(); -} - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64); - - while (DisplayController.available() == false) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } - - Terminal.begin(&DisplayController); - Terminal.setLogStream(Serial); // DEBUG ONLY - Terminal.loadFont(&fabgl::FONT_6x8); - Terminal.enableCursor(true); -} - - -void loop() -{ - delay(1000); - demo1(); - delay(4000); - demo3(); - delay(4000); - demo4(); -} diff --git a/examples/SSD1306_OLED/128x64/UI/UI.ino b/examples/SSD1306_OLED/128x64/UI/UI.ino deleted file mode 100644 index a6bca814d..000000000 --- a/examples/SSD1306_OLED/128x64/UI/UI.ino +++ /dev/null @@ -1,112 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - /* - * OLED - SDA => GPIO 4 - * OLED - SCL => GPIO 15 - */ - - - -#include "fabgl.h" -#include "fabui.h" - - - -#define OLED_SDA GPIO_NUM_4 -#define OLED_SCL GPIO_NUM_15 -#define OLED_ADDR 0x3C - -// if your display hasn't RESET set to GPIO_UNUSED -#define OLED_RESET GPIO_UNUSED // ie Heltec has GPIO_NUM_16 for reset - - -fabgl::I2C I2C; -fabgl::PS2Controller PS2Controller; -fabgl::SSD1306Controller DisplayController; - - - -void setup() -{ - Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - PS2Controller.begin(PS2Preset::KeyboardPort0_MousePort1, KbdMode::GenerateVirtualKeys); - - I2C.begin(OLED_SDA, OLED_SCL); - - DisplayController.begin(&I2C, OLED_ADDR, OLED_RESET); - DisplayController.setResolution(OLED_128x64); - - while (DisplayController.available() == false) { - Serial.write("Error, SSD1306 not available!\n"); - delay(5000); - } -} - - - - - -class MyApp : public uiApp { - - void init() { - appProps().realtimeReshaping = true; - rootWindow()->frameStyle().backgroundColor = Color::Black; - - auto label1 = new uiLabel(rootWindow(), "Enter you name", Point(0, 0)); - label1->labelStyle().backgroundColor = Color::Black; - label1->labelStyle().textColor = Color::White; - - auto textEdit1 = new uiTextEdit(rootWindow(), "", Point(0, 19), Size(128, 20)); - setFocusedWindow(textEdit1); - - auto button1 = new uiButton(rootWindow(), "OK", Point(48, 42), Size(30, 20)); - button1->onClick = [=]() { button1Click(textEdit1->text()); }; - } - - void button1Click(char const * txt) { - auto frame = new uiFrame(rootWindow(), " ", Point(10, 10), Size(108, 44)); - auto label1 = new uiLabel(frame, "", Point(10, 20)); - label1->labelStyle().textFont = &fabgl::FONT_std_16; - label1->setTextFmt("Hello %s!!", txt); - setActiveWindow(frame); - } - -} app; - - - -void loop() -{ - app.run(&DisplayController); -} - - - - - - diff --git a/examples/ST7789_TFT/240x240/DoubleBuffer/DoubleBuffer.ino b/examples/ST7789_TFT/240x240/DoubleBuffer/DoubleBuffer.ino deleted file mode 100644 index d32419b89..000000000 --- a/examples/ST7789_TFT/240x240/DoubleBuffer/DoubleBuffer.ino +++ /dev/null @@ -1,126 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - - -#include "fabgl.h" - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - - -fabgl::ST7789Controller DisplayController; -fabgl::Canvas canvas(&DisplayController); - - - -#define DOUBLEBUFFERING 1 - - -struct Test { - virtual ~Test() { }; - virtual void update() = 0; - virtual bool nextState() = 0; - virtual int testState() = 0; - virtual char const * name() = 0; -}; - - -#include "ballstest.h" -#include "polygonstest.h" -#include "spritestest.h" - - - -void setup() -{ - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, -1, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x240, -1, -1, DOUBLEBUFFERING); - - // get a font for about 40x14 text screen - canvas.selectFont(&fabgl::FONT_9x18); - - canvas.setGlyphOptions(GlyphOptions().FillBackground(true)); -} - - -void loop() -{ - static int64_t stime = esp_timer_get_time(); - static int FPS = 0; - static int FPSCounter = 0; - static int testIndex = 0; - static Test * test = new BallsTest; - - if (test->nextState() == false) { - delete test; - ++testIndex; - switch (testIndex) { - case 1: - test = new PolygonsTest; - break; - case 2: - test = new SpritesTest; - break; - default: - testIndex = 0; - test = new BallsTest; - break; - } - } - - if (esp_timer_get_time() - stime > 1000000) { - // calculate FPS - FPS = FPSCounter; - stime = esp_timer_get_time(); - FPSCounter = 0; - } - ++FPSCounter; - - test->update(); - - // display test state and FPS - canvas.setPenColor(Color::Blue); - canvas.setBrushColor(Color::BrightYellow); - canvas.drawTextFmt(0, 0, " %d %s at %d FPS ", test->testState(), test->name(), FPS); - - if (DOUBLEBUFFERING) - canvas.swapBuffers(); - -} diff --git a/examples/ST7789_TFT/240x240/DoubleBuffer/ballstest.h b/examples/ST7789_TFT/240x240/DoubleBuffer/ballstest.h deleted file mode 100644 index ac3b846ec..000000000 --- a/examples/ST7789_TFT/240x240/DoubleBuffer/ballstest.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -class BallsTest : public Test { -public: - - virtual ~BallsTest() - { - free(balls_); - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < ballsCount_; ++i) { - Ball * ball = &balls_[i]; - - // test collision with borders and bounce - if (ball->x < ball->size / 2 || ball->x > canvas.getWidth() - ball->size / 2) - ball->dir = PI - ball->dir; - else if (ball->y < ball->size / 2 || ball->y > canvas.getHeight() - ball->size / 2) - ball->dir = 2 * PI - ball->dir; - - ball->x += ball->vel * cos(ball->dir); - ball->y += ball->vel * sin(ball->dir); - - canvas.setBrushColor(ball->color); - canvas.fillEllipse(ceil(ball->x), ceil(ball->y), ball->size, ball->size); - } - } - - bool nextState() - { - if (counter_++ % 5) - return true; - if (ballsCount_ == MAXBALLS) - return false; - // create a new ball - ++ballsCount_; - balls_ = (Ball*) realloc(balls_, sizeof(Ball) * ballsCount_); - Ball * newBall = &balls_[ballsCount_ - 1]; - newBall->x = canvas.getWidth() / 2; - newBall->y = canvas.getHeight() / 2; - newBall->size = random(6, canvas.getHeight() / 6); - newBall->dir = random(360) * PI / 180.0; - newBall->vel = 0.1 + random(10) / 2.0; - newBall->color = (Color) random(1, 16); - return true; - } - - int testState() - { - return ballsCount_; - } - - char const * name() { return "Balls"; } - -private: - - static const int MAXBALLS = 150; - - struct Ball { - double x; - double y; - double dir; // radians - double vel; - int size; - Color color; - } * balls_ = nullptr; - - int ballsCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ST7789_TFT/240x240/DoubleBuffer/polygonstest.h b/examples/ST7789_TFT/240x240/DoubleBuffer/polygonstest.h deleted file mode 100644 index 63350971c..000000000 --- a/examples/ST7789_TFT/240x240/DoubleBuffer/polygonstest.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -class PolygonsTest : public Test { - - static const int MAXPOINTS = 7; - static const int MAXPOLYGONS = 100; - static const int MAXPOLYSIZE = 80; - - struct DPoint { - double X; - double Y; - }; - - struct Polygon { - DPoint dpoints[MAXPOINTS]; - DPoint center; - Point ipoints[MAXPOINTS]; - double avel; - int pointsCount; - Color color; - }; - -public: - - virtual ~PolygonsTest() - { - free(polygons_); - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < polygonsCount_; ++i) { - Polygon * polygon = &polygons_[i]; - - rotate(polygon); - - canvas.setBrushColor(polygon->color); - canvas.fillPath(polygon->ipoints, polygon->pointsCount); - } - } - - bool nextState() - { - if (counter_++ % 5) - return true; - if (polygonsCount_ == MAXPOLYGONS) - return false; - // create a new polygon - ++polygonsCount_; - polygons_ = (Polygon*) realloc(polygons_, sizeof(Polygon) * polygonsCount_); - Polygon * newPolygon = &polygons_[polygonsCount_ - 1]; - newPolygon->pointsCount = random(3, MAXPOINTS); - int translateX = random(-MAXPOLYSIZE / 2, canvas.getWidth() - MAXPOLYSIZE / 2); - int translateY = random(-MAXPOLYSIZE / 2, canvas.getHeight() - MAXPOLYSIZE / 2); - newPolygon->center.X = 0; - newPolygon->center.Y = 0; - for (int i = 0; i < newPolygon->pointsCount; ++i) { - newPolygon->dpoints[i].X = random(0, MAXPOLYSIZE) + translateX; - newPolygon->dpoints[i].Y = random(0, MAXPOLYSIZE) + translateY; - newPolygon->center.X += newPolygon->dpoints[i].X; - newPolygon->center.Y += newPolygon->dpoints[i].Y; - } - newPolygon->center.X /= newPolygon->pointsCount; - newPolygon->center.Y /= newPolygon->pointsCount; - newPolygon->color = (Color) random(1, 16); - newPolygon->avel = PI / random(5, 300) * (random(2) ? 1 : -1); - return true; - } - - int testState() - { - return polygonsCount_; - } - - void rotate(Polygon * polygon) - { - for (int i = 0; i < polygon->pointsCount; ++i) { - polygon->dpoints[i].X -= polygon->center.X; - polygon->dpoints[i].Y -= polygon->center.Y; - double x = polygon->dpoints[i].X * cos(polygon->avel) - polygon->dpoints[i].Y * sin(polygon->avel); - double y = polygon->dpoints[i].X * sin(polygon->avel) + polygon->dpoints[i].Y * cos(polygon->avel); - polygon->dpoints[i].X = x + polygon->center.X; - polygon->dpoints[i].Y = y + polygon->center.Y; - polygon->ipoints[i].X = ceil(polygon->dpoints[i].X); - polygon->ipoints[i].Y = ceil(polygon->dpoints[i].Y); - } - } - - char const * name() { return "Polygons"; } - -private: - - - Polygon * polygons_ = nullptr; - - int polygonsCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ST7789_TFT/240x240/DoubleBuffer/spritestest.h b/examples/ST7789_TFT/240x240/DoubleBuffer/spritestest.h deleted file mode 100644 index 06a84852e..000000000 --- a/examples/ST7789_TFT/240x240/DoubleBuffer/spritestest.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -#include "fabutils.h" - - -using fabgl::twrap; - - -const uint8_t spaceship_data[] = { - 0x00, 0x00, 0xd5, 0xd5, 0xd9, 0xd9, 0xd9, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0xea, 0xc0, 0x00, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd9, 0xd5, 0x00, - 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0x00, 0xd4, 0xe9, 0xe9, 0xea, 0xea, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe9, 0xe9, 0xc0, 0xe9, 0xc0, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0xea, 0xea, 0xc0, 0xea, 0xc0, 0xea, 0xea, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd9, 0xd9, 0xd9, 0xc0, 0xd9, 0xc0, 0xd9, 0xd9, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd5, 0xd5, 0xc0, 0xd5, 0xc0, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xd4, 0xd9, 0xd9, 0xe9, 0xe9, 0xc0, 0xd4, 0xd5, 0xe9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xc0, 0xc0, 0xd4, 0xd5, 0xd9, 0xe9, 0xe9, 0xe9, 0xd9, 0xd5, - 0xd4, 0xd4, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0xd4, 0xd5, 0xd9, 0xd9, 0xd5, 0xd5, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe9, 0xc0, 0x00, 0x00, 0xd4, 0xd5, 0xd5, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap spaceship = Bitmap(16, 16, &spaceship_data[0], PixelFormat::RGBA2222); - - -struct MySprite : Sprite { - double fx; - double fy; - double dir; // radians -}; - - - - - -class SpritesTest : public Test { -public: - - SpritesTest() - { - sprites_ = new MySprite[MAXSPRITES]; - } - - virtual ~SpritesTest() - { - DisplayController.removeSprites(); - delete [] sprites_; - } - - void update() - { - canvas.setBrushColor(Color::Black); - canvas.clear(); - - for (int i = 0; i < spritesCount_; ++i) { - MySprite * sprite = &sprites_[i]; - sprite->fx = twrap(sprite->fx + 3 * cos(sprite->dir), 0, canvas.getWidth()); - sprite->fy = twrap(sprite->fy + 3 * sin(sprite->dir), 0, canvas.getHeight()); - sprite->moveTo(ceil(sprite->fx), ceil(sprite->fy)); - } - DisplayController.refreshSprites(); - } - - bool nextState() - { - if (spritesCount_ == MAXSPRITES) - return false; - if (counter_ % 40 == 0) { - // create a new sprite - MySprite * newSprite = &sprites_[spritesCount_++]; - newSprite->addBitmap(&spaceship); - newSprite->dir = random(0, 360) * PI / 180.0; - newSprite->fx = canvas.getWidth() / 2.0; - newSprite->fy = canvas.getHeight() / 2.0; - newSprite->moveTo(ceil(newSprite->fx), ceil(newSprite->fy)); - DisplayController.setSprites(sprites_, spritesCount_); - } - ++counter_; - return true; - } - - int testState() - { - return spritesCount_; - } - - char const * name() { return "Sprites"; } - -private: - - static const int MAXSPRITES = 20; - - MySprite * sprites_ = nullptr; - - int spritesCount_ = 0; - - int counter_ = 0; - -}; diff --git a/examples/ST7789_TFT/240x240/FileBrowser/FileBrowser.ino b/examples/ST7789_TFT/240x240/FileBrowser/FileBrowser.ino deleted file mode 100644 index 5c10805ae..000000000 --- a/examples/ST7789_TFT/240x240/FileBrowser/FileBrowser.ino +++ /dev/null @@ -1,289 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * D/C => GPIO 22 - * RESX => GPIO 21 - * - * - * Optional SD Card connection: - * MISO => GPIO 16 - * MOSI => GPIO 17 - * CLK => GPIO 14 - * CS => GPIO 13 - * - * To change above assignment fill other paramaters of FileBrowser::mountSDCard(). - */ - - - -#include -#include -#include -#include - -#include "fabgl.h" -#include "fabui.h" - - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST // HSPI used by SD Card - - - -#define FORMAT_ON_FAIL true - -#define SPIFFS_MOUNT_PATH "/flash" -#define SDCARD_MOUNT_PATH "/SD" - - -Preferences preferences; - -fabgl::ST7789Controller DisplayController; -fabgl::PS2Controller PS2Controller; - - - - -class MyApp : public uiApp { - - uiLabel * WiFiStatusLbl; - uiFileBrowser * fileBrowser; - uiLabel * freeSpaceLbl; - - void init() { - rootWindow()->frameStyle().backgroundColor = RGB888(255, 255, 255); - - // file browser - fileBrowser = new uiFileBrowser(rootWindow(), Point(10, 5), Size(130, 170)); - fileBrowser->setDirectory("/"); - fileBrowser->onChange = [&]() { - updateFreeSpaceLabel(); - }; - - // create directory button - auto createDirBtn = new uiButton(rootWindow(), "Create Dir", Point(150, 5), Size(80, 20)); - createDirBtn->onClick = [&]() { - constexpr int MAXSTRLEN = 16; - char dirname[MAXSTRLEN + 1] = ""; - if (inputBox("Create Directory", "Name", dirname, MAXSTRLEN, "Create", "Cancel") == uiMessageBoxResult::Button1) { - fileBrowser->content().makeDirectory(dirname); - updateBrowser(); - } - }; - - // create empty file button - auto createEmptyFile = new uiButton(rootWindow(), "Create File", Point(150, 30), Size(80, 20)); - createEmptyFile->onClick = [&]() { - constexpr int MAXSTRLEN = 16; - char filename[MAXSTRLEN + 1] = ""; - if (inputBox("Create Empty File", "Name", filename, MAXSTRLEN, "Create", "Cancel") == uiMessageBoxResult::Button1) { - int len = fileBrowser->content().getFullPath(filename); - char fullpath[len]; - fileBrowser->content().getFullPath(filename, fullpath, len); - FILE * f = fopen(fullpath, "wb"); - fclose(f); - updateBrowser(); - } - }; - - // rename button - auto renameBtn = new uiButton(rootWindow(), "Rename", Point(150, 55), Size(80, 20)); - renameBtn->onClick = [&]() { - int maxlen = fabgl::imax(16, strlen(fileBrowser->filename())); - char filename[maxlen + 1]; - strcpy(filename, fileBrowser->filename()); - if (inputBox("Rename File", "New name", filename, maxlen, "Rename", "Cancel") == uiMessageBoxResult::Button1) { - fileBrowser->content().rename(fileBrowser->filename(), filename); - updateBrowser(); - } - }; - - // delete button - auto deleteBtn = new uiButton(rootWindow(), "Delete", Point(150, 80), Size(80, 20)); - deleteBtn->onClick = [&]() { - if (messageBox("Delete file/directory", "Are you sure?", "Yes", "Cancel") == uiMessageBoxResult::Button1) { - fileBrowser->content().remove( fileBrowser->filename() ); - updateBrowser(); - } - }; - - // format button - auto formatBtn = new uiButton(rootWindow(), "Format", Point(150, 105), Size(80, 20)); - formatBtn->onClick = [&]() { - if (messageBox("Format sdcard", "Are you sure?", "Yes", "Cancel") == uiMessageBoxResult::Button1) { - FileBrowser::format(fileBrowser->content().getCurrentDriveType(), 0); - updateBrowser(); - } - }; - - // setup wifi button - auto setupWifiBtn = new uiButton(rootWindow(), "Setup WiFi", Point(150, 130), Size(80, 20)); - setupWifiBtn->onClick = [=]() { - char SSID[32] = ""; - char psw[32] = ""; - if (inputBox("WiFi Connect", "Network Name", SSID, sizeof(SSID), "OK", "Cancel") == uiMessageBoxResult::Button1 && - inputBox("WiFi Connect", "Password", psw, sizeof(psw), "OK", "Cancel") == uiMessageBoxResult::Button1) { - preferences.putString("SSID", SSID); - preferences.putString("WiFiPsw", psw); - connectWiFi(); - } - }; - - // download file button - auto downloadBtn = new uiButton(rootWindow(), "Download", Point(150, 155), Size(80, 20)); - downloadBtn->onClick = [=]() { - char URL[128] = "http://"; - if (inputBox("Download File", "URL", URL, sizeof(URL), "OK", "Cancel") == uiMessageBoxResult::Button1) { - download(URL); - updateFreeSpaceLabel(); - } - }; - - // free space label - freeSpaceLbl = new uiLabel(rootWindow(), "", Point(10, 200)); - updateFreeSpaceLabel(); - - // wifi status label - WiFiStatusLbl = new uiLabel(rootWindow(), "", Point(10, 215)); - connectWiFi(); - - setFocusedWindow(fileBrowser); - } - - void updateBrowser() - { - fileBrowser->update(); - updateFreeSpaceLabel(); - } - - // connect to wifi using SSID and PSW from Preferences - void connectWiFi() - { - WiFiStatusLbl->setText("WiFi Not Connected"); - WiFiStatusLbl->labelStyle().textColor = RGB888(255, 0, 0); - char SSID[32], psw[32]; - if (preferences.getString("SSID", SSID, sizeof(SSID)) && preferences.getString("WiFiPsw", psw, sizeof(psw))) { - WiFi.begin(SSID, psw); - for (int i = 0; i < 16 && WiFi.status() != WL_CONNECTED; ++i) { - WiFi.reconnect(); - delay(1000); - } - if (WiFi.status() == WL_CONNECTED) { - WiFiStatusLbl->setTextFmt("Connected to %s, IP is %s", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str()); - WiFiStatusLbl->labelStyle().textColor = RGB888(0, 128, 0); - } - } - WiFiStatusLbl->update(); - } - - // download from URL. Filename is the last part of the URL - void download(char const * URL) { - char const * slashPos = strrchr(URL, '/'); - if (slashPos) { - char filename[slashPos - URL + 1]; - strcpy(filename, slashPos + 1); - - HTTPClient http; - http.begin(URL); - int httpCode = http.GET(); - if (httpCode == HTTP_CODE_OK) { - - int fullpathLen = fileBrowser->content().getFullPath(filename); - char fullpath[fullpathLen]; - fileBrowser->content().getFullPath(filename, fullpath, fullpathLen); - FILE * f = fopen(fullpath, "wb"); - - int len = http.getSize(); - uint8_t buf[128] = { 0 }; - WiFiClient * stream = http.getStreamPtr(); - while (http.connected() && (len > 0 || len == -1)) { - size_t size = stream->available(); - if (size) { - int c = stream->readBytes(buf, fabgl::imin(sizeof(buf), size)); - fwrite(buf, c, 1, f); - if (len > 0) - len -= c; - } - } - - fclose(f); - - updateBrowser(); - } - } - } - - // show used and free SD space - void updateFreeSpaceLabel() { - int64_t total, used; - FileBrowser::getFSInfo(fileBrowser->content().getCurrentDriveType(), 0, &total, &used); - freeSpaceLbl->setTextFmt("%lld KiB used, %lld KiB free", used / 1024, (total - used) / 1024); - freeSpaceLbl->update(); - } - -} app; - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - preferences.begin("FileBrowser", false); - preferences.clear(); - - PS2Controller.begin(PS2Preset::KeyboardPort0_MousePort1, KbdMode::GenerateVirtualKeys); - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, -1, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x240); - - Canvas cv(&DisplayController); - cv.clear(); - cv.drawText(50, 170, "Initializing..."); - cv.waitCompletion(); - - FileBrowser::mountSDCard(FORMAT_ON_FAIL, SDCARD_MOUNT_PATH); - FileBrowser::mountSPIFFS(FORMAT_ON_FAIL, SPIFFS_MOUNT_PATH); -} - - -void loop() -{ - app.run(&DisplayController); -} - - - - - - diff --git a/examples/ST7789_TFT/240x240/Rotate/Rotate.ino b/examples/ST7789_TFT/240x240/Rotate/Rotate.ino deleted file mode 100644 index 7c23152ba..000000000 --- a/examples/ST7789_TFT/240x240/Rotate/Rotate.ino +++ /dev/null @@ -1,91 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* -* TFT Display signals: -* SCK => GPIO 18 -* MOSI => GPIO 23 -* D/C => GPIO 22 -* RESX => GPIO 21 -*/ - - - -#include "fabgl.h" - - - -fabgl::ST7789Controller DisplayController; - - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - - -void test(Color bcolor, char const * msg) -{ - Canvas cv(&DisplayController); - cv.setBrushColor(bcolor); - cv.clear(); - cv.setBrushColor(Color::BrightRed); - int w = cv.getWidth(); - int h = cv.getHeight(); - Serial.printf("%d %d\n", w, h); - Point pts[3] = { {w/2, 0}, {w-1, h-1}, {0, h-1} }; - cv.fillPath(pts, 3); - cv.drawPath(pts, 3); - cv.selectFont(&fabgl::FONT_8x14); - cv.drawTextFmt(w/3, h/2, "%s", msg); - delay(2000); -} - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, -1, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x240); -} - - -void loop() -{ - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate0); - test(Color::Blue, "Rotate0"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate90); - test(Color::Green, "Rotate90"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate180); - test(Color::Yellow,"Rotate180"); - DisplayController.setOrientation(fabgl::TFTOrientation::Rotate270); - test(Color::Magenta, "Rotate270"); -} - diff --git a/examples/ST7789_TFT/240x240/SimpleTerminalOut/SimpleTerminalOut.ino b/examples/ST7789_TFT/240x240/SimpleTerminalOut/SimpleTerminalOut.ino deleted file mode 100644 index e49215d35..000000000 --- a/examples/ST7789_TFT/240x240/SimpleTerminalOut/SimpleTerminalOut.ino +++ /dev/null @@ -1,211 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - - /* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - - -#include "fabgl.h" - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - - - - -fabgl::ST7789Controller DisplayController; -fabgl::Terminal Terminal; - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, -1, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x240); - - Terminal.begin(&DisplayController); - //Terminal.setLogStream(Serial); // DEBUG ONLY - - Terminal.loadFont(&fabgl::FONT_9x18); - Terminal.enableCursor(true); -} - - -void slowPrintf(const char * format, ...) -{ - va_list ap; - va_start(ap, format); - int size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - for (int i = 0; i < size; ++i) { - Terminal.write(buf[i]); - delay(25); - } - } - va_end(ap); -} - - -void demo1() -{ - Terminal.write("\e[40;92m"); // background: black, foreground: green - Terminal.write("\e[2J"); // clear screen - Terminal.write("\e[1;1H"); // move cursor to 1,1 - slowPrintf("**** WELCOME TO FabGL ****\r\n"); - slowPrintf("by Fabrizio Di Vittorio\r\nwww.fabgl.com\r\n"); - slowPrintf("==========================\r\n\n"); - slowPrintf("This is a Display Controller, PS2 Mouse and Keyboard Controller, Graphics Library, Game Engine and ANSI/VT Terminal for the ESP32\r\n\n"); - slowPrintf("Current settings\r\n"); - slowPrintf("Screen Size : %d x %d\r\n", DisplayController.getScreenWidth(), DisplayController.getScreenHeight()); - slowPrintf("Terminal Size : %d x %d\r\n", Terminal.getColumns(), Terminal.getRows()); - slowPrintf("Free Memory : %d bytes\r\n\n", heap_caps_get_free_size(MALLOC_CAP_8BIT)); -} - -void demo2() -{ - Terminal.write("\e[40;92m"); // background: black, foreground: green - slowPrintf("8 or 64 colors supported (depends by GPIOs used)\r\n"); - slowPrintf("ANSI colors:\r\n"); - // foregrounds - Terminal.write("\e[31mRED\t"); delay(500); - Terminal.write("\e[32mGREEN\r\n"); delay(500); - Terminal.write("\e[33mYELLOW\t"); delay(500); - Terminal.write("\e[34mBLUE\r\n"); delay(500); - Terminal.write("\e[35mMAGENTA\t"); delay(500); - Terminal.write("\e[36mCYAN\r\n"); delay(500); - Terminal.write("\e[37mWHITE\t"); delay(500); - Terminal.write("\e[90mHBLACK\r\n"); delay(500); - Terminal.write("\e[91mHRED\t"); delay(500); - Terminal.write("\e[92mHGREEN\r\n"); delay(500); - Terminal.write("\e[93mHYELLOW\t"); delay(500); - Terminal.write("\e[94mHBLUE\r\n"); delay(500); - Terminal.write("\e[95mHMAGENTA\t"); delay(500); - Terminal.write("\e[96mHCYAN\r\n"); delay(500); - Terminal.write("\e[97mHWHITE\t"); delay(500); - // backgrounds - Terminal.write("\e[40mBLACK\r\n"); delay(500); - Terminal.write("\e[41mRED\e[40m\t"); delay(500); - Terminal.write("\e[42mGREEN\e[40m\r\n"); delay(500); - Terminal.write("\e[43mYELLOW\e[40m\t"); delay(500); - Terminal.write("\e[44mBLUE\e[40m\r\n"); delay(500); - Terminal.write("\e[45mMAGENTA\e[40m\t"); delay(500); - Terminal.write("\e[46mCYAN\e[40m\r\n"); delay(500); - Terminal.write("\e[47mWHITE\e[40m\t"); delay(500); - Terminal.write("\e[100mHBLACK\e[40m\r\n"); delay(500); - Terminal.write("\e[101mHRED\e[40m\t"); delay(500); - Terminal.write("\e[102mHGREEN\e[40m\r\n"); delay(500); - Terminal.write("\e[103mHYELLOW\e[40m\t"); delay(500); - Terminal.write("\e[104mHBLUE\e[40m\r\n"); delay(500); - Terminal.write("\e[105mHMAGENTA\e[40m\t"); delay(500); - Terminal.write("\e[106mHCYAN\e[40m\r\n"); delay(500); -} - -void demo3() -{ - Terminal.write("\e[40;92m"); // background: black, foreground: green - slowPrintf("\nSupported styles:\r\n"); - slowPrintf("\e[0mNormal\r\n"); - slowPrintf("\e[1mBold\e[0m\r\n"); - slowPrintf("\e[3mItalic\e[0m\r\n"); - slowPrintf("\e[4mUnderlined\e[0m\r\n"); - slowPrintf("\e[5mBlink\e[0m\r\n"); - slowPrintf("\e[7mInverse\e[0m\r\n"); - slowPrintf("\e[1;3mBoldItalic\e[0m\r\n"); - slowPrintf("\e[1;3;4mBoldItalicUnderlined\e[0m\r\n"); - slowPrintf("\e[1;3;4;5mBoldItalicUnderlinedBlinking\e[0m\r\n"); - slowPrintf("\e[1;3;4;5;7mBoldItalicUnderlinedBlinkingInverse\e[0m\r\n"); - slowPrintf("\e#6Double Width Line\r\n"); - slowPrintf("\e#6\e#3Double Height Line\r\n"); // top half - slowPrintf("\e#6\e#4Double Height Line\r\n"); // bottom half -} - -void demo4() -{ - Canvas cv(&DisplayController); - Terminal.write("\e[40;92m"); // background: black, foreground: green - slowPrintf("\nMixed text and graphics:\r\n"); - slowPrintf("Points...\r\n"); - for (int i = 0; i < 500; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.setPixel(random(cv.getWidth()), random(cv.getHeight())); - delay(15); - } - delay(500); - slowPrintf("\e[40;92mLines...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawLine(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;92mRectangles...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawRectangle(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - delay(500); - slowPrintf("\e[40;92mEllipses...\r\n"); - for (int i = 0; i < 50; ++i) { - cv.setPenColor(random(256), random(256), random(256)); - cv.drawEllipse(random(cv.getWidth()), random(cv.getHeight()), random(cv.getWidth()), random(cv.getHeight())); - delay(50); - } - for (int i = 0; i < 15; ++i) { - Terminal.write("\e[40;92mScrolling...\r\n"); - delay(250); - } - cv.clear(); -} - -void loop() -{ - delay(1000); - demo1(); - delay(4000); - demo2(); - delay(4000); - demo3(); - delay(4000); - demo4(); - delay(4000); -} diff --git a/examples/ST7789_TFT/240x240/Sprites/Sprites.ino b/examples/ST7789_TFT/240x240/Sprites/Sprites.ino deleted file mode 100644 index b26dddf0f..000000000 --- a/examples/ST7789_TFT/240x240/Sprites/Sprites.ino +++ /dev/null @@ -1,276 +0,0 @@ -/* - Created by Fabrizio Di Vittorio (fdivitto2013@gmail.com) - - Copyright (c) 2019-2022 Fabrizio Di Vittorio. - All rights reserved. - - -* Please contact fdivitto2013@gmail.com if you need a commercial license. - - -* This library and related software is available under GPL v3. - - FabGL 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. - - FabGL 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 FabGL. If not, see . - */ - - -/* - * TFT Display signals: - * SCK => GPIO 18 - * MOSI => GPIO 23 - * D/C => GPIO 22 - * RESX => GPIO 21 - */ - - - -#include "fabgl.h" - -#include - - - -#define TFT_SCK 18 -#define TFT_MOSI 23 -#define TFT_DC 22 -#define TFT_RESET 21 -#define TFT_SPIBUS VSPI_HOST - - - -fabgl::ST7789Controller DisplayController; - - - -// Mask, 1 bit per pixel. One byte contains 8 pixels. 0 = transparent, 1 = foreground color (in this case it is "RGB888(255, 255, 0)". -const uint8_t pacman_data[] = { - 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x03, 0xff, 0xe0, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x3f, 0xff, 0xff, 0x00, - 0x00, 0x7f, 0xff, 0xff, 0x80, - 0x00, 0xff, 0xff, 0xff, 0xc0, - 0x03, 0xff, 0xff, 0xff, 0xf0, - 0x03, 0xff, 0xff, 0xff, 0xf0, - 0x07, 0xff, 0xff, 0xff, 0xf8, - 0x0f, 0xff, 0xff, 0xff, 0xfc, - 0x1f, 0xff, 0xff, 0xff, 0xfe, - 0x1f, 0xff, 0xff, 0xff, 0xfe, - 0x3f, 0xff, 0xff, 0xff, 0xfe, - 0x3f, 0xff, 0xff, 0xff, 0xf8, - 0x7f, 0xff, 0xff, 0xff, 0xe0, - 0x7f, 0xff, 0xff, 0xff, 0x80, - 0x7f, 0xff, 0xff, 0xfe, 0x00, - 0x7f, 0xff, 0xff, 0xf8, 0x00, - 0xff, 0xff, 0xff, 0xe0, 0x00, - 0xff, 0xff, 0xff, 0x80, 0x00, - 0xff, 0xff, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0xfc, 0x00, 0x00, - 0xff, 0xff, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0xff, 0x80, 0x00, - 0xff, 0xff, 0xff, 0xe0, 0x00, - 0x7f, 0xff, 0xff, 0xf8, 0x00, - 0x7f, 0xff, 0xff, 0xfe, 0x00, - 0x7f, 0xff, 0xff, 0xff, 0x80, - 0x7f, 0xff, 0xff, 0xff, 0xe0, - 0x3f, 0xff, 0xff, 0xff, 0xf8, - 0x3f, 0xff, 0xff, 0xff, 0xfe, - 0x1f, 0xff, 0xff, 0xff, 0xfe, - 0x1f, 0xff, 0xff, 0xff, 0xfe, - 0x0f, 0xff, 0xff, 0xff, 0xfc, - 0x07, 0xff, 0xff, 0xff, 0xf8, - 0x07, 0xff, 0xff, 0xff, 0xf8, - 0x03, 0xff, 0xff, 0xff, 0xf0, - 0x01, 0xff, 0xff, 0xff, 0xe0, - 0x00, 0x7f, 0xff, 0xff, 0x80, - 0x00, 0x3f, 0xff, 0xff, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x03, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x3f, 0x00, 0x00, -}; -Bitmap pacman = Bitmap(40, 43, &pacman_data[0], PixelFormat::Mask, RGB888(255, 255, 0)); - -// ABGR, 2 bits per channel. One byte contains one pixel. -const uint8_t pacenemy_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x16, 0x16, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x56, 0x96, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x96, 0x96, 0x56, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x56, 0x96, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x96, 0x56, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x52, 0x96, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x96, 0x52, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xd6, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xd6, 0xd6, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd6, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd6, 0xc2, 0x82, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xea, 0xea, 0xc2, 0x82, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd0, 0xd0, 0xd4, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd0, 0xd0, 0xd0, 0xea, 0xd6, 0xc2, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd0, 0xd0, 0xd0, 0xd0, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xe5, 0xd0, 0xd0, 0xd0, 0xea, 0xd6, 0xc2, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xd5, 0xd0, 0xd0, 0xd4, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd0, 0xd0, 0xd0, 0xea, 0xd6, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xe5, 0xea, 0xea, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd6, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd6, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xd6, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xd6, 0xd6, 0xd6, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x42, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x42, 0x42, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x42, 0x42, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0xc2, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x01, 0x00, 0x00, 0x01, 0x82, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0x82, 0x01, 0x00, 0x00, 0x02, 0x82, 0xc2, 0xc2, 0xc2, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0xc2, 0xc2, 0xc2, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0xc2, 0xc2, 0xc2, 0x82, 0x02, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0xc2, 0xc2, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x82, 0xc2, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0xc2, 0x82, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0xc2, 0x82, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x82, 0x82, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap pacenemy = Bitmap(42, 42, &pacenemy_data[0], PixelFormat::RGBA2222); - - - -// RGBA, 8 bits per channel. Four bytes contains one pixel. -const uint8_t alien_data[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x05, 0x05, 0x05, 0x51, 0x73, 0x74, 0x80, 0x88, 0x96, 0x97, 0xa8, 0xaa, 0xa3, 0xa5, 0xb5, 0xc4, 0xa3, 0xa5, 0xb5, 0xc9, 0x96, 0x97, 0xa8, 0xb8, 0x8c, 0x8d, 0x9c, 0x98, 0x4d, 0x4d, 0x57, 0x6e, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x40, 0x8c, 0x8d, 0x9c, 0xb0, 0xb7, 0xb9, 0xc8, 0xf8, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0xa3, 0xa5, 0xb5, 0xdb, 0x63, 0x63, 0x6e, 0x76, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x96, 0x97, 0xa8, 0xba, 0xcb, 0xcd, 0xe1, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xb7, 0xb9, 0xc8, 0xed, 0x63, 0x63, 0x6e, 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x4d, 0x57, 0x5f, 0xb7, 0xb9, 0xc8, 0xf4, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x8b, 0x8b, 0x99, 0xbc, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x71, 0x7f, 0x87, 0xcb, 0xcd, 0xe1, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x99, 0xa9, 0x88, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xcb, 0xcd, 0xe1, 0xff, 0x93, 0xac, 0x74, 0xff, 0xba, 0xc0, 0xc7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xa3, 0xa5, 0xb5, 0xde, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x80, 0x80, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0x8c, 0xac, 0x51, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xb7, 0xb9, 0xc8, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xac, 0x74, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xa3, 0xa5, 0xb5, 0xdf, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x4d, 0x57, 0x59, 0xcb, 0xcd, 0xe1, 0xfe, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0x94, 0xa5, 0x4a, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x8c, 0xac, 0x51, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0x9c, 0xa3, 0x9a, 0xce, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb7, 0xb9, 0xc8, 0xf1, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xa4, 0xb6, 0x94, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x73, 0x74, 0x80, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x8b, 0x99, 0xae, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xac, 0x74, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x8c, 0xac, 0x51, 0xff, 0xb7, 0xb9, 0xc8, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xc4, 0xc7, 0xd7, 0xfc, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xc4, 0xc7, 0xd7, 0xfe, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xb7, 0xb9, 0xc8, 0xff, 0x91, 0xab, 0x2d, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x94, 0xa5, 0x4a, 0xff, 0x8c, 0xac, 0x51, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x94, 0xa5, 0x4a, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0x8b, 0x8b, 0x99, 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, 0x8b, 0x8b, 0x99, 0xa2, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x9c, 0xa3, 0x9a, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x91, 0xab, 0x2d, 0xff, 0xbd, 0xc3, 0xb6, 0xff, 0x8c, 0xac, 0x51, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xba, 0xc0, 0xc7, 0xfd, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xb7, 0xb9, 0xc8, 0xf4, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x9c, 0xa3, 0x9a, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0x84, 0xac, 0x16, 0xff, 0xa4, 0xb6, 0x94, 0xff, 0x45, 0x45, 0x45, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x91, 0xab, 0x2d, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0x63, 0x63, 0x6e, 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, 0x05, 0x05, 0x05, 0x47, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x99, 0xa9, 0x88, 0xff, 0x99, 0xa9, 0x88, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x8c, 0xac, 0x51, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0x93, 0xac, 0x74, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xba, 0xc0, 0xc7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xa3, 0xa5, 0xb5, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x44, 0x44, 0x44, 0x94, 0x69, 0x69, 0x68, 0xee, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x84, 0xac, 0x16, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xba, 0xc0, 0xc7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xad, 0xaf, 0xc0, 0xf9, 0x49, 0x49, 0x49, 0xa5, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x49, 0x49, 0x49, 0xad, 0x69, 0x69, 0x68, 0xfe, 0x7d, 0x7d, 0x7c, 0xff, 0x89, 0x8a, 0x95, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xae, 0xb9, 0xae, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xc4, 0xc7, 0xd7, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x59, 0x59, 0x59, 0xc2, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x32, 0x6c, 0x69, 0x69, 0x68, 0xf6, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x9c, 0xa3, 0x9a, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x8c, 0xac, 0x51, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x74, 0x99, 0x15, 0xff, 0x84, 0xac, 0x16, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x74, 0x99, 0x15, 0xff, 0x84, 0xac, 0x16, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xac, 0x74, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xfc, 0x3d, 0x3d, 0x3d, 0x8a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x8c, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x89, 0x8a, 0x95, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x93, 0xac, 0x74, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x74, 0x99, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x7c, 0xa3, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x99, 0xa9, 0x88, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x49, 0x49, 0x49, 0xb2, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1b, 0x1b, 0x1b, 0x4f, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0xb1, 0xa9, 0x33, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x8c, 0xac, 0x51, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x7c, 0xa3, 0x15, 0xff, 0x7c, 0xa3, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xac, 0x74, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0x81, 0x7d, 0x5b, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x32, 0x32, 0x32, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x59, 0xc1, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xf4, 0xe7, 0x00, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x89, 0x8a, 0x95, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0xcb, 0xcd, 0xe1, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xa4, 0xb6, 0x94, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xcb, 0xcd, 0xe1, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0x89, 0x8a, 0x95, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xc3, 0xb9, 0x19, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0x91, 0xab, 0x2d, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xe9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x69, 0x69, 0x68, 0xf6, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0x68, 0x67, 0x5a, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x89, 0x8a, 0x95, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0xb7, 0xb9, 0xc8, 0xff, 0xcb, 0xcd, 0xe1, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0x9c, 0xa3, 0x9a, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0x93, 0xbd, 0x15, 0xff, 0xae, 0xb9, 0xae, 0xff, 0xde, 0xe0, 0xf6, 0xff, 0xd5, 0xd7, 0xeb, 0xff, 0xcb, 0xcd, 0xe1, 0xff, 0xb7, 0xb9, 0xc8, 0xff, 0xa5, 0xa6, 0xb2, 0xff, 0x89, 0x8a, 0x95, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0x81, 0x7d, 0x5b, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x59, 0xc7, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x67, 0x6f, 0x5a, 0xff, 0x67, 0x6f, 0x5a, 0xff, 0x67, 0x6f, 0x5a, 0xff, 0x69, 0x69, 0x68, 0xff, 0x69, 0x69, 0x68, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xf1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x32, 0x5a, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x68, 0x67, 0x5a, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x3d, 0x3d, 0x3d, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x9c, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0x81, 0x7d, 0x5b, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0xe2, 0xd6, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xf4, 0xe7, 0x00, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x68, 0x67, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x32, 0x32, 0x32, 0x7f, 0x69, 0x69, 0x68, 0xfc, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xb1, 0xa9, 0x33, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xc3, 0xb9, 0x19, 0xff, 0xd1, 0xc6, 0x04, 0xff, 0x94, 0xa5, 0x4a, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xc3, 0xb9, 0x19, 0xff, 0xf4, 0xe7, 0x00, 0xff, 0xe2, 0xd6, 0x00, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x49, 0x49, 0x49, 0xa1, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x16, 0x16, 0x80, 0x52, 0x52, 0x52, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xb1, 0xa9, 0x33, 0xff, 0x94, 0xa5, 0x4a, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xbb, 0xb2, 0x27, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xff, 0xf2, 0x00, 0xff, 0xf4, 0xe7, 0x00, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x52, 0x52, 0x52, 0xff, 0x2b, 0x2b, 0x2b, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0xd6, 0x3b, 0x3b, 0x3b, 0xf2, 0x05, 0x05, 0x05, 0x48, 0x54, 0x54, 0x54, 0xab, 0x69, 0x69, 0x68, 0xfa, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0xb1, 0xa9, 0x33, 0xff, 0xbb, 0xb2, 0x27, 0xff, 0x8d, 0x88, 0x4e, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xfc, 0x49, 0x49, 0x49, 0xbc, 0x05, 0x05, 0x05, 0x52, 0x2b, 0x2b, 0x2b, 0xbb, 0x3b, 0x3b, 0x3b, 0xfd, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x45, 0x45, 0x45, 0x45, 0xff, 0x22, 0x22, 0x22, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1b, 0x1b, 0x1b, 0x5d, 0x54, 0x54, 0x54, 0xa9, 0x69, 0x69, 0x68, 0xec, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xf3, 0x54, 0x54, 0x54, 0xb4, 0x32, 0x32, 0x32, 0x6a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x41, 0x45, 0x45, 0x45, 0xff, 0x22, 0x22, 0x22, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0xb1, 0x3b, 0x3b, 0x3b, 0xf7, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x05, 0x05, 0x05, 0x5d, 0x44, 0x44, 0x44, 0x8b, 0x54, 0x54, 0x54, 0xb9, 0x59, 0x59, 0x59, 0xd7, 0x69, 0x69, 0x68, 0xf9, 0x69, 0x69, 0x68, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x69, 0x69, 0x68, 0xff, 0x69, 0x69, 0x68, 0xfb, 0x68, 0x67, 0x5a, 0xdd, 0x54, 0x54, 0x54, 0xbe, 0x44, 0x44, 0x44, 0x94, 0x18, 0x18, 0x18, 0x63, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0xc9, 0x3b, 0x3b, 0x3b, 0xec, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x3b, 0x3b, 0x3b, 0xfd, 0x22, 0x22, 0x22, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3f, 0x05, 0x05, 0x05, 0x5d, 0x24, 0x24, 0x24, 0xd3, 0x3b, 0x3b, 0x3b, 0xff, 0x07, 0x07, 0x07, 0x70, 0x05, 0x05, 0x05, 0x45, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x55, 0x45, 0x45, 0x45, 0xff, 0x07, 0x07, 0x07, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x8a, 0x3b, 0x3b, 0x3b, 0xfd, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x33, 0x33, 0x33, 0xdb, 0x33, 0x33, 0x33, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x3b, 0x3b, 0x3b, 0xee, 0x2b, 0x2b, 0x2b, 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, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x66, 0x45, 0x45, 0x45, 0xff, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x63, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3b, 0x3b, 0x3b, 0xe8, 0x2b, 0x2b, 0x2b, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x33, 0x33, 0x33, 0xce, 0x2b, 0x2b, 0x2b, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x7b, 0x3b, 0x3b, 0x3b, 0xfa, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x3b, 0x3b, 0x3b, 0xff, 0x05, 0x05, 0x05, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x3b, 0x3b, 0x3b, 0xf1, 0x05, 0x05, 0x05, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0xba, 0x3b, 0x3b, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x7a, 0x3b, 0x3b, 0x3b, 0xee, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -Bitmap alien = Bitmap(50, 41, &alien_data[0], PixelFormat::RGBA8888); - - - -Sprite sprites[3]; - - - -void setup() -{ - //Serial.begin(115200); delay(500); Serial.write("\n\n\n"); // DEBUG ONLY - - DisplayController.begin(TFT_SCK, TFT_MOSI, TFT_DC, TFT_RESET, -1, TFT_SPIBUS); - DisplayController.setResolution(TFT_240x240); - - // draw background - Canvas cv(&DisplayController); - cv.setBrushColor(RGB888(255, 128, 0)); - cv.clear(); - cv.setPenColor(RGB888(64, 64, 0)); - for (int i = 0; i < cv.getWidth(); i += 10) - cv.drawLine(i, 0, i, cv.getHeight() - 1); - for (int i = 0; i < cv.getHeight(); i += 10) - cv.drawLine(0, i, cv.getWidth() - 1, i); - - // associates bitmaps to sprites - sprites[0].addBitmap(&pacman); - sprites[1].addBitmap(&pacenemy); - sprites[2].addBitmap(&alien); - - // sets initial position - sprites[0].moveTo(0, 50); - sprites[1].moveTo(0, 100); - sprites[2].moveTo(0, 150); - - // makes sprites visible - sprites[0].visible = true; - sprites[1].visible = true; - sprites[2].visible = true; - - // add sprites to display controller - DisplayController.setSprites(sprites, 3); -} - - - -void loop() -{ - static double count = 0; - - // set position of sprite 0 - sprites[0].x += 1; - if (sprites[0].x >= DisplayController.getViewPortWidth()) - sprites[0].x = -sprites[0].getWidth(); - sprites[0].y = 50 + 35.0 * sin(count); - - // set position of sprite 1 - sprites[1].x += 1; - if (sprites[1].x >= DisplayController.getViewPortWidth()) - sprites[1].x = -sprites[1].getWidth(); - sprites[1].y = 100 + 35.0 * cos(count); - - // set position of sprite 2 - sprites[2].x += 1; - if (sprites[2].x >= DisplayController.getViewPortWidth()) - sprites[2].x = -sprites[2].getWidth(); - sprites[2].y = 150 + 35.0 * sin(count); - - // update sprites positions - DisplayController.refreshSprites(); - - count += 0.10; - - delay(max(10, 50 - (int)count / 2)); -} - - - - - - diff --git a/library.json b/library.json index dcc09db58..fa94b46a4 100755 --- a/library.json +++ b/library.json @@ -1,12 +1,11 @@ { - "name": "FabGL", + "name": "vdp-gl", "keywords": "sprite, terminal, VT100, ANSI, keyboard, mouse, VGA, PAL, NTSC, Composite, SSD1306, ILI9341, ST7789, OLED, DS3231, I2S, I2C, game, engine, PS2, graphics, audio, sound, font, arduino, ESP32, display, vic20, emulator, 8086, z80, 6502", - "description": "ESP32 VGA Controller, Composite PAL/NTSC Controller, PS/2 Mouse and Keyboard Controller, Graphics Library, Sound Engine, Game Engine and ANSI/VT Terminal", - "homepage": "http://www.fabglib.org", + "description": "Fork of FabGL 1.0.8 customized for agon-vdp.", "repository": { "type": "git", - "url": "https://github.com/fdivitto/FabGL.git" + "url": "https://github.com/avalonbits/vdp-gl.git" }, "authors": [ @@ -14,10 +13,16 @@ "name": "Fabrizio Di Vittorio", "email": "fdivitto2013@gmail.com", "url": "https://github.com/fdivitto", + "maintainer": false + }, + { + "name": "Igor Chaves Cananea", + "email": "icc@avalonbits.com", + "url": "https://github.com/avalonbits", "maintainer": true } ], - "version": "1.0.8", + "version": "1.0.0", "frameworks": ["espidf", "arduino"], "platforms": "espressif32", "headers": "fabgl.h", diff --git a/library.properties b/library.properties index 6a8537c34..25589d84f 100755 --- a/library.properties +++ b/library.properties @@ -1,10 +1,10 @@ -name=FabGL -version=1.0.8 -author=Fabrizio Di Vittorio -maintainer=Fabrizio Di Vittorio -sentence=ESP32 VGA, PAL/NTSC Color Composite, SSD1306 ILI9341 ST7789 Controller, PS/2 Mouse and Keyboard Controller, Graphics Library, Graphical User Interface (GUI), Sound Engine, Game Engine and ANSI/VT Terminal -paragraph=ESP32 VGA, PAL/NTSC Color Composite, SSD1306 ILI9341 ST7789 Controller, PS/2 Mouse and Keyboard Controller, Graphics Library, Graphical User Interface (GUI), Sound Engine, Game Engine and ANSI/VT Terminal -url=https://github.com/fdivitto/fabgl +name=vdp-gl +version=1.0.0 +author=Igor Chaves Cananea +maintainer=Igor Chaves Cananea +sentence=Fork of FabGL 1.0.8 customized for agon-vdp. +paragraph=Fork of FabGL 1.0.8 customized for agon-vdp. +url=https://github.com/avalonbits/vdp-gl.git architectures=esp32 includes=fabgl.h category=Other