From a7012e15c2bf5b8398cfbf1d83175c9d5216a2bf Mon Sep 17 00:00:00 2001 From: Unrud Date: Sat, 23 Jun 2018 17:08:30 +0200 Subject: [PATCH] import project --- COPYING | 674 +++++++++++++++++++ README.md | 14 + bindata.generated.go | 363 ++++++++++ bindata.go | 3 + desktop/remote-touchpad.appdata.xml | 35 + desktop/remote-touchpad.desktop | 9 + desktop/remote-touchpad.ico | Bin 0 -> 67646 bytes desktop/remote-touchpad_128.png | Bin 0 -> 4350 bytes desktop/remote-touchpad_256.png | Bin 0 -> 14480 bytes desktop/remote-touchpad_512.png | Bin 0 -> 48534 bytes desktop/remote-touchpad_64.png | Bin 0 -> 1578 bytes flatpak/com.github.unrud.RemoteTouchpad.json | 113 ++++ host.go | 78 +++ icon.go | 3 + icon_windows.syso | Bin 0 -> 67906 bytes main.go | 228 +++++++ plugin.go | 44 ++ plugin_windows.go | 169 +++++ plugin_windows_dummy.go | 26 + plugin_x11.go | 173 +++++ plugin_x11_dummy.go | 26 + qr.go | 57 ++ screenshots/1.png | Bin 0 -> 71316 bytes screenshots/2.png | Bin 0 -> 75459 bytes screenshots/3.png | Bin 0 -> 17817 bytes webdata/fn.js | 385 +++++++++++ webdata/icon.png | Bin 0 -> 1578 bytes webdata/index.html | 32 + webdata/main.css | 99 +++ webdata/sha256.js | 27 + webdata/tex.png | Bin 0 -> 3878 bytes 31 files changed, 2558 insertions(+) create mode 100644 COPYING create mode 100644 README.md create mode 100644 bindata.generated.go create mode 100644 bindata.go create mode 100644 desktop/remote-touchpad.appdata.xml create mode 100644 desktop/remote-touchpad.desktop create mode 100644 desktop/remote-touchpad.ico create mode 100644 desktop/remote-touchpad_128.png create mode 100644 desktop/remote-touchpad_256.png create mode 100644 desktop/remote-touchpad_512.png create mode 100644 desktop/remote-touchpad_64.png create mode 100644 flatpak/com.github.unrud.RemoteTouchpad.json create mode 100644 host.go create mode 100644 icon.go create mode 100644 icon_windows.syso create mode 100644 main.go create mode 100644 plugin.go create mode 100644 plugin_windows.go create mode 100644 plugin_windows_dummy.go create mode 100644 plugin_x11.go create mode 100644 plugin_x11_dummy.go create mode 100644 qr.go create mode 100644 screenshots/1.png create mode 100644 screenshots/2.png create mode 100644 screenshots/3.png create mode 100644 webdata/fn.js create mode 100644 webdata/icon.png create mode 100644 webdata/index.html create mode 100644 webdata/main.css create mode 100644 webdata/sha256.js create mode 100644 webdata/tex.png diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..951e288 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Remote Touchpad + +Control mouse and keyboard from the webbrowser of a smartphone (or any other device with a touchscreen). +To take control just open the displayed URL or scan the QR code. + +Supports with Linux/X11 and Windows. + +## Screenshots + +![screenshot 1](https://raw.githubusercontent.com/Unrud/remote-touchpad/master/screenshots/1.png) + +![screenshot 2](https://raw.githubusercontent.com/Unrud/remote-touchpad/master/screenshots/2.png) + +![screenshot 3](https://raw.githubusercontent.com/Unrud/remote-touchpad/master/screenshots/3.png) diff --git a/bindata.generated.go b/bindata.generated.go new file mode 100644 index 0000000..ef99e13 --- /dev/null +++ b/bindata.generated.go @@ -0,0 +1,363 @@ +// Code generated by go-bindata. +// sources: +// webdata/fn.js +// webdata/icon.png +// webdata/index.html +// webdata/main.css +// webdata/sha256.js +// webdata/tex.png +// DO NOT EDIT! + +package main + +import ( + "github.com/elazarl/go-bindata-assetfs" + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _webdataFnJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3a\xdd\x6f\xdb\xb6\xb7\xef\xf9\x2b\x4e\xf5\x50\xc8\x8d\x23\xdb\x29\x7a\x37\xd4\x75\xee\x75\x53\x77\x09\x96\x34\x81\xed\x6c\x35\x82\xa0\xa0\xa5\x63\x5b\xab\x4c\x6a\x22\x15\x27\xbd\xcd\xff\x7e\x41\x7d\x52\x14\x25\x67\x1d\xfa\x72\xf1\x33\xb0\x4e\x21\xcf\x39\x3c\xdf\x1f\x94\x7a\xaf\x0e\xe0\x15\x00\xc0\x29\x0b\x1f\x23\x7f\xbd\x11\x60\xbb\x1d\x38\xee\x0f\x7e\x85\x1b\x1a\xc5\xde\xbb\x58\xfe\xfb\x3f\x2c\x16\x01\x63\x5f\x1d\x97\x6d\x4f\x0e\x20\x47\x9a\x6f\x7c\x0e\x2b\x3f\x40\xf0\x39\x84\x24\x12\xc0\x56\x30\xc5\x2d\x13\x78\x34\x67\xb1\xbb\x09\x89\xe7\x94\xe0\x1f\x19\x5b\x92\x48\xc2\xae\x22\x44\xe0\x6c\x25\x76\x24\xc2\xb7\xf0\xc8\x62\x70\x09\x85\x08\x3d\x9f\x8b\xc8\x5f\xc6\x02\xc1\x17\x40\xa8\xd7\x63\x11\x6c\x99\xe7\xaf\x1e\x33\x22\xbe\x80\x98\x7a\x18\x81\xd8\x20\x08\x8c\xb6\x5c\x1e\x2a\xff\xf8\xed\xd3\x0d\xfc\x86\x14\x23\x12\xc0\x75\xbc\x0c\x7c\x17\x2e\x7c\x17\x29\x47\x20\x1c\x42\xb9\xc2\x37\xe8\xc1\x32\x27\x25\x91\x3e\x4a\x4e\x66\x19\x27\xf0\x91\xc5\xd4\x23\xc2\x67\xb4\x0b\xe8\x8b\x0d\x46\x70\x8f\x11\xf7\x19\x85\xd7\xf9\x31\x19\xcd\x2e\xb0\x28\xa3\x63\x13\x21\x45\x88\x80\x85\x12\xb5\x03\x84\x3e\x42\x40\x44\x89\xad\x28\x41\x53\x8f\xd4\x46\x29\xb4\x07\x3e\x4d\x0e\xd9\xb0\x10\x41\x6c\x88\x90\xf2\xee\xfc\x20\x80\x25\x42\xcc\x71\x15\x07\xdd\x8c\xd0\x32\x16\xf0\xe7\xf9\xfc\xec\xea\x66\x0e\xe3\x4f\x0b\xf8\x73\x3c\x9d\x8e\x3f\xcd\x17\x43\xd8\xf9\x62\xc3\x62\x01\x78\x8f\x29\x35\x7f\x1b\x06\x3e\x7a\xb0\x23\x51\x44\xa8\x78\x04\xb6\xca\x88\x5c\x4e\xa6\xa7\x67\xe3\x4f\xf3\xf1\xfb\xf3\x8b\xf3\xf9\x02\x58\x04\x1f\xcf\xe7\x9f\x26\xb3\x19\x7c\xbc\x9a\xc2\x18\xae\xc7\xd3\xf9\xf9\xe9\xcd\xc5\x78\x0a\xd7\x37\xd3\xeb\xab\xd9\xc4\x01\x98\xa1\x64\x0e\x33\x1a\x2d\x7a\x5f\x25\xd6\x8b\x10\x3c\x14\xc4\x0f\x78\xa9\x87\x05\x8b\x81\x6f\x58\x1c\x78\xb0\x21\xf7\x08\x11\xba\xe8\xdf\xa3\x07\x04\x5c\x16\x3e\xee\xb7\x69\x4a\x86\x04\x8c\xae\x13\x81\x33\xef\x72\x00\xce\x57\x40\x99\xe8\x02\x47\x84\x77\x1b\x21\xc2\xb7\xbd\xde\x6e\xb7\x73\xd6\x34\x76\x58\xb4\xee\x05\x29\x01\xde\x3b\x91\xec\xf4\x0e\x0e\xa0\xd7\x83\xdb\x01\x24\x26\xe9\xc2\x71\xfa\x80\xbc\x0b\xaf\xf3\xc7\xbb\x03\x97\x51\x2e\x60\x7e\x75\x73\x7a\xf6\xe5\xf2\xea\x8f\xc9\x97\xf9\xd9\x74\x32\x3b\xbb\xba\xf8\x00\x23\xb8\x1d\xf4\xbb\x30\x78\x23\xff\xbb\x1b\x56\x40\xe7\xe7\x97\x13\x69\xa0\x11\x1c\xbf\xe9\xe7\x5b\x09\xfe\xe5\xcd\x85\x5c\x1e\xe4\x8b\xb3\xd3\xe9\xd5\xc5\x45\xbe\xdc\x77\xfa\x6f\x86\x07\x92\xaf\xdb\xf0\xa1\xc7\xbb\xb0\x8d\x03\x71\xd7\x05\xc7\x71\x72\x5e\xae\xaf\xce\x3f\xcd\x27\xd3\x2f\xe3\xd3\xd3\xc9\xc5\x64\x3a\x9e\x9f\x5f\x7d\x92\xbc\xdc\xf6\xbb\xd0\xbf\xeb\xc2\xed\xaf\xbf\x74\x61\x20\x1f\x06\xbf\xbc\xce\x9e\xde\xbc\x79\xdd\x85\xe3\xbb\x82\xc9\x9b\xeb\x0f\xe3\xf9\xe4\x4b\x42\xe8\x8f\xf1\x05\x8c\x40\xe1\x72\xfc\xf9\xcb\xf9\x87\x8b\xc9\x97\x14\x68\x26\x99\xed\x0f\x0f\x0e\xee\x49\x04\x3b\x3e\x4c\xfe\x1f\x12\xaf\x78\x08\xc8\x12\x83\x6c\x5f\x48\xb5\x5d\x32\x69\xcf\x11\xac\x48\xc0\x71\x58\xae\xcf\x84\xcc\x14\x23\xe8\x2b\x6b\x17\x84\x8b\x09\xf5\xb4\xd5\x29\x06\x48\x38\x7a\xa7\x2c\xa6\x0a\x06\xa3\x6b\xe6\xd3\x75\x66\x1b\x29\xf3\x5d\xba\xb1\x65\xf7\xf8\x79\x16\x6f\x4b\x50\xb9\xb2\xa8\xac\x70\x37\x62\x41\xf0\xd9\xb0\x56\x85\xf3\x22\xb2\x5e\xfb\x74\x5d\x15\x20\x5f\x9d\xfb\x5b\x94\x21\x36\x02\x1a\x07\x41\xba\x17\x87\x1e\x11\x28\x77\xa2\xca\xba\xef\x05\x78\x93\xec\xf1\x94\xfc\xc1\x2a\xa6\xae\xcc\x14\xb0\x8a\x83\x80\xbb\x11\x22\x9d\x50\xb2\x0c\xd0\xb3\x3b\xf0\xbf\x07\x32\xa8\x22\x14\x71\x44\xc1\xf6\x98\x1b\x6f\x91\x0a\xa7\x06\x0a\xdf\xbf\x27\x90\xf2\x57\x40\xed\x70\xf9\xd5\x17\x1f\x9f\x05\xbb\x65\xdf\x24\xe0\x6c\x3f\x20\x6f\x25\x98\xa8\xa7\x33\x3c\x78\x52\x04\x8b\xf0\xef\x18\xb9\xc2\x88\x8d\xb9\x64\xfe\x0a\x6c\x74\x6a\x00\xf9\xb6\xfc\x19\xb6\xed\xce\x30\xd9\x7e\x02\x0c\x38\x66\x44\x52\x69\xa7\xed\xa4\x1a\x80\x8c\x04\xb7\xec\x9b\x02\x38\x33\x50\x33\x41\x98\x49\xf1\x3d\x7c\x19\x00\x0a\x42\x15\x5d\xe2\x83\x5f\x81\x51\xf4\x58\x98\xa8\x0a\xa3\x1e\xd4\x00\x62\xe0\x59\x73\xa2\xc9\x7e\x92\x26\xc0\x36\xc2\x5b\xf6\xed\x94\x50\x17\x03\xb3\x76\xdb\xe0\x5a\xc9\xf2\x67\xf0\xaa\x03\x99\x75\xad\x44\x59\x80\x12\xef\x59\x01\x99\x82\x3e\x2f\x20\x5b\x60\xab\x01\xd9\x06\xc8\x5b\x09\xca\xd4\xa3\xc5\x23\xf1\xbc\x12\xc5\xdd\x10\xba\xc6\xc9\x3d\x52\x71\xe1\x73\x21\xcb\xab\x1d\x64\x0f\x46\xef\xaa\x8b\xfa\x62\x34\x4a\xda\xb0\x95\x4f\xd1\x33\xea\x9b\x78\x5e\xf5\x04\x6b\xa5\x31\x60\x75\xa1\x38\x75\x9f\x33\xd6\xe5\xfd\x11\x0e\x52\x5a\x3f\xc6\x87\xd1\x38\x3f\xc2\xc4\x96\x7d\xfb\x41\x0e\x0c\x56\xff\x11\x06\x2e\x67\x25\x9d\xd3\xa6\xf3\x2b\xde\x23\x3b\xb2\xa4\xda\xda\x22\xed\x91\x84\xbf\xc5\x99\x20\xdb\x50\x8b\x8e\xf2\x7c\xdf\x43\x2a\xfc\x95\x8f\xd1\xdb\xb4\x96\x3b\xe5\x4a\xb7\x80\x0a\xc9\x1a\x3f\xe7\x00\xc9\x1f\xda\x5e\xd2\x2b\xb4\x00\x2c\xd4\xbd\x85\xb6\x57\x43\x56\x00\x0a\x09\xde\x96\x8f\xa9\xe4\xd5\xc0\x51\x7b\x8d\x73\xea\xe1\xc3\xfb\xc7\x73\xcf\xf6\xbd\x39\xfb\xe8\xd3\x42\xe3\xb2\xcf\xb5\x93\x5a\x9f\x54\x78\xf0\xe1\x9d\xd6\xa5\x38\x01\xd2\xb5\xd8\x0c\xc1\x3f\x3c\x54\xed\x94\x36\x08\x30\xd2\xc0\x6f\xfd\x3b\x45\x61\xc3\x83\x52\xaf\x2b\xb0\x25\xfc\x08\x74\x1e\xf2\x5f\x66\x0a\x7f\x58\xac\x3e\x1d\x94\xff\x66\xbb\x47\x83\xaa\x98\x2e\x09\xdc\x58\x8e\x2c\xd7\xcc\xa7\x02\xa3\xb1\xeb\x62\x80\x51\x32\x0a\x5d\xc6\x81\xb0\x79\x88\xd8\x2a\xae\xa9\x1d\x6d\x12\x9a\x1f\xc3\xc8\x88\x70\xeb\xdf\xdd\xf6\xef\x4a\xce\x49\x1b\xe0\x40\x01\x94\x6a\xe1\xc7\xf0\x6e\x04\x15\x46\xf3\x9f\xcb\xa8\xf0\x69\x8c\xba\x4e\x0a\x8d\x4a\x85\xf6\x1b\x34\x49\x8e\x4d\x68\x7c\xd0\xc8\xda\xd1\x40\x93\xa2\x1d\x54\x95\x23\xaf\x32\xa9\xbe\x8f\xf8\xa0\x03\x3d\x29\x99\x7c\xea\xc0\x2b\xb0\xc9\xf1\x11\x19\x74\xe0\x10\xc8\x60\xa8\x98\x55\x0a\xd1\x62\x01\x38\xa9\x4a\x97\x1d\x63\xe4\xa9\x85\x8c\xca\x6d\xc5\x9d\x06\x7a\xd0\x7c\xa8\xf6\xc9\x45\x15\x6d\xea\x9f\xe5\xde\x8e\x3b\x1c\xa9\x67\x5b\x99\x0f\xbe\x8f\x85\x60\x14\x06\xd0\xb7\xb4\x6a\x96\x76\xda\x72\xbe\x18\x53\x6f\x96\x34\xef\x95\xb6\xa8\xd2\x89\xa7\x47\xa8\xd2\x33\x7a\x53\x00\x24\xcc\x55\xfd\x48\x1f\x8a\x4e\xa0\x0f\x2f\x5f\x56\xdb\x78\x83\xb7\x54\xdb\x7f\x8e\xe2\x5c\x0a\x71\x4f\x02\x5b\x3b\xaf\xab\x8f\x5d\x9d\x7a\xa8\x56\xb5\xa9\xb1\x9b\x4b\xaa\x30\x74\x98\x4c\x92\x79\x42\x49\xe6\x20\x18\xc1\x25\x11\x1b\x47\x44\x31\x75\xed\x7c\x34\xea\x54\xa1\x16\x75\xa8\x45\x09\x25\xb5\x91\xec\x92\x25\x4f\x29\x74\xe0\x64\x04\x03\xf8\xfe\x1d\x2a\xeb\x8b\x74\x5d\x55\x49\x31\x8b\x1d\x8d\xd2\xe7\x61\x65\x6b\xa1\x6c\x2d\x14\xfd\xeb\xb3\x52\xbe\xa1\x3b\x87\x34\x3e\x58\x70\x98\xc9\x7a\x08\x56\xf1\xd7\xa2\xa3\x7a\xa8\x32\xf3\x55\x65\x2d\x07\x41\x45\x27\xd9\x24\x68\x82\x6c\xd2\x4b\x46\xc7\xa0\x99\x0c\xaf\xae\x1b\x65\x06\x3d\x1a\xe5\x7f\x0d\xb5\xed\x45\x65\xfb\x47\x74\x94\x46\x46\xa2\x97\x5c\x03\xb9\x9e\x72\xd6\xf4\x1c\xa2\xd2\x3e\x19\xd5\xee\x00\x54\x21\xdc\x00\x49\x54\xf8\xb8\xe2\xfd\x8a\x3b\x9b\x46\xe2\xba\x83\x6f\x08\xf5\x02\x4c\xaa\xb5\x8d\xf7\x42\x8d\x64\x63\x11\xad\x85\x5f\xe5\x5a\x01\xef\x85\x53\x94\xf4\x61\x15\x46\xbb\x92\xa8\xec\x19\x2e\x1b\xf2\xfd\xfa\x5d\x40\xd5\xbf\x44\x71\x13\x21\x0f\x4f\x7b\x3a\x2f\xe3\x79\xd8\x58\x31\x45\x7b\x67\x20\xc5\x17\x65\x37\x20\x48\xb4\xc6\xb4\xe1\x0b\x89\x27\x13\x52\xe3\x66\x72\x13\xf3\x4f\x4a\xa0\xe4\x3a\x8c\x50\xb6\x89\x1f\x70\x45\x64\xbd\x57\x8c\xa8\xd9\x20\x8c\xf9\xc6\xd6\x3a\xc2\x84\x8b\x6e\x55\xf5\x9d\x8e\xa6\xe0\xca\x1d\x8f\x2a\xe5\x8b\x5c\xbf\x3a\xcf\xca\x7d\x4e\x73\x2a\xab\x65\x95\xb6\x8c\x56\x95\xbb\x72\x17\xd4\x96\x1a\xb4\xa8\x6c\xcf\x0e\xb9\x58\x7a\xad\x7b\x61\x28\x45\x45\x20\xe5\xc9\x5d\x43\xd2\x64\x6c\x2b\x9f\x06\x67\x15\x51\xdd\xde\xa6\xd0\x9b\x50\x4f\x0d\xbc\x9f\xe6\xd2\x69\xb3\xfb\xa0\x75\xbb\x65\x5b\x2d\x4c\xcd\xaf\xa6\x55\x89\xff\xae\x5e\x7d\xdb\xdc\x5b\x73\x60\x1e\x06\xbe\x8b\x92\x50\x17\x06\xba\x93\x56\xb2\xc0\xe1\x61\xa3\x0b\x1b\xb2\x4c\x99\x45\x0d\xf9\xe4\xc4\x78\x77\x9c\x29\xaa\x96\xcb\xf2\x3c\x55\x1a\xf0\xe9\x19\x29\xb1\x48\x0a\xda\xd1\xb2\x2e\xbd\x7c\x69\x74\x12\xf5\xe4\xf6\xfe\xeb\x27\x30\xf1\x42\x91\xf5\xe5\xcb\xaa\x4a\xe1\x48\xcd\xea\xef\xaa\xd7\xe9\xba\x4f\x2d\x53\x4e\x6b\x89\xc5\x94\xd7\xb5\x52\x0c\xe9\x9b\x94\x14\x7d\xa0\x78\x4f\x39\x80\x9b\xa9\x1c\x37\x52\x79\xad\x50\xd9\x43\xe4\x75\x23\x11\xe3\xcc\xd1\x60\x21\x59\xd0\x33\x44\x59\xdf\x07\x96\x16\x32\x39\x51\x83\xe8\xf5\x84\xc2\x51\xe4\xb9\xa8\xd6\xc6\x77\x35\x33\xd4\xd4\x55\x25\xfe\x3c\x76\xfb\xd6\x9e\xfe\x37\xcd\x51\xe9\x85\xe0\x7f\xd2\xd4\xbf\x4e\x53\xd0\x96\x64\xea\x7a\x97\x50\xba\xd6\x79\xbc\xfd\x5c\x46\x5b\xb6\xb2\xa8\xae\xfc\x7f\xb2\x4c\xf2\xe6\xc7\xe7\x22\x2f\xfc\xfc\xef\x48\xa4\x03\x40\xc8\x76\xea\xa1\xc9\x0d\x15\x1c\xd5\x2e\x73\xbc\x87\x6c\x2f\x49\x67\x5d\x99\x3c\x0e\xa1\x89\xc0\xa2\x85\xc0\xa2\x20\xa0\x49\x65\x4e\xc8\xad\x55\x47\xce\x2a\x89\x54\x66\xa8\x5b\x33\xc9\x23\x18\xdc\xe9\xba\x6b\x70\x27\x83\x12\xa5\xe9\xfe\x89\xbe\x86\x55\xf4\xc7\x3a\x7a\xab\xb6\xaa\xe8\x32\x10\x3e\x60\x20\x88\x1e\x18\x0d\x24\x0c\x81\x93\x78\xfe\xe1\x48\x0a\xf2\x6a\xff\xa5\x59\x31\x09\x7a\x0f\x1d\xe8\x29\xe7\xbf\x82\x41\xbf\xdf\xef\x54\xe8\x2e\x12\xba\x8f\xff\x8c\xee\xe3\x1e\xba\x8d\x8a\x35\xd8\x61\x3f\xd6\xc2\xa0\xfe\x76\xac\x52\xc5\xcf\x69\x99\xda\x5b\x81\x3c\xab\x9d\x8c\x9a\xbb\x81\xd6\xde\x24\x99\xce\xf7\xce\x1a\x87\xa3\xd4\xca\xaf\xca\xf7\xf4\x0d\x83\x46\x0a\xb9\x30\x43\x2a\x0d\x44\x23\x43\xb5\x1e\x42\xbb\x18\x48\xd9\x50\xbe\x0c\x18\x1a\xa0\x17\x25\xf4\xa2\x09\xfa\x49\x9b\xc8\xb5\xab\x33\xe3\x9d\xff\x86\x04\x92\x53\x9c\x22\x0f\x19\xe5\x68\x6f\x91\x73\xb2\xc6\x4a\x21\xd8\x90\xab\xe5\x5f\x72\x0c\xc1\x1d\xfc\xc5\x67\x67\x63\xdb\x9a\x9d\x8d\x8f\x8e\xdf\xfc\x97\xd5\x05\x6b\x3e\xf9\x3c\xcf\xab\x7b\x0a\xea\x70\x14\x67\x97\xe3\xd3\xdf\xf1\x31\xa7\x67\x86\x4b\xf9\xb4\x77\x3e\xf5\xd8\xce\x09\x98\x9b\x78\xbf\xb3\x21\x7c\xe3\xf0\x78\xc9\x45\x64\x0f\xf2\x1c\x98\x5d\x42\x2e\x05\x23\x76\x86\xbe\x4e\x8f\xb1\xad\xf7\x8b\xf9\x64\x66\x75\xd2\x0b\xc4\x8c\x5a\xfd\x95\x48\xc0\x88\x67\x75\x21\x17\xde\x56\x65\x24\xb1\xd8\xc8\x52\xe2\x12\xa1\xdf\x1d\x24\x1f\x23\x84\x48\xd3\x69\xab\x78\xe5\xb2\x46\x91\xbd\x9f\x49\x8a\x92\x95\x81\x58\xca\x3d\x93\x1b\x30\x9e\x50\x6b\x44\x4a\x21\x72\x1c\x39\xf2\xb7\x00\x87\x44\x85\x4c\xe6\xff\x3d\xe0\x09\x8c\xca\xd1\x57\x7c\x5c\x32\x12\xb5\x1e\x93\xc3\xa8\x78\xe5\xbb\xac\xa2\x77\x6d\xc4\xd7\x61\x55\x3a\x02\x1f\x44\x1b\xae\xdc\xcf\xe1\x53\xdd\x38\x5c\x3c\x06\xe8\x78\x3e\x0f\x03\x22\x2b\x83\x45\x19\x45\xab\x50\x43\xeb\x7e\x2e\x4a\x2b\x90\x3c\xd3\xb9\x27\x41\x8c\x72\xc3\xca\x5e\xc3\xec\x78\xe6\xf0\x7f\xe2\x72\xc6\xdc\xaf\x28\x6c\x6b\xc7\xdf\xf6\x7a\xb2\xb1\x2d\x3d\x95\x71\x41\xc9\x16\xe1\xb0\x12\xb3\xca\xcf\x2e\x60\x43\x16\x09\xf8\x6f\xb0\xde\x56\x28\x24\xab\x6f\xc1\xb2\x3a\xcd\x34\xac\xde\x8e\x4b\xad\x64\x8c\x39\x8c\x66\x51\x25\x1d\x35\xf7\xe6\xe4\x62\x47\xcf\x92\x15\xb7\xd6\xf3\xd0\x8e\x3b\x89\x8e\x6d\xed\xfe\x21\x8d\x34\x53\x5e\xd1\xa3\xa4\xda\x05\xe4\x93\x40\x3d\xa9\x24\xbc\x39\x1e\x11\x44\xed\x68\xb2\x88\x69\x35\x4e\x2e\xc8\xc6\xe7\x82\x45\x8f\x0e\x17\x44\xa0\xcc\xaa\x8a\x9b\x6a\x62\x35\x1b\x7d\x15\xe0\x83\x55\x95\x35\x31\xfe\x8a\xb9\x31\xb7\xf7\x0d\x3a\x46\x67\xd3\x48\x66\xaa\x7a\xca\xdf\xe5\x25\xc6\x4a\x94\xac\x9a\x4a\xb7\x92\xe1\x7b\x04\x5d\x28\xf3\x77\x1d\x55\xeb\x3c\x57\x9f\xfb\xa2\xa6\x5d\x89\x09\x60\x01\xd7\x14\xa4\xaa\x5e\x72\x6d\xec\xcd\x38\x79\xbe\x30\xe4\x6e\x37\xf0\xdd\xaf\x56\xb7\x29\x42\x9e\xfb\x2b\xa3\xe5\x27\xd9\xe0\xdf\xe9\x56\xf3\x26\xb3\x73\xe6\xa1\x10\xc6\x7c\x33\x93\xe1\xa0\xa4\xec\x2e\x58\xe9\xa7\xa7\xf0\xbb\x96\xc5\x9f\x94\xb7\x1a\x2f\x0c\x5f\xa4\xa9\xc2\xea\x19\xbc\x55\xa2\x54\xf6\x1a\x4a\xa3\x09\x7f\x9a\x0d\x4c\x31\x5b\xff\xc2\x2c\x24\x5e\xfd\x26\x22\x5f\x69\xf4\x50\x99\xd7\x7e\xb2\x77\x36\xab\x45\x29\x50\x2f\x46\x49\xa5\x68\xb8\x81\xc9\x6d\x3e\x97\x55\x56\x56\x99\x12\xb3\x63\x48\x7b\x6a\xcd\xab\x2a\x24\xa1\x9a\xb6\x51\xb9\xb7\x2d\x89\xfb\xd5\xd6\x7c\x29\x03\x61\x34\x64\x61\x96\x98\xf7\xd4\xa3\x26\xd7\xcf\x7d\x5f\x17\xed\x39\x39\x17\x9e\x5b\xe8\xa1\xf1\x0a\xab\x59\xd4\x52\x27\x4f\x65\xcb\x51\x77\x80\x64\x74\xe1\x72\x6a\xb7\xba\xea\x9b\xae\x6e\xf1\xdd\xe4\x1e\x5c\xa4\x5e\x81\x39\xa1\xde\xb3\xf1\xdc\xe4\xc2\xac\x40\x4d\xef\xcf\x9e\x8d\x2d\x87\x9c\x02\x57\x8e\x0b\x25\xe6\x53\xf9\xf8\x7f\x01\x00\x00\xff\xff\x87\xf5\x90\xa3\x3f\x30\x00\x00") + +func webdataFnJsBytes() ([]byte, error) { + return bindataRead( + _webdataFnJs, + "webdata/fn.js", + ) +} + +func webdataFnJs() (*asset, error) { + bytes, err := webdataFnJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/fn.js", size: 12351, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _webdataIconPng = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x00\x2a\x06\xd5\xf9\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\x42\x28\x9b\x78\x00\x00\x05\xdc\x49\x44\x41\x54\x78\xda\xed\x59\xcf\x6b\x17\x39\x14\xff\x24\x93\xf9\xce\xd4\x56\xa4\x88\x15\x6f\x4a\xa1\xa5\xd4\x73\x0b\x05\x11\x6f\xeb\x71\xc1\xed\xa5\x57\xf7\xb8\xfb\x17\xb8\x7b\xd0\xf3\xee\x61\xb7\xff\x44\x57\x3c\x89\x22\x78\xf1\xd2\x53\x11\x85\x9e\x7a\xf0\x26\x75\x29\x54\x51\x4b\x67\xe6\x3b\xc9\x64\x0f\x9a\x21\x93\x6f\x92\xc9\x7c\xeb\xc2\xc2\xe6\x03\xe5\xdb\xc9\xe4\x25\x2f\xef\x57\xde\x7b\x03\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\xfc\xef\x40\x7c\x2f\xa5\x94\x6b\x00\x12\xed\x19\x52\x4a\x34\x4d\xd3\xf9\x35\xc7\x85\x10\x9d\xf9\xe6\xdc\xa6\x69\x26\x68\x6d\xf3\xf4\x31\x00\x1d\x3a\xd7\x3c\x93\x46\x08\xc1\x6f\xdc\xb8\xb1\x37\x48\x00\x65\x59\xfe\x74\x7a\x7a\xfa\xc7\x78\x3c\x86\x94\x52\x17\x88\xf7\x7f\xf5\x4b\x08\x69\x19\x30\x04\xda\x4b\x3b\xe4\xbd\x94\x12\x84\x90\xf6\xd0\xea\x7f\x73\x5e\x5d\xd7\x28\xcb\xf2\xe7\xb5\xb5\xb5\x3f\x7b\x05\x50\x14\xc5\x2f\x9f\x3f\x7f\xbe\xaf\xa4\x78\xf9\xf2\x65\x27\x33\x7d\xbf\xbe\xb1\x21\x34\xd3\x08\xac\x69\x1a\x10\x42\x40\x08\xc1\xbb\x77\xef\x90\x24\x09\x4e\x4e\x4e\x7e\x5d\x5f\x5f\x7f\xe0\x14\x80\x94\xf2\xca\xf1\xf1\xf1\xa1\x32\xa5\xf9\xf9\x79\x5c\xbf\x7e\x1d\x84\x90\x8e\xc4\x4d\xe9\x2b\xad\xb7\x8b\x1a\x9a\x50\xcf\x3a\xad\x49\x73\x26\x3f\x36\xf8\xd0\xf7\xfe\xf0\xe1\x03\xf6\xf7\xf7\x71\x74\x74\x04\x29\x25\xde\xbe\x7d\x7b\xe5\xf6\xed\xdb\x7f\xab\xf7\x4c\x5f\xe8\xe4\xe4\xe4\xbe\x3a\xfc\x57\xff\xc1\xc2\xc2\x42\xd0\xc6\xff\x99\xa0\x66\xf0\xc4\x18\x6b\xdd\x91\x10\x82\x4b\x97\x2e\x3d\x00\xf0\xa3\x7a\x4f\x75\x62\x21\xc4\xf7\x2e\xbf\x75\x04\x49\x2f\x23\x7d\x63\xff\x86\xf0\x7c\xb1\xe7\x2b\x0f\x9d\x33\x52\x63\xe2\x45\x9b\x8f\x85\x9a\xab\xf2\x39\xd7\xe1\x42\xd7\x1c\x2a\x18\xd3\xfd\x7c\x16\x41\x08\xb9\xe8\x13\x80\x73\x71\x97\x60\x4c\x7a\xdd\xd7\xa7\x05\xa5\xb4\xf7\x60\xa1\x42\x31\x03\xa4\xb9\x0e\xf5\x69\xc0\x76\x58\xc5\xdc\xb7\xd0\x8e\x2b\x20\xea\xfb\x87\x0a\x7e\xda\xd8\x44\xcf\x22\xd1\x10\x3f\xec\xbb\xc2\xfa\x2c\x2c\xd4\xf5\xa6\xc9\x37\x9c\x02\x38\x3c\x3c\x74\x26\x15\x43\xb5\x3e\xf4\xbd\x8a\x23\x3e\x6b\x09\x1d\x0f\x51\xda\x44\x0c\x60\x8c\xe1\xe9\xd3\xa7\x60\x8c\x39\x19\xd1\x99\x54\x7f\x7d\x4c\xd8\xc6\x86\x1e\x96\x52\xea\x9c\xaf\xde\xf5\xa4\xf6\x13\xeb\x32\x73\x02\x21\xa4\xe3\xe7\x7a\x46\xa5\x88\xd5\x66\x94\xd2\x4e\x9e\x6e\xfa\xb3\x2d\x45\xd6\xe7\x52\x4a\xdb\x7b\x5a\xed\x63\xbb\xca\xd4\xfe\x42\x88\x8e\xf0\xf4\xb5\x93\x24\x01\xe7\x7c\xb0\x15\x30\x9f\xa4\x5c\xc1\x45\x15\x3b\x59\x96\xa1\xae\x6b\x10\x42\x30\x1a\x8d\xda\xcd\xc6\xe3\x71\x3b\x56\x55\x15\xd2\x34\x85\x94\x12\x9c\x73\x30\xc6\x90\x24\x5f\xea\xab\xaa\xaa\x5a\x81\xa6\x69\x0a\x21\x04\xea\xba\x06\x63\xac\x73\x13\x8c\xc7\xe3\x76\x3f\xc5\x5f\x5d\xd7\xa0\x94\x22\xcb\xb2\x96\x1f\x57\x06\x3a\x38\x08\xea\x1a\xb7\x45\x67\x73\x2e\xa5\x14\x52\x4a\x54\x55\x05\x21\x44\xeb\x3e\x66\xb1\x42\x29\x45\x92\x24\x28\xcb\x12\x55\x55\x75\x34\x5e\x96\x25\x92\x24\x69\xe7\x37\x4d\x83\xba\xae\x21\x84\x40\x92\x24\x68\x9a\x06\x42\x88\xf6\x59\xad\x55\xd7\x75\x2b\x70\xdd\xd2\xcc\xfd\x95\x40\x7b\x83\x60\x48\x81\x13\x72\x53\xa8\xcd\x6d\x99\x99\xcf\x57\x15\x9d\xa2\x55\x73\xd3\x34\x05\x21\x64\xc2\xcc\x6d\x77\xbb\x79\x7d\x4a\x29\xf1\xe4\xc9\x13\x5c\xb8\x70\xa1\x3f\x08\xda\x18\xb1\x05\x1e\x7d\xae\x62\x94\x31\x06\xc6\x18\x84\x10\xed\x58\x9e\xe7\x6d\xcc\x50\x9a\xcd\xb2\x0c\x79\x9e\x5b\x4b\x58\x1d\x79\x9e\xb7\x87\x56\x9a\x57\xd6\x05\x00\x9c\x73\x8c\x46\x23\xa4\x69\xda\x2b\xd8\x2c\xcb\xac\xca\x60\x21\x89\x90\xeb\x6e\x56\x3e\xac\xfc\x5e\xd5\xde\xca\x2d\xca\xb2\x9c\x88\xd4\x9c\xf3\x8e\xa9\x2a\x3a\x42\x08\xca\xb2\xec\x58\x91\x72\x13\x25\xa4\xb2\x2c\x41\x29\xc5\xe9\xe9\x69\x6b\xd2\xe6\x1e\xae\xc4\x6b\x50\x10\xf4\x55\x59\x7d\xa5\xae\xbe\xa1\x8a\x0d\xb6\x2b\xcb\x46\x63\xde\x02\xe6\x7b\x15\x3c\xf5\x5b\xca\xb5\x86\xee\x06\x84\x90\x56\x31\x41\x89\x50\x5f\xe3\x22\x44\xb2\x21\x89\x8b\xbe\x96\xb9\x66\x5f\x23\xc5\x57\x84\xd9\x3a\x46\xb7\x6e\xdd\xc2\xa7\x4f\x9f\xfa\x6f\x01\x97\xb9\xfb\x0e\x1d\x52\xb4\xe8\xb7\x41\x68\xdd\x11\x9a\x0a\x9b\xeb\xea\x3c\xab\xf1\xd1\x68\x64\x8d\x01\xde\x20\x18\x0a\x1f\x9d\xab\x0b\x34\x4d\xc5\x18\x52\x62\x0f\xae\x3c\x5d\xc5\x4c\x68\x19\xec\x2b\x7f\x5d\x9a\x99\x96\xf1\x90\x26\x8b\xcd\xff\x83\x8b\x21\x95\xad\xdd\xbc\x79\xb3\x8d\xd6\x3e\x93\xee\xcb\xb6\x6c\x81\xf1\x2c\xbd\x82\x21\xb4\xba\xcb\xf9\x2c\x94\xda\xb4\xbf\xb8\xb8\x38\x11\x89\x6d\x4d\xcf\x50\x86\x5c\x01\x6e\x68\x05\xa9\x5b\x66\x08\xad\xab\x70\xf2\x16\x43\xa6\xb6\xd4\xdd\xac\x47\x54\xf5\xab\xe7\xff\x43\x7c\xd7\x56\x41\xf6\xb9\x84\x2f\x69\x6a\x9a\x66\x22\x1d\xd6\xbe\x71\x78\x0b\xa2\xde\x44\x48\x3f\xa4\xd9\x12\x2f\x8a\x02\x79\x9e\x4f\xd5\x21\x76\x69\x73\x1a\x14\x45\x81\xb9\xb9\x39\x6b\x94\xcf\xb2\xcc\xcb\x17\x0b\x35\xdf\x6b\xd7\xae\xe1\xdc\xb9\x73\x98\x9d\x9d\xc5\xee\xee\x6e\x5b\x99\xd9\x5a\x5b\x36\x6b\xb1\x7d\x5b\xf8\x56\xed\x76\x5d\x41\x7a\x41\xa6\x2b\xcf\x15\x04\x3b\x02\xe0\x9c\x97\x00\x72\xdb\xa7\xa5\x99\x99\x19\xbc\x7a\xf5\x0a\x57\xaf\x5e\xc5\xf9\xf3\xe7\x3b\x69\xf0\xd0\x62\xaa\xaf\x06\x70\xc5\x88\xbe\xf9\x4d\xd3\x60\x6b\x6b\x0b\xcb\xcb\xcb\x78\xfd\xfa\x35\x1e\x3f\x7e\x3c\xb1\xde\x78\x3c\x2e\x7c\xb7\xc0\x23\x5f\x82\xc2\x39\x3f\x53\xab\x6c\xda\xfb\x7b\x88\x45\x54\x55\x85\x8f\x1f\x3f\x4e\x58\xa8\xd6\x47\x78\x64\xb5\x80\xd5\xd5\x55\xec\xed\xed\xfd\xb6\xb1\xb1\xb1\xa5\x4a\x4e\x15\x79\x93\x24\xc1\xf1\xf1\x31\xd6\xd7\xd7\x41\x08\xc1\x9b\x37\x6f\xda\x46\x84\x2d\x6d\x75\x7d\x3e\x1b\x52\x6b\xf8\x3e\x77\x99\xef\x54\x47\xa9\x69\x1a\xec\xec\xec\xa0\xae\x6b\xa4\x69\x8a\x2c\xcb\x3a\xe5\x33\x21\x04\xcf\x9f\x3f\xff\x7d\x61\x61\x01\x47\x47\x47\x5f\xc6\x4c\x46\xf6\xf7\xf7\xff\x9a\x9f\x9f\xff\x41\xf5\x07\x77\x77\x77\x9d\xbe\xce\x39\xef\x94\xba\xbe\xac\xd0\x3c\x54\xe8\xbc\xbe\x4c\x53\x75\xa8\x54\xa1\x64\x5a\x2f\xe7\x1c\x1b\x1b\x1b\xe0\x9c\xe3\xe0\xe0\xe0\xe1\xe6\xe6\xe6\x66\x47\xf0\x36\x6d\xbc\x78\xf1\xe2\xe1\xca\xca\xca\x9d\xba\xae\x7b\x99\x1d\x32\x36\x0d\x8d\x4f\x20\x21\x63\x4a\x51\x2f\x5f\xbe\x7c\x74\xf7\xee\xdd\x3b\x13\x96\xe7\x32\xc9\xa5\xa5\xa5\xe5\x7b\xf7\xee\x7d\x37\x1a\x8d\x66\xcc\xc5\xf5\x06\xa8\xad\xfb\x62\xeb\x2d\xba\xde\xd9\x7a\x90\xb6\x67\xbd\x4c\x76\xed\x69\xa3\x2b\x8a\xa2\xd8\xde\xde\x7e\xf6\xfe\xfd\xfb\x03\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\xc0\x3f\x7d\x90\x35\x14\x7a\x41\x74\xf4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\x01\x00\x00\xff\xff\x28\x1c\x87\x5b\x2a\x06\x00\x00") + +func webdataIconPngBytes() ([]byte, error) { + return bindataRead( + _webdataIconPng, + "webdata/icon.png", + ) +} + +func webdataIconPng() (*asset, error) { + bytes, err := webdataIconPngBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/icon.png", size: 1578, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _webdataIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xb1\x8e\xd4\x30\x10\x86\xfb\x7b\x0a\x33\x35\x49\x00\x09\x44\x11\x47\x42\x77\x57\x50\x81\xd0\x21\x41\xe9\xd8\xb3\xc9\x70\x8e\x6d\xec\xc9\xde\xed\x3b\x50\x53\x52\x40\xc3\x73\xf1\x24\x68\x63\xed\x25\x97\xdd\x45\x54\xc9\xfc\xf3\xcf\xe7\x19\xdb\x72\xfd\xe4\xea\xdd\xe5\xcd\xe7\xf7\xd7\xa2\xe7\xc1\x36\x17\xf5\xfe\x23\xac\x72\x9d\x04\x74\xd0\x5c\x08\x21\x44\xdd\xa3\x32\xf9\x77\x0a\x07\x64\x25\x74\xaf\x62\x42\x96\x30\xf2\xa6\x78\x0d\xa2\x5a\x1b\x9c\x1a\x50\xc2\x96\xf0\x2e\xf8\xc8\x20\xb4\x77\x8c\x8e\x25\xdc\x91\xe1\x5e\x1a\xdc\x92\xc6\x62\x0a\x04\x39\x62\x52\xb6\x48\x5a\x59\x94\xcf\x9f\x8a\x41\xdd\xd3\x30\x0e\xb3\x30\x26\x8c\x53\xa4\x5a\x8b\xf2\xd9\x89\xf5\x7a\xe6\x50\xe0\xd7\x91\xb6\x12\x3e\x15\x1f\xdf\x14\x97\x7e\x08\x8a\xa9\xb5\xb8\x58\xfc\xed\xb5\x44\xd3\xe1\xe3\xfa\xa4\x23\x05\x16\x29\x6a\x09\x1b\x57\x7e\x49\xd0\xd4\x55\x16\xcf\xb8\x52\xaf\x5e\xbc\x7c\x75\xce\xc9\xc4\x16\x9b\x0f\x38\x78\x46\x71\xe3\x47\xdd\x07\x65\xea\x2a\xcb\xb3\xcd\x92\xbb\x15\x7d\xc4\x8d\x84\x41\x91\x2b\x75\x4a\x20\x06\x34\xa4\x24\x24\x1d\x11\x1d\x88\x88\x56\x42\xe2\x9d\xc5\xd4\x23\xf2\xe3\xbe\x17\x00\xd2\xde\x95\xc1\x75\x20\x78\x17\x50\x02\x0d\xaa\xc3\x6a\x12\x32\xa2\xf7\x91\xf5\xc8\x62\x6f\x7c\xa0\xd4\xd5\x7c\xb4\x75\xeb\xcd\x6e\x01\x37\xb4\x15\x64\x24\xf8\x80\x8e\x5c\x07\x73\x6a\x4a\x87\xe6\xd2\x3b\x87\x9a\xc9\x75\x65\x59\xd6\x55\x58\xd4\x56\x86\xb6\x27\x50\xda\xfa\x84\xe6\x98\x74\x45\x49\x67\x18\x9a\xff\x02\x05\x75\x4c\x39\x24\xac\x6a\xd1\x42\x33\x6f\x7b\x58\x39\xf7\x10\x6d\x55\x4a\x12\xda\x91\xd9\xbb\xb4\x62\xe5\xdd\x98\x52\x13\x74\x33\x5a\x9b\xcf\x23\x8b\xd0\xfc\xf9\xfe\xb3\xae\x72\xf0\xef\xd2\x5b\xdc\xb5\x5e\x45\xf3\x50\xf8\xed\xf7\xa9\xc2\xf5\x9c\x67\xc6\x3e\xd0\xd6\xb3\x33\xde\xb3\x8a\xa8\x26\xd3\x3e\xd8\xdf\xca\x83\xb8\xf2\x2e\x9a\x4b\xe8\xe6\xc6\x7e\xfc\x3a\x6e\x6c\xd1\x47\x5d\xe5\xeb\x51\x57\xf9\xa1\xf8\x1b\x00\x00\xff\xff\xb9\x03\xa0\x33\x39\x04\x00\x00") + +func webdataIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _webdataIndexHtml, + "webdata/index.html", + ) +} + +func webdataIndexHtml() (*asset, error) { + bytes, err := webdataIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/index.html", size: 1081, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _webdataMainCss = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\xed\xae\x9b\x30\x0c\xfd\xcf\x53\x78\xaa\x26\xdd\x2b\x35\x77\xbd\x1f\x93\xa6\xdc\x3f\x7b\x95\x40\x5c\x9a\x35\xc4\x28\x31\xa2\xdd\xc4\xbb\x4f\x21\x94\x42\x0b\xdd\x1a\xa9\x42\xc7\x71\x7c\x7c\x7c\x02\x07\xae\xec\x16\x72\xd2\xe7\x2d\x6c\x6a\xa5\xb7\xb0\x39\xe2\x39\x27\xe5\xe3\x23\xd5\xe8\x8c\x2b\xb7\xb0\x29\x2c\x05\xd4\xf0\x27\x03\x00\x68\x8d\xe6\x83\x84\xd7\xdd\xee\xeb\x67\x0f\x1c\xd0\x94\x07\x9e\x22\x95\xf2\xa5\x71\x12\x76\x9f\x59\x97\x65\xf1\xfc\x21\x77\x4f\x8e\xc5\x5e\x55\xc6\x9e\x25\x04\xe5\x42\xbf\x61\x28\x1d\xd0\xe9\xbc\x61\x26\xb7\x5e\x3c\x57\xc5\xb1\xf4\xd4\x38\x2d\x0a\xb2\xe4\x25\x6c\x3e\x76\x71\xc1\x17\x53\xd5\xe4\x59\x39\xfe\xbc\xdd\x69\x2a\x55\xa2\x84\xc6\xdb\x27\xc6\xd3\x4b\xed\xca\xe7\x54\x77\xa5\x88\x36\xa1\xb6\xea\x2c\x61\x6f\xf1\x94\x4e\x53\xd6\x94\x4e\x18\xc6\x2a\x48\x28\xd0\x31\xfa\x14\xf8\xd5\x04\x36\xfb\xb3\x28\xc8\x31\x3a\x9e\x07\xfb\x76\x83\xf9\x8d\x12\xde\xb0\x4a\xd8\x40\xbb\x3d\x18\xc6\x84\xb4\xe4\xb5\x68\xbd\xaa\x25\xe4\x1e\xd5\x51\x44\x60\x14\x66\x9d\x53\x7c\x12\xda\x78\x2c\xd8\x90\x93\xf1\xe4\xa6\x72\x63\xa2\x55\x39\xda\x21\x7b\xd4\xea\x2d\xae\x94\xce\x78\x62\x11\x0e\x4a\x53\x2b\x7b\x20\xfe\xc4\x6b\x7d\x4a\x7f\x3b\xd8\xbc\xff\x88\x6b\x3b\x06\x1f\xc5\x7a\xfc\x41\xde\x2c\x34\x51\xa7\x1d\xcc\x93\x93\xd5\x53\xf3\x08\xa6\x5a\x82\x6a\x98\x66\x68\x4e\xcc\x54\x4d\x03\x7d\x1b\xfd\x78\x56\xb5\xff\xb8\x68\xff\x40\xe9\x7d\x63\x6d\x28\x3c\xa2\x1b\x2d\x78\xb9\x0a\x23\x70\x35\xe8\xaa\x1b\xd9\x2b\x17\x6a\xe5\x71\xb4\x21\x79\x8d\x5e\xf6\xfd\x07\xb2\x46\x43\x6e\x55\x71\x9c\x06\xc7\xa6\x1c\x39\xbc\xb9\x52\x2f\xdf\x47\xee\xe9\xda\x8d\x3e\xfa\xb7\xb7\x96\xda\xba\x10\x4f\x85\x2d\xee\xf9\x52\x36\xee\x9e\x77\x3c\xdf\xeb\x13\xa3\x2b\xc7\x61\x22\xe9\x8c\x34\x8f\xe9\x19\xff\xef\x5b\x4f\x6d\x4a\x8d\xa3\xbc\xbc\x28\x2c\x9e\x24\xbc\xcd\x35\xbc\xd6\xf6\x98\x3a\xbf\x22\x4b\x72\xdc\x8f\x67\x72\xeb\x06\x64\x98\x46\x97\x65\x2f\xa9\xeb\xb0\x4c\x3c\xf2\xbb\x9f\xff\x8a\x34\x03\xde\x5b\x78\x61\xa8\xfd\x7b\xb2\xcb\xb2\x9f\x15\x6a\xa3\xe0\xa9\x52\x27\xa1\x42\x8d\x05\x0b\xaf\xd8\x90\x84\x8f\x6f\xef\xcf\x43\x8d\x5b\x41\x1f\xdd\xfc\x18\xeb\xb2\x94\x76\x47\x76\x65\xee\x37\xa1\x9e\xf3\xa2\x59\x57\x7c\xb9\xf8\x49\xe8\xb2\xee\x6f\x00\x00\x00\xff\xff\x19\xc9\xf5\x7f\x5c\x06\x00\x00") + +func webdataMainCssBytes() ([]byte, error) { + return bindataRead( + _webdataMainCss, + "webdata/main.css", + ) +} + +func webdataMainCss() (*asset, error) { + bytes, err := webdataMainCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/main.css", size: 1628, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _webdataSha256Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x5b\x77\xdb\x38\x92\x7e\xd7\xaf\xa0\x75\xb6\xd5\x84\x55\x96\x01\x10\xe0\x45\x14\x94\x63\x3b\xce\xa5\x3b\x9d\xce\xe4\xb2\xdb\x33\x1a\xe5\x1c\x90\x04\x49\x8d\x28\x4a\xa6\x28\x3b\x8e\xe5\xfd\xed\x7b\x40\x52\x37\xdb\x99\xf4\x65\x1e\xf6\x85\x02\xc0\x62\xa1\x50\xf5\xe1\x43\x15\xa9\xd3\xe3\x96\x71\x66\xfc\x24\xaf\xe5\x87\xb0\x98\x2c\x4a\x63\x32\x5b\x64\x6a\xa6\xf2\x52\x96\x93\x79\x6e\xcc\x63\xa3\x4c\x95\xf1\xe1\xd5\x99\x11\xcb\xd9\x24\xbb\xd5\x23\xa9\x5c\xa6\x6a\x09\x86\x5c\xb6\x8c\x48\xc5\x93\x5c\x45\xc6\x24\x37\x5e\xbc\x7e\xf7\xc1\x78\xf7\xe9\xdc\x20\x2e\x3e\x61\x86\xcc\xa3\xdd\x10\xc5\x54\xcb\x1b\x37\x2a\xcb\xf4\xaf\x56\x1a\xce\x8b\x42\x2d\x17\xf3\x3c\x9a\xe4\x49\xcb\x78\xf5\xcb\xd9\xc5\xc3\xe9\xe5\xf2\xe9\x09\x3c\x57\xb6\x5a\xc6\xc5\x7c\x71\x5b\x4c\x92\xb4\x34\x28\xc6\xee\x09\xc5\xc4\x35\xce\x8b\x89\xcc\x8d\x8f\xab\x42\x4d\xc1\x20\x9e\xa7\x87\xb1\x67\xbc\x93\xab\xcc\xf8\x69\x9e\xe6\xcb\x72\x9e\x1b\x1d\xe3\x62\x9e\x97\xc5\x24\x58\x95\xf3\x62\xd9\x32\x9e\x4f\x96\x75\x4f\x45\xc6\x2a\x8f\x54\x51\xd9\x77\xfe\xe1\xb9\xf1\x66\x12\xaa\x7c\xa9\x5a\xc6\x07\xa5\x8c\xb4\x2c\x17\xfd\xd3\xd3\x50\x66\x93\x44\xdb\xd7\x4b\x26\x65\xba\x0a\x7a\xe1\x7c\x76\xfa\xaf\xe5\x87\x57\x67\xa7\x46\x3c\x2f\x8c\xd9\xbc\x50\xc6\x24\x8f\xe7\xc5\xac\x5a\x45\xeb\xf8\xb4\xf5\xe3\x6a\xa9\x0c\x3d\x49\x58\xfe\xe8\x9b\xf1\x2a\x0f\xf5\x1d\xf3\x35\xba\xdb\xb4\x8d\x1b\x33\x04\x09\x11\xba\xbb\x96\x85\x91\x09\x0c\x81\x18\x8d\x21\x11\x18\x62\xc8\x61\x0a\x0a\x52\xb8\x82\x5b\x58\xc0\x4c\x1c\x11\x28\xf5\xdd\x42\x5f\x56\xf0\x55\x1c\x11\x3f\x12\xd1\x7a\x7d\x77\xef\xc7\x22\xea\xa9\x3c\x9c\x6b\xaf\xae\xd7\xed\x4f\x1f\x5f\xb8\x6d\x7f\x25\xa2\x5e\xbe\x9a\xbd\x9f\xaf\xf2\x68\xb9\x5e\x13\x7f\x12\x9b\xab\x23\x21\x16\xb2\x58\xaa\xd7\x79\x69\xae\x80\x60\xb4\x5e\x93\xe1\x0a\x95\x69\x31\xbf\x31\x2e\x8b\x62\x5e\x98\xed\xed\x43\xc6\x6c\xb5\x2c\x0d\x69\x4c\xf2\x52\x25\xaa\x30\x86\xc2\x20\x6d\xa4\xf5\x60\x21\x44\xd8\xcb\xe4\xb2\x7c\x9d\x47\xea\xcb\xaf\xb1\xd9\xfe\xf0\xea\xec\xa4\x0d\x18\xa1\x49\x6c\x5e\x89\xed\x72\x03\x90\xe8\xae\x50\xe5\xaa\xc8\x8d\x33\xdd\x83\x10\xdd\xc3\xed\x81\x00\x64\x10\xd7\x3e\x48\x40\x69\xf5\x95\x32\x4a\x59\x5b\x4f\xb3\x5e\xd7\x5d\x6e\x57\x5d\x94\x08\x53\x76\x6d\x3e\x1c\x0e\xbd\xc1\x80\xa1\x2e\xe1\xa0\x04\xb1\x7d\x95\x2d\x95\x71\xb0\x90\x4f\xb9\xfa\xb2\x50\xa1\x0e\xb1\xd2\x23\x1a\x50\x95\xaa\x07\x98\x6b\x23\x3f\x9e\x17\xa6\x1f\xf4\x32\x95\x27\x65\x3a\x10\x89\x8f\x82\xde\x62\xb5\x4c\x4d\x8c\xfc\x60\x24\x87\xc3\x21\x1f\xaf\x05\xa1\xee\x60\x40\xd9\x89\xfc\xc1\xa2\xbe\x14\xb2\x9b\xf9\xc1\x28\x19\x0b\xd9\x61\xd4\x63\x9e\xed\x50\x8f\xfb\xad\x60\x94\x9c\x90\xb1\x90\xa7\xdb\x41\x7b\x8d\xfd\x4c\x6c\xd4\x57\x93\x49\x81\x7d\x39\xc8\x7c\xd9\x15\x0a\xc5\xe2\xcc\x0c\x7a\xcb\x6c\x12\x2a\x53\x82\xec\x2a\x04\x31\x84\xe8\x91\x2b\x50\x20\x46\xf1\x08\x8f\x21\x1e\x11\x7d\xa1\xfa\x62\xe9\x0b\xd3\x17\xae\x2f\xf6\x78\x5c\xbb\x62\xfb\xf0\xc6\x71\x81\x88\xff\x9a\x93\x9a\x30\x06\xf7\xb0\xd8\x8b\xdf\x36\xbc\x9b\x15\xa0\x7b\x38\xb4\x3a\x15\x9c\x50\x50\x82\x52\xf6\x0d\xd3\xb6\x12\xfc\xa9\x38\x5e\xa4\xf3\xa5\xaa\xac\x32\xae\xa5\xde\xec\xa5\x31\x59\x1a\xf9\xbc\x34\x96\xab\xc5\x62\x5e\x94\x2a\x6a\xa3\x3f\xfd\xdc\x54\x9c\x9b\x12\x62\xe4\xe7\xe2\x8b\x19\x22\xbf\x4c\x27\xcb\xde\x52\x95\x9a\x9c\x7e\x56\x0f\x90\x9a\xd4\x38\xad\x50\x7a\xa4\x77\xc1\xec\x70\xef\x54\x8c\x36\x55\xb7\x86\xcc\x0a\x25\xa3\x5b\x63\xa9\xca\x36\xf2\x5b\x1b\xf1\xaf\x87\xe2\x17\x32\xaf\xcc\x51\xa5\xb1\x7b\x32\x2e\x55\x61\x84\x32\xcb\x26\x79\x62\xac\x16\x91\x2c\x95\x46\xa8\x30\x13\xbd\xd9\xd1\xe3\x9d\x2e\x9b\x15\x98\x01\xf2\x03\x21\x7b\xc1\x24\x7f\xa3\x72\x0d\xd0\xde\xb5\xcc\x56\xca\x57\x22\x1d\x0e\x87\x96\x9f\x08\x75\xca\x4e\x2a\x26\x50\x83\xe0\xd4\x45\x77\x35\x14\x6f\x4d\x09\x01\x60\xd0\xeb\x47\xbe\xdc\xdf\x06\x72\xbb\x0d\xe4\x28\x19\x77\x44\x83\x69\xcc\xf0\xfd\x26\x94\x6a\xb8\x55\xf5\xbb\x9f\xd5\xc2\x81\xc0\x7e\xa0\x05\x83\xae\x20\xa8\x1c\x05\x63\x21\x47\xc1\xf8\xb3\x87\x3d\x4e\x29\x73\x6d\x28\xb6\x63\x84\x33\x8f\x73\xdb\xa5\xae\x9f\x8b\x2b\xb3\x84\x1c\xf9\x99\x48\xfd\x99\x38\xc2\xf7\x75\xc8\x6a\x4f\xed\xc2\x25\xeb\x50\x85\x10\x83\x82\x48\x60\x58\x54\x5e\xe0\x7e\x28\xa6\xd5\x7a\x13\xe4\x4b\x11\x6e\xbc\x15\x8b\xb0\xf1\x56\x28\xaa\xfd\x5e\x6d\x53\x25\xb0\xaf\x06\xa1\xaf\xba\x62\x81\xa2\x6e\x3a\x10\xb2\xd3\x31\xb5\x09\x71\x83\x76\x05\xaa\xbb\x40\x90\x23\x88\xba\x22\x45\x7e\xd6\x15\x91\x1f\x88\xcd\xed\x68\x38\x1c\xb6\x38\xf2\x13\x21\x7f\x48\xfd\xaf\x3b\x73\x13\x55\xbe\x92\xcb\x74\xcf\xde\x0d\x09\x46\x90\xc2\x14\xae\xbe\x05\xb1\x06\x33\x1a\x20\x46\xa3\xa4\xc1\xcc\x52\x95\xa5\xc6\xcc\x06\x4a\x15\xb8\x2f\xcc\x18\xf9\xcb\x9b\x49\x19\xa6\xda\x25\xa1\x5c\x2a\xa3\xfd\xea\xf2\xb7\x76\x3f\x3a\xf0\x55\xb3\x89\x9f\x9b\x12\x14\x4c\xd1\xbd\x1f\x14\x4a\x4e\xfd\x5a\xfe\xdc\x66\xdf\x90\xbf\x7c\x5a\xfe\xef\x1f\x2f\x3f\x7c\xe3\x89\x17\xfa\x89\x07\xf2\x67\xef\xdf\x9f\xfd\xfd\xfc\xd3\x8b\x17\x97\xef\xdb\xfd\xb2\xb8\xbd\x4b\x45\xae\x6e\x8c\xb3\xa2\x90\xb7\xe7\xab\x38\x56\x85\x89\xd1\x7d\x28\xf5\x22\xae\xd1\xdd\x81\x3f\xf6\x9e\x3d\xdc\xdb\x46\x70\x6b\x68\x57\x1b\x2a\xbf\x9e\x14\xf3\x5c\x53\x59\x1b\xf9\xf7\x4f\x5a\xf5\xf2\xc0\xaa\x48\xc5\x72\x95\x95\xfd\x83\x89\xea\xd3\xbd\x3e\x14\x03\x65\xbc\xba\xfc\x0d\x8c\x73\x9b\x81\x51\xad\x16\x8c\x79\x61\xec\xaf\x03\xf9\xad\xfb\x2b\x71\xbb\x25\x76\x04\x09\x64\xb0\x30\x73\x54\x1f\x37\xa9\x20\x7e\x3a\x58\xf9\xa9\x46\xbf\x16\xbc\x02\xb5\xdd\x83\x8d\x55\x91\x79\x85\xf6\xf0\xf2\xcb\xd9\xc5\x93\x78\x99\x42\x09\xab\x0a\x2f\xe4\xfb\x78\xd1\xe0\xb8\x99\x94\xe9\x7c\x55\x1a\xf1\xa4\x58\x96\x4f\xe1\xa6\xfc\x73\xb8\x29\xff\x20\x6e\x1e\xc9\xff\x55\xdc\x44\xff\x0f\x71\x33\x5f\x95\x8b\x55\xf9\xe2\x8f\xa3\x67\xfa\x0d\xf4\xac\xc4\x95\x59\x34\x40\x59\x89\x5b\xb3\x4e\x14\x57\x7b\xa8\x59\xa1\xfb\xfb\x6d\x96\x39\x33\xd1\xdd\xae\xf7\xfc\x30\xe7\x6c\xb7\x7d\x79\x2a\x5c\x5f\xf7\x02\x48\xfc\x1d\x31\xcb\x9a\x97\x13\x11\x8e\x82\xe1\x70\x48\xc7\xc3\xe1\xd0\x3d\x36\xad\x6e\xf0\x03\x3b\x3e\x21\x08\xb2\xae\x68\x63\x42\x2d\xc6\x6d\xc7\xf5\x64\x10\x46\x2a\x6e\xf7\xc2\x54\x16\x67\xa5\x99\x0c\x87\x43\xd6\x21\x1c\x75\xff\x8d\x8c\xbe\xbf\x35\xba\x57\xfb\xe9\xd3\x62\xa1\x8a\x67\x59\xaf\x9c\x57\xad\x0b\xb9\x54\x26\xea\x67\xbb\x05\x5c\x3e\x5c\x00\x04\x42\x9e\xba\x90\xe8\xa4\xb9\xb2\x3f\x11\xd8\x4f\x06\x81\x9f\x74\x85\x85\xf4\x40\x2c\x92\x2e\x19\x04\xcf\xc2\x51\xd2\x25\xd5\x5a\xfa\x18\x72\x91\x74\x69\x33\x48\x77\x83\x66\x38\x4a\x0e\x96\x9b\xd4\xcb\xed\x50\xce\xd1\x60\x40\xec\xb5\x19\x6f\x6e\x99\x49\x97\xa0\x83\xdb\xee\x3a\xdf\xbb\x49\xf7\x6e\x42\x2c\xb0\xcf\x86\xb1\x1f\x6b\xaf\xba\xc7\x49\xd7\x3e\x8e\x07\x42\x3e\xd3\x6e\x3c\x3b\xbf\x78\x7e\xf9\xe2\xe5\xab\xd7\x3f\xfd\xfc\xe6\x97\xb7\xbf\xbe\xfb\xdb\xfb\x0f\x1f\x3f\xfd\xf7\xff\xfc\xf6\xf7\x7f\xd4\x2e\x4b\xd2\xc9\xbf\xa6\xd9\x2c\x9f\x2f\xae\x8a\x65\xb9\xba\xbe\xf9\x72\xfb\x75\xe7\xd6\xee\xe9\xd6\xa5\x7a\xf6\x96\x7d\x6c\x5a\x27\x31\xea\xd8\x16\xea\xeb\xe3\xa8\x17\xd8\xec\x9d\x8c\x36\x9e\xde\xf3\xe5\x0b\xed\xcb\x86\x45\xb4\x27\xb3\xca\x93\x87\x38\xc8\xbe\x83\x83\x6a\x71\x51\x57\x7c\x28\x8b\x49\x9e\xf4\xe2\x62\x3e\xbb\x48\x65\x71\x31\x8f\x94\x99\xec\xc2\xbb\x9b\xf4\xe5\xfe\xa4\x7a\xbe\x0c\x82\x47\xdb\x36\x42\x90\xf8\x49\x35\xfc\x69\x92\x97\x6e\x75\x4f\x27\x38\xda\xb0\x4c\x60\x3f\x1b\x44\xfa\xac\x25\x28\x19\x65\x63\x11\x8e\xb2\x03\xdb\xb2\x9d\x6d\xbb\xb4\x75\x6b\xc1\x85\x19\xd6\xf3\x4b\x71\xb7\x87\xba\xfe\x11\x81\xda\x55\xfd\xb6\x68\xc3\x32\x95\x53\xf5\x46\xe5\xfd\x13\x72\xef\x87\xba\x10\xb9\xbb\xf7\xe5\x3e\x4c\x45\xb8\xdf\x5b\xaf\x8f\x88\x7f\x54\x97\x46\xa9\x5c\xfe\x7a\x93\xbf\x2b\xe6\x0b\x55\x94\xb7\x66\xbb\x56\xdb\x46\x9d\x8e\x29\x9b\x70\xe8\xd4\xa3\x6a\xd4\x79\x7e\x30\x9f\x67\x4a\xe6\xed\x23\x21\xca\xdb\x85\x9a\xc7\xc6\xc1\x54\x87\x9c\xfe\x3a\xbf\x96\xd9\x24\x32\xf6\x04\x8c\xfa\x78\xaa\x88\x7c\xbe\x68\x32\x76\x9d\x77\xb6\x97\x55\x60\x0e\x14\x37\x13\x3f\xa9\xb3\xbe\xf7\xa4\xba\xc6\x93\x72\xe7\xc9\xf3\xbd\x58\x3e\x3a\x2d\xaa\xec\xb4\xbf\x6d\x13\xfb\xfc\xf2\xa0\xfb\xe6\xb2\xdd\xff\x37\xbc\xb9\xc9\x73\xb7\x9c\xa9\xf5\x81\xd1\x68\xaa\x18\x73\xa3\x06\xf9\xf7\xcd\xe4\xe1\x37\x8f\x2a\x08\xa0\x89\x7a\x2c\x36\x69\x2a\x44\x9b\x2a\xbb\xaa\x6a\x8f\x84\x88\x7f\xa0\x87\x6e\xa9\x61\x6d\xcc\x63\x4d\xd9\x86\xf6\xe0\xd6\x9e\x49\x6e\x04\xb7\xa5\xfe\x0d\x8b\xaa\x50\x5a\xb6\x75\x02\x1e\xac\xd7\x23\x3c\xae\x11\x83\xfd\x2b\x11\x56\xb9\xb7\xc6\x6d\x24\xb0\x1f\x0d\x62\x3f\xea\x0a\x8a\xee\xa6\xbb\x52\x5c\xf6\x96\xab\x60\x59\x16\x66\x04\x14\x01\xb1\x2b\x48\x4c\x96\x6f\xe5\x5b\x73\x8a\xbe\x6b\x4f\x38\xcf\x4b\x39\xc9\x97\xc6\xa4\x09\xa1\x26\x03\x19\x96\xaa\xd0\x06\xb5\x52\x51\x65\xa1\x04\x75\xaf\x9a\x9c\x56\xe7\xc1\x74\xaf\xdc\x55\x87\xe5\xae\x1a\xaf\xc5\x74\x30\xa8\x36\x52\x5a\x6f\xa4\xfb\x3a\xf4\x77\x55\x86\xdc\x0f\xa0\x4e\x9a\xfb\xec\x38\xee\x86\xf7\x87\x67\xf2\xc7\xcb\xdf\x3e\x1e\x78\x3e\x84\x60\x43\xd7\xd5\x6b\x0d\x81\x9b\x17\x1b\x33\x58\x40\xb1\x73\x58\xf5\x36\x43\x3b\x2c\xaa\x1c\xa6\xa1\x5b\x21\x48\x08\x21\x2b\x1a\x2f\x84\x05\x4d\x42\xbe\x29\xa5\x95\x66\x80\x9a\xe2\xc3\x8a\x03\x35\xed\x9c\x95\xa6\x42\x90\x8b\xd1\x18\x08\x75\x87\xf1\xb3\xbc\x5e\x5c\x8c\xfa\x14\x33\x3d\x60\x36\x23\xc4\xa3\x6b\xcd\xe6\x36\x82\xcd\x08\x75\xd7\xb1\x66\x4e\xd4\xe7\x9c\x7a\xf6\x30\x5e\xaf\xb9\x63\x31\x36\x10\x5b\x3d\x94\xb2\xea\x29\x42\xa1\x12\xd7\x0a\x3a\xb6\x05\xdb\x67\xfb\xa6\xb6\x0b\x62\x61\x73\x6e\xd9\x5d\xd3\x8c\x3b\x04\x53\x4b\x1f\x1f\x78\xfd\xc0\xce\xfa\xce\x66\x7a\xca\x70\xad\xda\xdd\xaa\x26\x74\xab\xfb\xd1\x44\x08\x52\x81\xfd\x74\x90\x6f\xfc\x51\x25\x93\x77\x0b\x31\xed\xb6\xea\x60\xcf\xc4\xe2\x41\xb0\x67\x87\xc1\x9e\x8d\xd7\x22\x1f\xa5\xe3\x2a\xde\x45\x77\x51\xc7\xdb\x9f\x76\x05\xd9\x56\x78\xdb\xdd\xab\x43\x51\x97\x9d\xd5\xb6\xdb\x8b\x0c\x85\x5c\x1c\x8c\x77\x3a\x47\x78\x4f\xf4\xa8\x1e\x22\x4f\x06\xf0\xee\x51\xf4\x6a\x1e\xcd\x3b\x1d\x33\x15\x71\x73\x7c\xa6\xfa\x78\xad\xce\x5e\xe4\xeb\x15\xfe\x81\x05\xc6\x8f\x57\x47\xbf\x01\x69\xf7\x78\xda\x8d\xee\xbf\x93\xc6\xee\x73\x09\xde\x91\x88\x46\xb4\xc6\xed\x89\x4e\xc3\x65\x6f\xa9\x64\x11\xa6\xe6\xe9\xe7\x91\x3c\xf9\x7a\x76\xf2\x0f\x7c\xe2\x89\xee\x3f\x4f\xc7\xdd\xff\x3a\x45\x4f\x73\xef\x76\xe3\x56\xdc\x22\x97\xea\xc4\x66\x46\xc3\xdf\xba\x98\x93\xbd\xc9\xe6\x7d\x9b\x68\xa3\xaa\xc2\x2f\xd4\x22\x93\xa1\x32\x4f\xff\x29\x4e\x13\x68\xb5\xeb\x17\x74\x27\xe4\x48\x88\x69\xa7\x33\x1d\x6c\xa8\xee\xe9\x09\x7f\x14\x3f\x1a\xf1\x7c\x95\x47\x4f\x4e\xf8\x90\xcb\x66\x7b\x5c\x36\x15\xd8\xdf\x69\xd7\x1e\x65\xe8\xee\x4a\x6c\x99\x6c\x0a\x0c\x6d\xe8\xa6\x0a\xf9\xd5\x41\xc8\xa3\xff\x44\xd2\xb3\x71\xc6\xd5\x48\x8d\x11\xa4\x6b\x11\x0d\x06\xc4\x3d\xb1\x8f\xd5\x5e\xf1\xbe\x99\xf7\x84\x34\x60\x5b\x88\xb8\x3b\x6b\xf8\xf8\x21\x76\xa2\x43\xec\x44\xe3\xb5\x30\x35\x5b\x12\xfb\xc4\x3d\x56\x9b\x24\x4f\x13\xe3\x06\x4a\x3a\x9d\xbb\xff\x26\x96\x1e\xd3\xe3\x13\x25\xce\x0e\x4d\xd1\xe6\xb5\xef\x23\xd7\x4f\xf7\x5c\x9f\x0b\xec\xe7\x3b\xd7\xe7\x5d\xd1\xd2\x0e\x95\xfb\x5b\x28\xd7\xd4\x90\x77\xa7\xd0\xb0\x3d\xec\xb1\x7d\xa7\xb3\x5d\x23\xd4\x6c\x1f\x1d\xb2\xbd\xff\xad\xe5\x6c\xe6\x7c\xb4\xaa\x3f\x52\x88\x65\xff\xc9\x42\xec\xf7\xf8\x2e\x6f\x7c\x97\x3e\x4c\x27\x25\xda\x3b\x96\x65\x4f\x1f\xe6\x6f\x6a\x9f\x46\x1a\x29\x4a\x44\x5d\x7d\x5e\xa9\x07\x0e\x9c\x1e\x3a\x70\x3a\x5e\x8b\x74\x14\x8d\x1b\x1f\xaa\xef\xfa\x70\x37\xcf\x9e\x1f\x7f\xf7\x2b\x07\x7d\xbe\x7e\xb7\x74\x7c\x9c\x75\x17\x75\xa6\xd6\xdc\xd0\x0e\x91\xeb\x70\x30\xb0\xe8\xc9\x5e\x3a\xf7\xd3\xa6\xb6\xda\x88\x75\xe4\xe7\xff\x0d\x3b\x7b\x6a\x7e\x7e\x42\x22\xec\x44\x9f\xe5\xbe\xd0\x1b\x9d\x86\x35\x02\x7a\x5e\x8a\x3e\xeb\x1f\x62\xd5\xbf\x94\xa2\x9d\xec\x2f\x0f\x64\xed\x46\x96\x34\xb2\x7c\x4f\xf6\xed\x03\x59\xa7\x91\x75\xd1\xe7\x2a\xc2\x3b\xc9\x5f\x1f\x48\x92\x8d\xa8\x57\x8b\x12\xbc\x93\x7d\xb7\x5f\x8f\x98\x61\x47\x1f\xda\x1c\x75\x4d\xd9\xb4\x9a\x48\x9a\x66\xf5\xa0\xad\xef\x6c\x1a\x51\xdd\x68\x04\xab\xea\x30\xaa\x3b\x3b\xf5\x7f\xab\x3d\x06\x59\x3d\x45\xf0\xd4\x14\x5d\x33\xda\xb6\xb2\xdf\x3d\x6d\xd7\xcc\x36\x0d\x5d\x99\xb5\x1e\x58\x12\x3c\xb4\xe4\xfd\xc6\x12\x08\x9a\xcf\x2d\xbf\xd7\x96\xae\x19\xfc\x59\xab\xaa\x46\xf2\xd8\x4f\xc9\x43\xeb\xbe\xec\x8a\xb2\xd1\x18\xa2\xef\x7d\x66\xda\x14\x1b\x62\x64\x51\xcb\xb5\x1c\x82\x2d\x0a\x1e\x61\x84\x63\xdb\xb6\xc0\x25\xd4\xc1\xd4\xf3\x3c\x60\x84\x31\x8f\x50\xdb\x73\x80\x51\x0f\x3b\x0e\x77\xb9\x03\xc4\xe1\xd8\xc6\x16\xa6\x1c\x88\xed\x31\xec\xd8\xae\xe5\x81\x45\x31\xc3\x0e\x67\xd4\x1d\x43\x24\x46\xc4\x71\x3c\x6c\x59\x0e\xb6\xc0\x22\x8c\x11\x8b\x51\xc7\x01\x82\x89\xe5\x61\x46\x19\x05\xea\x38\x16\x73\xb1\x63\x53\x20\x16\xf7\x5c\xcf\x22\xc4\x03\x6a\x63\xec\x52\xea\x51\x06\x9c\xba\x8e\xc5\x6c\x8b\x03\xe1\x8c\x30\xee\x51\xca\xc7\xb0\x2d\x52\x36\x9f\x49\xfa\xfb\x5c\xba\xf9\x32\xd2\x97\x22\xf2\x1f\xde\xb0\x5c\xa6\x6f\x8c\x34\x93\xcd\xa0\xbe\xb6\xf6\x3b\xdf\xb8\x8e\x1f\x69\xe2\x84\x3e\xd2\xf4\x07\x14\x3d\xc9\x57\x9f\xf2\x69\x3e\xbf\x39\xf8\xe4\xa2\x09\xfb\xf1\xa7\x99\xb7\xf3\x7d\x99\xe5\xc1\x07\x99\xc7\x55\xe6\xd9\xc1\x2b\x1f\x08\xea\x77\x3d\x4d\xd6\x35\x83\x02\x16\x70\x03\x25\x7c\x81\x15\x7c\x85\x33\x38\x87\x0b\x78\x0e\x97\xf0\x02\xae\x35\x94\x5e\x3e\xfc\x8e\x16\x1d\x7e\x52\x8c\x50\x21\x6c\x06\x37\x82\xc0\x0b\xf1\x76\x35\x0b\x54\x01\xa5\x78\x07\x5f\xc4\xdf\x60\x25\xde\xc3\x57\xf1\x16\xce\xc4\xaf\x70\x2e\xde\xc0\x85\xf8\x05\x2e\xc5\xcf\xf0\x5c\xfc\x04\x2f\xc5\xab\xbf\xf6\x3d\x2d\x12\x52\x9f\x52\x99\x90\x23\x32\xf6\x03\x21\x47\x74\xec\x27\x42\x8e\xac\xb1\x1f\x0b\x39\x62\x63\x3f\x17\x72\xc4\xc7\x3a\xf3\x1b\xd9\x63\x5f\x09\x39\x72\xc6\xd5\x99\xb5\x10\x2d\xec\x2f\x06\x85\xbf\xd0\x27\x15\xb1\x87\x8b\x67\x3a\x15\x3e\xbe\x81\x54\x84\xbb\x54\xf8\x19\xee\x87\xa3\xd9\x18\x66\xfb\x83\x5d\x52\x0f\x77\xc9\x18\xae\x47\x8b\x71\x75\x2c\xbe\x30\x53\x98\x21\xd4\xaf\x06\xbe\x98\x67\xe6\xf5\x68\x71\x42\xc7\x48\x4b\x9c\x38\x63\xf8\x5a\x0d\x10\xde\x8c\x10\x5b\x67\x5c\x62\x65\x2a\xb8\x30\x63\x04\xcf\xcd\x2a\x22\x08\x5e\x8e\x16\xb5\x56\x04\x33\x51\x9a\xe7\x66\x84\xe0\xd2\xac\x49\x07\x81\x12\x53\x98\x8a\x1c\x72\x11\x43\x2c\x4a\x33\x81\x14\x41\x22\x02\x08\x44\x06\x99\x88\x20\x12\x65\x65\x88\xaf\x5d\x23\x4a\x33\x02\xdd\xd0\x5d\xa2\xbb\x19\xe8\x86\xee\x52\xdd\x0d\x40\x37\x74\xd7\x1a\x57\xda\x74\x43\x77\x99\xee\xc6\xa0\x1b\xba\xcb\x75\x37\x07\xdd\xd0\x5d\x5b\x77\xa7\xa0\x1b\xba\xeb\xe8\xae\x02\xdd\xd8\x43\x9f\xc6\xda\x2b\xff\x95\x18\x11\x42\x6c\x8b\x53\x86\x5d\x20\xae\xe7\x31\xe6\x30\x46\xc0\xc2\xcc\xb3\xa8\xc5\x1c\x02\x96\x47\x09\xc6\x1e\x77\x2c\xf0\x6c\xe2\xb9\x0e\xd1\x35\x1a\xc7\xae\xe7\x60\xcf\xb3\x80\x32\x6e\xd9\x16\x77\x98\x0b\xd4\x75\xb0\x63\x5b\x94\x12\xb0\x6c\xca\x2c\x97\x60\x17\x83\x45\x30\xf7\x5c\x86\x09\xd8\xd8\xa1\x94\x53\xc7\x05\xc2\xa8\xed\xba\x5a\x1b\x10\x8f\x72\xec\xb8\x96\xeb\x02\x25\x36\xc5\x8e\x4b\xb1\x0d\x2d\x6a\x13\xe6\xba\x2e\xd1\xec\x44\x99\x4b\x29\xe5\x5a\x97\x6b\x71\x4d\x4f\x98\x00\xc3\x94\x52\xca\x1c\x87\x01\xb5\x99\xc5\x1c\xec\xb8\x60\xe3\x9a\xb0\x5c\x70\x1c\x4c\x39\xf7\x5c\x5d\x4f\x32\x8f\x70\x4c\x28\x05\xc2\x39\xc7\x2e\xb1\x3d\x0a\xc4\xf3\x6c\x6c\x33\xcf\xb5\x81\x72\xce\x28\xc5\xae\x4b\x81\xba\x94\xb8\x16\xb3\x98\x07\xd4\xe3\xd4\xf3\x6c\x17\xbb\x60\x51\x82\x2d\x62\xd9\xda\x1b\x96\x65\x73\x87\xb8\x1e\x01\x8b\xbb\x4c\x33\x20\x21\x40\x88\xe5\x51\x5b\x7b\xc3\xb2\x5c\xca\x88\xeb\x71\xb0\x6d\xdb\xc2\x0e\xc5\x1c\x1c\xc7\xd2\xaa\xaa\x82\xda\x63\x0e\x77\x2c\x47\x33\xaa\x67\x13\xcd\xa3\x44\x53\x34\x27\xae\xe5\x60\x0c\xc4\x73\x6d\xdb\x26\x98\x13\xa0\x44\x2f\xc1\xb6\x38\xd6\x2e\xb6\x3d\x6e\x63\xcb\x01\xea\x58\x98\xb9\xdc\xa3\x44\xdb\xaa\x29\x9e\x11\x02\x16\xe5\x9e\x63\x61\x17\x63\xb0\x2c\xc6\x1d\x9b\x39\xda\x56\x4e\x6c\x6c\x73\x97\x38\x60\xd9\x18\x5b\x9c\xba\x98\x01\xc3\x1e\xe3\x0e\xf1\xb0\x07\x54\x1f\x06\x96\xc5\x18\x30\x0b\xd3\x8a\xee\x81\x63\xdb\x63\xae\x4d\x6c\xb0\xb9\x87\x6d\xcc\xb9\x0d\xae\x6b\x79\x9e\xe3\x3a\x0e\x78\xdc\x25\x96\xc7\x1d\x02\xc4\xa2\x54\x47\x45\xd7\xf2\x5c\xdb\x4e\xb1\xc6\x85\xc3\x1c\xd7\xb1\x1c\xc7\x03\xe2\x71\xce\x6d\x1d\x23\xa0\xda\x4a\xcc\x5c\xc2\x81\x56\xd3\x60\xc6\x29\x50\xcb\x26\x2e\xa7\x8c\x32\xa0\x8c\xba\xcc\xb2\x99\xc3\xa0\x45\x1d\x6e\x3b\x16\x23\xae\x53\x1f\x58\x16\x61\x8e\x07\x96\x45\x3d\x8b\x72\xea\xb9\x63\xbf\xbd\xa1\x4e\xcd\x6f\xcd\x5b\xbf\xfa\x5f\x35\x9d\x4e\xfd\xdb\x93\xb3\xe8\x59\xdd\xdc\xfd\x37\x65\x9b\x32\xdd\xdc\xa3\x7e\x7b\x95\x37\x7f\xc4\xd9\x7b\x75\xa8\xbe\x68\x9a\x5e\x3e\x33\x9f\xbc\x3b\x9b\x47\xab\x4c\x75\x3a\xf5\x6f\xaf\x11\xee\x74\xcc\xc3\x01\x71\x83\x60\xd7\xec\xbf\xee\x55\xff\xa4\x11\x37\xf7\xc8\xd4\xe9\x3e\xf2\x5b\xff\x17\x00\x00\xff\xff\x8a\x1d\x7d\x6b\xa4\x24\x00\x00") + +func webdataSha256JsBytes() ([]byte, error) { + return bindataRead( + _webdataSha256Js, + "webdata/sha256.js", + ) +} + +func webdataSha256Js() (*asset, error) { + bytes, err := webdataSha256JsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/sha256.js", size: 9380, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _webdataTexPng = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x00\x26\x0f\xd9\xf0\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\x00\x00\x0e\xed\x49\x44\x41\x54\x78\xda\x75\x9b\xe7\x72\x1b\x4b\x0e\x85\x31\xdd\xd3\x13\x49\x51\xf2\x7d\xff\x47\x5c\x8b\x69\x72\xe8\xfb\x63\x01\xd7\x67\xac\xd6\x55\x2a\xd2\x13\x3a\xa0\x81\x83\x83\xc0\x42\x44\x3e\xe5\xbf\xff\xee\x22\xf2\x25\x22\x2f\x11\x29\x44\xe4\x43\x44\x46\x11\xa9\x45\x64\x12\x91\x56\x44\xa2\x88\x3c\x45\xa4\x14\x91\x55\x44\x92\xde\x2f\x74\x8c\xa7\x8e\x21\x22\xf2\x5b\x44\x6e\x22\xf2\xd6\xf7\x2e\x22\xb2\x88\xc8\xa6\x63\x05\x9d\xf3\x43\xaf\x1d\x22\xd2\x8b\xc8\xa0\x9f\x9b\xce\xc3\xb1\x0b\x11\x69\x74\x8d\xb5\x5e\x5f\x74\x9e\x5d\xc7\x4c\x3a\xd6\x53\x44\x3a\x11\xa9\x44\xe4\xd4\x35\x1c\xf8\xbc\x8b\xc8\x67\x21\x22\xff\xe8\x66\xa2\x2e\xf6\xa2\x0f\xd8\xdf\xa9\x93\xd5\xd8\x98\x88\xc8\x2f\xfd\x3c\xf4\xfd\x56\xbf\x8b\x2e\x30\xeb\xe6\x6c\x61\xab\x2e\x5e\x9c\x40\xef\xba\xe8\x02\xf3\x65\x9d\xaf\xd2\xe7\xa3\x7e\x9e\x2a\x98\xac\xe3\x66\xdd\xe4\x43\x85\x60\x07\x79\xc5\xbb\x6f\x9d\x4b\xdc\x7c\x8d\x88\xcc\x85\x4e\x7c\xd3\x81\x1b\x1d\xb8\xd0\xc1\x0b\x11\x99\xf5\x7a\xc4\x06\xc5\xfd\xdf\x16\xde\x38\x21\x5c\xf5\xfb\xa6\xf7\x3b\x3c\x2f\x38\x11\xd1\xb9\x46\x08\xe6\x70\xc2\x7a\xe9\x18\xbf\x70\xf2\xb5\x6a\x4c\x83\x75\xed\x2a\xec\x52\xd7\xde\xeb\xb8\x9d\x8e\x1b\x39\x77\xd0\x53\x8a\xfa\xe2\x1d\x2a\x57\xe8\xf5\x80\x17\x16\x6c\xee\x50\x21\xd9\xa4\xa6\x7a\x0f\x8c\x11\xf5\x1d\x33\x15\x53\xbd\x51\x37\x33\x61\xe1\xd9\x09\x68\xd0\xef\xad\x6e\xe4\xaa\xe6\xfa\x82\x60\xb8\xf9\xbb\xce\x57\xeb\x38\xa7\x0a\x21\xc2\xcc\x0f\x98\x5b\x14\x91\xdf\x51\x17\xbb\xaa\xa4\x0a\x48\x48\x74\xf3\x41\x17\x57\xea\x46\xde\xaa\x5e\xb6\xb9\x52\x27\xb5\x67\x4d\xf5\x6c\xc3\xb3\x7e\x8f\x3a\x8e\x61\x40\xd2\x3f\x5b\x7c\xa3\x8b\x36\xed\xab\x74\x83\x2d\x4e\xae\xd0\x8d\x47\x7d\xbe\xc4\x5a\x7b\x9d\x6f\xd2\xcf\x46\xff\x82\x0a\xcd\x84\x61\x9a\x91\x04\x17\x2e\x6a\xdb\x3d\x06\x7c\xe9\xc9\x6e\xba\x81\x13\xf6\x65\x42\xb2\x05\x3c\x74\xa1\xa3\x5e\xcb\xba\x88\x0a\x9b\x34\x01\x35\xba\x80\x08\xa1\x98\xe9\x94\x18\xdb\xd6\x76\xa8\xd0\x57\x08\xbb\xd0\xb1\x0c\x28\x03\x80\xb2\xd2\xbf\xd5\x1d\x5e\x80\x69\xd9\xbd\x22\x02\x3c\x3a\x7d\x38\xea\xe6\x3f\x75\xa0\x11\xf6\x66\x92\x0b\xb8\xb6\xeb\xe6\xef\x2a\xc0\x87\x6e\x28\xc1\x56\x03\xd4\x3d\xea\xb8\x19\xf3\x65\x00\xe1\x5d\xc7\x34\x01\x6c\x7a\x40\x83\x2e\xdc\xbc\x52\xa9\xd7\x78\x08\x3d\x4e\xb8\xc6\xf5\xc6\x61\x4f\x65\x42\x8c\x58\x68\xd6\x81\x33\x54\x67\x56\xc1\xd4\x58\xd0\xa4\x2f\xdb\x26\x16\x7d\xde\x54\xbf\xd1\x4d\xd4\x50\xbf\x46\x17\x6f\x9a\xf0\x8d\x93\x7c\xe8\x1c\x87\x9d\x8a\x6a\x9b\x01\x6b\x82\x49\x34\xba\xe9\x4e\x3f\x03\xdc\x9c\xcd\x61\x58\xf2\xad\x02\xa9\x60\xb6\x33\xc6\x7a\x89\xc8\x1e\xa0\x3e\x41\x25\x7f\xc0\xdd\x25\x98\xc4\x81\xd3\xb3\xeb\xab\x9e\xce\x7f\x30\xce\xa4\xae\xd5\x5c\xce\x0d\xa7\xdd\xe9\xc4\xbf\x1c\xfa\x8b\x6e\x68\xd7\xcf\x03\x18\x63\xdc\x21\x38\x20\xeb\x01\x9a\x01\x3c\xa2\x71\x60\x6e\xa6\xfa\x82\x8b\xb7\xef\x75\x04\x8a\x07\xd8\x7a\x05\x9b\x35\xa0\x1b\xb1\xf1\x84\x13\x78\x81\x4b\xd8\xf5\x0a\xbe\x3c\x42\xea\x01\x60\x97\x01\x66\xe2\xfe\x7f\x40\xd5\x2b\x77\x10\x27\xd6\x69\x26\x92\xc0\x63\x6c\xbd\x37\x60\x92\x3d\xb7\xa9\xd0\xcc\x63\x55\x11\xf6\x55\x80\x79\x0d\xba\x20\x5b\xb0\xbd\x6c\x98\x30\xeb\x7b\x11\x13\xbc\xf5\x5d\x53\xed\x05\x4c\x72\xc4\x89\x1b\x43\x9b\x70\xca\x04\x28\xdb\xcc\xa4\x9b\x28\x60\xd3\x77\xa0\x7d\x01\xe0\xe4\x49\x07\xc5\x24\x73\x91\x46\x9a\x2e\xd0\x70\xf3\x68\x6b\xd4\xc1\xff\xd1\x9b\xb6\xc1\x5e\xaf\x9b\xcf\x6c\x71\x8a\x09\xee\x2c\xb9\x01\x47\x80\x8f\x81\x57\x80\x86\x99\x80\x32\x3e\xa9\xc2\x11\xdf\x5b\xb0\xd1\x0a\xe6\xb6\x62\xa3\x01\xa0\x9d\x20\x98\x17\x04\xb9\xab\x20\x7e\xeb\xfb\x46\xb8\x0e\x11\x99\x23\x7c\x7a\x09\x9a\x59\x82\xca\xda\xa2\x9e\x40\x6a\xaa\x5e\xa5\x40\x36\x69\x1c\x30\xea\x84\x6f\x9c\x40\x09\xb7\x45\x5a\x3b\x80\x65\x8a\xbe\x6b\x9a\x76\x60\xb1\x76\x30\xb6\xf9\x13\x6e\x74\x83\xd0\x4b\x70\x90\xa8\xcf\x05\xfd\xbc\x80\x94\xd9\x1c\x7d\x00\xe5\x35\x00\xeb\x75\xb3\x27\x98\x9d\xa8\x5b\x0c\xba\x31\x9e\xf4\xa4\x83\x57\x88\x25\x16\xb8\x57\x5b\x28\x37\x62\xe0\x77\xd1\x77\x66\x9c\x76\xeb\xdc\x66\xd6\x67\xae\xc0\xa4\x84\x53\x4c\xba\xde\x08\x0f\x62\x26\xb7\x02\x9b\x04\x87\x1d\xcc\x6c\x2d\x18\x1a\xc1\x9e\xcc\x95\xb4\xb0\xd1\xda\xf9\xf4\xe0\x82\x1e\x0b\x5c\x9e\xba\xf1\x41\xb5\xe7\x70\xbc\x3e\xc3\x76\x2b\x75\x55\x37\x98\x49\x01\xef\x62\x66\x77\x42\x90\xdc\x68\xed\x22\x3c\x7b\x6f\x03\xd0\x06\x77\x7f\x03\x50\xf7\x46\x84\x6a\xd8\x70\x01\x04\x2e\x15\x74\x2e\x70\x4f\x54\xb7\x59\x37\x59\xc1\x9e\x7b\xbc\x7f\x00\x1f\x02\xe8\xee\x0b\x76\xd9\xc2\x23\x9c\xce\x25\x9b\xea\x2e\x18\xaf\x82\xb6\x74\x10\x6a\x00\x6f\x30\x97\x67\xd4\xbe\xc0\xe6\x03\x40\x32\x88\xc8\x14\x41\x64\x22\x1e\x28\xb1\x11\x23\x44\x2d\xc8\x8e\xc0\xed\xb4\xca\x03\x1a\x6c\xe0\xe1\xdc\xcd\x37\x26\x4d\xc0\x86\x8c\xf1\x36\xb8\xd8\x13\xff\x3f\x61\x7a\x15\x02\x2b\x33\x29\xf3\x50\x2b\x22\xc1\x1e\xe6\x69\xf4\xda\x4e\xfd\xd4\xe7\x5e\x22\x72\x58\xa4\xc4\x10\x78\xd0\x17\x8d\x1a\x5b\x58\x6b\x9c\xbc\x03\xb0\x95\x38\x79\xaa\xdb\x0a\xd5\x4d\xf0\xbf\x46\xab\x3b\xb8\x34\xd2\xe1\x12\x66\xb2\xea\x67\x0b\x97\x59\xaa\x19\xf4\xb0\x6f\x86\xb9\xa5\x0a\xd7\x08\x14\x4d\x38\xc1\x3b\x18\x16\x7d\x44\xd0\x5a\x01\x50\xec\x50\xeb\x13\x12\xbc\x42\x48\x25\xc0\xcc\x10\xdd\x62\x85\x15\x82\x12\xa8\x66\x0b\xac\xf8\x70\x82\x37\xe0\xdb\x41\x86\x12\x68\x6e\x02\xf5\xdd\xb0\xc1\xe8\x98\x2a\xd9\x6a\x09\x52\x26\x78\xdf\xf0\xee\x8f\xe4\x09\x28\x25\x5c\x8d\x00\x41\x1b\xa8\x62\x0f\x97\x46\x54\xed\xf4\xfe\x07\x36\xf5\x40\x14\xf7\x5b\xc7\xe9\x60\xe3\x01\x26\x95\x71\x3a\xd1\xd1\x57\x6a\x67\xab\x63\x12\xa0\x4d\xad\x23\x38\xcd\xe0\x58\xe4\x0a\x93\x9f\x44\xa4\x34\x57\x24\x18\x88\xe4\xe3\xff\x65\x80\xcc\x35\x7d\xba\x28\x4b\x5c\x2e\xa1\x70\xd7\x5e\x50\xd9\x03\x99\x1a\xa6\xbd\x98\xde\xb2\x77\x5a\xbd\xfe\x89\x50\x78\x81\x16\xda\x78\x3b\xbc\xc4\x8a\x54\x98\x99\xcd\x1b\xe1\xb2\x88\x48\x8c\x60\x59\x93\xfe\xd5\x88\xa3\x4d\xc2\x4f\x00\xda\x8c\x81\x0b\xe7\x8f\x0b\x4c\x72\xd7\xe7\xde\xce\xc6\x0b\x10\xa0\xb7\x4b\x9e\x10\x7b\x36\x3c\x9b\x10\x01\x8e\x88\x2c\x67\x08\x61\xd6\x79\xc9\x12\x07\xf0\x89\x5d\x35\x73\x82\x00\xc6\xa8\x76\x5d\x20\xa4\x9d\xa1\x22\x3d\x36\x12\x60\x57\xe1\x87\xcd\xbc\x90\x33\xb0\x88\x50\xc0\xe3\x09\x72\x01\x00\xd5\x23\x91\x31\x63\xde\x1d\x1b\x2a\xc1\xfa\x22\x48\x54\x82\x56\x9d\x08\xd5\x4b\x68\x60\x03\x93\x39\x61\xb2\xab\x88\xf4\x11\x2e\xa5\x41\x52\x81\x8b\xad\x61\xab\xa3\x8b\xed\x4d\x4b\x2a\x00\xce\x84\x34\x75\xc4\x73\xb3\x4b\x4e\xee\x48\xc1\x59\xb4\x79\x45\x7e\xb1\x82\x29\xbd\x21\x04\x03\xb8\x87\x6a\xcd\x0d\xb8\x50\x43\x0b\x99\x29\x9a\xa1\xd9\x34\x83\xb7\x05\x43\x5f\x48\x3e\x04\xd8\xdd\xdb\x05\x40\x09\x83\x32\x17\xb7\x21\x26\xb8\x81\xd7\x07\xdc\xcb\x2e\xc1\x61\xdf\x17\x2c\x28\x42\x5b\xc2\x0f\xae\x30\x80\xe4\x78\x52\xb4\xea\x7a\x6b\xcc\xc7\x58\x63\x80\x86\x1a\x6f\x90\x08\xc6\x74\x47\x14\xf8\x01\x5b\x1f\xe1\x0d\x76\xa8\xd0\x03\xd7\x83\x7b\x66\x05\x2b\xec\x90\x59\x12\x00\xac\x05\x58\x44\xfe\x1a\x3e\x9f\xd9\xa6\x03\x99\xe4\x4f\x68\xd5\x06\x8e\x62\x73\x46\xb0\x42\xcb\x78\x59\x2e\xf3\x89\x9a\x41\x25\x22\x39\x42\xba\x09\xd2\x7e\x02\xa4\x2e\x28\x9c\x04\x70\x80\xfa\x07\x6d\x60\xf8\x1c\x91\x27\x68\x70\xd2\x11\x29\xb1\x1a\xb1\xbb\xc0\x8e\x5b\x44\xa6\x15\xee\x5d\x91\x9e\x8f\x00\xe3\x0c\xe1\x0d\x3f\x30\xdb\x0c\x3c\x58\xa0\x65\x4b\x00\xc1\x99\x61\xb3\x01\x19\xa0\x19\x92\xa5\xdb\x9a\x20\x80\x37\x48\x54\xe9\xdc\x29\xdd\xac\x05\x2b\x9f\x18\x83\x2a\x5c\xe9\xf3\x86\x35\x3d\x38\xc0\x0a\x77\xbb\x81\x27\x30\x65\xd7\x20\x0f\xb0\xb8\x02\x8a\xcd\x37\x83\x7d\x1e\x41\x27\xb4\x45\xd9\x64\x17\x9d\x9c\x2a\xb8\x62\xf3\x0f\x80\xd2\x08\x36\x97\x9d\x40\x5e\x8e\x3b\x64\x10\x93\x11\x3e\x9d\x5e\xa3\x44\x91\x66\x45\x76\x89\x87\xf3\xa1\x5a\x7a\x60\xbe\x07\x34\xc5\x12\xb1\x0c\xdb\x23\x68\x78\xe1\x53\x62\x2c\x2b\x31\x32\xeb\x10\xc9\x31\x4a\xeb\x81\xe2\x8d\x63\x90\x25\xd4\x30\x80\x2d\x9e\x2e\x0b\x64\x41\xcd\x03\x14\x75\x46\x4c\x21\xa8\x21\x6c\x60\xab\x77\x1c\xcc\x05\xf7\x78\x40\xc9\x21\xfe\xa9\xdf\x6f\xa0\xfa\x87\x85\xc3\x33\x22\xa4\x06\x3e\xfe\x1b\x68\xda\xc0\xd7\x33\xb9\x90\x91\xc5\xcd\xf0\xcb\x57\x94\xaa\x4a\x64\x62\x1b\x14\x4d\x32\x4c\xc3\x5c\xb0\xd1\xd7\x1b\x5c\x65\xe7\xc2\x6a\x41\xe2\xd6\xb4\x31\x3b\xfe\x6f\x02\x3f\x11\x34\x7d\x41\x0b\x2d\x4c\x5e\xa2\xaa\x5e\x05\xd5\x0b\x88\xf0\xb2\xa3\x9a\x9b\x8b\x1b\x04\x88\xba\x20\x3b\x14\x11\x18\x95\x70\x85\x56\x07\x48\xd0\x86\xa7\x82\x99\xa9\xec\x27\xd8\xde\x82\xf7\x22\x00\xb6\x81\x20\x04\x07\xe8\xf3\x95\x86\x47\x57\x17\x1e\x9b\xa9\xd5\xd1\x51\xdf\x02\xf6\x41\x4e\x3f\x83\x84\x18\x08\xbd\x9d\x26\x54\x08\x79\x23\x88\x51\x44\xc1\x25\xa1\xa6\x77\xba\xe2\xe9\x82\x8d\xd6\x08\x6d\x77\x9c\x6a\x84\x5a\xef\x20\x5e\x87\x9e\x70\x80\x09\x17\x2e\xc8\xf2\x89\xd8\x87\x61\x40\x80\xbd\x58\x9c\x1e\x20\x98\x01\x8b\xb3\xb8\xe0\x82\x4c\xd0\x0e\xf5\x9c\x41\x70\xde\x18\x23\x02\x79\x05\x9b\x58\x5d\xed\xbe\x74\x69\x2e\x82\xe6\x13\x60\xbb\x20\xfb\xfb\x81\x77\x99\x56\x2b\x61\x3a\x19\x40\xfc\x84\x80\xd7\xa8\x03\x04\x54\x67\xbe\x90\x4b\x2f\x5c\x69\xea\x00\x16\x30\x0e\x67\x89\x2b\x63\xe2\xd1\x35\x50\xb0\x36\x38\x22\x91\x92\x5d\x99\xfc\x0d\x77\x76\x80\x9a\xef\x48\x6e\x94\xae\x77\x81\x01\x50\x05\x0f\x62\xda\xb0\x41\xbb\x2c\x31\xd3\x47\xa0\x26\xeb\x7d\xc1\x15\x40\x17\x00\xcf\x13\x19\xda\xf5\x07\xae\xf0\x86\x06\xd5\x30\x05\x6e\x50\x1c\xc3\x4b\xd0\x8c\x12\x38\xf3\xc6\xe6\x8d\x99\x16\xf0\x0c\x57\x6c\x7e\xc7\xdc\xac\x2e\x99\xe6\xec\x38\x08\x9b\x63\x0f\x2e\x81\x39\xb8\x64\xc4\x0e\x1c\x58\xd0\xb0\x10\xf1\xfd\x70\x99\x99\x8c\x7c\x9e\x20\xc5\x1e\x40\xab\x23\xea\x77\xc4\x9b\xe4\xc6\xba\x20\xc0\xb1\x6a\xd2\x0b\xc9\x54\x92\xa3\x02\x39\xbf\x15\x60\xf7\x81\x14\xdd\x87\xcb\x12\x2f\x11\xfc\x7e\xc0\x20\x0f\x98\x46\x09\x4e\xbd\x83\xba\x96\x08\x78\x12\xaa\xcb\x15\xde\xdb\xe0\xc6\x4e\x54\x6d\x3b\x17\x55\xd6\xa0\xc3\x11\x66\x50\x82\x50\x95\xc0\x9d\x08\x00\x1e\x10\x22\x5b\x06\x69\x82\xc9\x4d\x2e\x95\x57\xc3\x2c\xaa\x88\x4d\xb7\x8e\x46\xd2\xfd\x9c\x70\x71\xb6\xc8\x87\xcb\x07\x36\xe8\x05\x6a\xb1\xc0\x27\x18\x58\x86\xbb\x8b\x30\x15\xcb\x11\x32\x93\x64\xbc\xe4\x1b\x6e\xd3\x67\x7f\x4a\xb7\xce\xc2\xa5\xe3\x33\x34\x3c\x62\x0d\x96\xc7\x88\x85\xfa\xdd\x0d\x38\x30\xa2\xf2\x62\x78\x70\x75\x79\xb5\xca\x55\x94\x04\x4c\x6b\xc2\xc4\xe2\x52\x6a\xab\x6b\xc1\x79\x23\x77\x60\x05\xd7\x6f\x20\xfb\xe1\x3c\x47\xeb\xc6\x9c\x74\xcc\x1b\xa8\xb5\x99\xce\x0b\xcc\x50\xe0\xbd\x58\xdd\x6e\x22\x54\x6a\x06\x15\x35\x81\xdc\x90\x99\x2d\x5d\xc5\xa6\x70\x00\x16\x40\x6b\x1b\xe0\x48\x05\x96\x67\xe5\xeb\x03\x0b\x1d\xa0\x19\x02\xce\xc1\x2c\xd1\x0c\x8e\x91\x1c\x66\x34\x2e\xa9\xc2\x1c\x23\xb9\x00\x4b\x6d\x16\x5a\x2f\x6c\x36\x22\xd3\xaa\xa0\x3a\x3b\x22\x3f\xfa\xd4\x15\x9c\x3a\x41\x4d\xd9\xac\x58\x01\xa0\x8c\xe2\x76\x98\xef\xe1\xa8\x2e\xeb\x77\x0d\xd2\x5b\x8c\x0d\xc4\x95\xca\x58\x43\xb8\x20\x0f\x78\x41\x5d\x23\x21\xb2\x3c\x90\xb5\xbe\x46\x50\x48\xf6\xee\x50\xfd\x4e\xd4\xda\x0e\x04\x17\x27\x8a\x9b\xec\xc6\x4a\xe0\x14\x2c\x46\xd2\x3b\x04\x00\xe4\x0a\xf2\x24\x2e\x33\x35\x40\xb8\xc6\x27\x46\xac\x91\xcc\xd3\x12\x1f\xa5\x6b\xb6\x0a\x28\xea\x5c\x71\x20\x95\x55\x86\x7e\xe9\x8b\x33\xc0\xea\x80\xda\x24\xa8\xd3\x82\x0d\x97\x00\xb1\x02\x2e\xae\x43\x71\x95\x02\x99\x71\x2a\x09\x55\x9e\x0b\x28\x6a\xe1\xf2\x09\x7c\xb7\x43\xc2\xc5\xd7\x28\x18\x7d\xd6\xae\x41\x8b\xb1\x0a\xdb\x72\x32\xed\xa4\x07\xad\xdd\x5c\x3f\xd0\x08\x64\x66\x5d\x6f\x72\x6a\xfc\x72\xe9\xaa\x87\x23\x2a\x74\x97\x01\x44\x85\x79\x84\x19\xc5\xcd\x16\xd7\xd9\x5f\x70\x83\x90\x12\xf2\x92\x9e\x09\x0a\x4c\x72\x82\xe9\xb1\x09\x34\x33\x4e\xdf\xc1\xe6\x6a\xd7\x94\xc4\xf6\x94\xe0\xda\x6a\x3b\x3d\x49\x26\x54\xde\xd8\xfc\x81\x14\x9b\x09\xee\xed\x28\xec\x0b\xa6\x26\xe0\x12\x6c\x8e\xfa\x46\xf3\xf5\xe6\x36\x93\x21\xd8\xe4\xdc\xe5\x00\x2d\x9d\x10\x88\xcd\x22\x52\x17\xc8\xc4\x1c\xae\x1a\x9b\x5d\x17\x57\x74\xcf\x19\x08\x5e\x71\xed\x0e\x15\x3c\x51\x20\xf9\x44\x5e\x3f\xb9\xbe\x81\x19\x45\x8b\x13\xc2\x3d\xe0\x21\x76\x34\x3e\xb1\x5c\xee\xf3\x91\x33\xa8\xee\x0b\x60\x2e\xd8\xcb\x84\xac\xd7\x5f\x1d\x9f\xc1\xd5\xe9\x36\xd7\xb5\xc9\xfa\x5c\x0b\xb2\x52\xaa\xba\x6f\x8a\x27\x23\x62\x00\x36\x51\xcd\xa8\xfe\x18\x3e\x8c\xa8\xfa\x9c\xaa\x29\x02\x6f\xd3\xa2\x96\xb8\xbb\x76\x9d\xda\x01\x2c\x35\x77\x41\x7f\xe3\xee\x1a\x3a\xac\xa7\xe1\xb7\x31\xc1\xc3\x15\x0d\x08\x3a\xd9\xb5\xb0\x65\x78\x8a\x15\x51\x56\x46\x51\x23\x38\xb7\xca\x9e\x9f\x05\x1d\x24\x3d\x04\x65\xf7\x2e\x88\x39\x26\x74\x8f\xef\x30\x8d\x07\xf2\x07\x0d\x90\x3e\x83\x2c\x25\xb4\xc3\x1a\x4e\xd5\xd8\xa7\xad\x6b\x89\x40\xc8\x84\x9e\x7e\x06\x13\xa7\x2b\x81\x9d\x00\xc4\x41\x17\xcd\xae\x8c\x0d\x27\xf8\x44\x00\x62\x9d\x9e\x4f\xb6\xa9\xb9\x34\x56\x04\x4e\x04\x0d\xcd\x17\x78\x87\xec\x50\x7e\xc5\x3b\x2f\xf4\x3a\x2c\x20\x75\x09\x07\x90\x60\xa6\xb5\x65\x84\xae\xae\x53\x2c\xba\x82\xe3\xe8\x72\x7e\xec\xf3\x59\xa0\x5e\x1d\x16\x18\x00\x6a\x77\xd7\x11\x52\x38\x92\x53\x80\xd0\x14\x20\x41\x19\xd9\x9d\x13\x4c\x73\x81\x1b\x5e\x50\x43\xb8\x80\x7f\x6c\x88\x02\x2d\x0c\x9e\x51\x3e\x33\x8d\x0e\x11\xc8\xfe\x00\xdd\xb5\x74\xf7\x05\x51\x5c\x85\x8d\x07\xd7\x57\x9c\xa1\x3d\x6f\x47\x43\x7b\x57\xba\x9e\x5c\x35\x89\xe4\x2a\xc2\x64\x28\xc4\x17\xfa\x0f\x7a\xb8\xc9\x0d\x6a\x3e\x40\xb3\x6a\x68\x14\xab\xc1\x33\xb4\x40\x44\x24\x19\x70\x7c\x23\x1a\x13\xd7\x29\xba\x3a\x96\x66\x9b\x3f\x61\x0e\x1d\xea\xf5\xe9\x87\x5c\x1c\x91\xbb\x41\x32\x93\x6c\x8f\x7d\x7f\xc1\xf1\x8f\x1d\x49\xda\x8c\x1f\x51\x74\x18\xff\x84\xfa\x57\xae\x3f\x28\x39\xd0\x36\xc0\xff\xa3\x01\xcc\xb9\x77\xf8\xd5\xc5\x08\xda\x58\x20\x11\xc9\x9e\xe2\x06\x41\x88\xa9\xe8\x0a\x8a\xcd\x3e\x82\xd3\x2d\xa6\xc0\xe6\x03\xdc\xd9\x08\x95\x0e\x48\x7c\xb0\xc3\xfc\xe2\xbc\x0a\x93\xad\x25\x82\xa3\x1a\xa4\xa9\x72\x6c\x31\x47\xd7\xd4\x10\xf1\xd0\x02\x92\xc1\xf6\xf9\xc9\xd5\x06\x5f\xe8\xbe\xf8\xd2\xfb\xbf\x50\xab\xab\xe5\xef\x5f\x89\x08\x2a\x43\x15\x52\x5f\x6c\xd7\x59\xd1\x25\xde\x41\x6b\x4a\x57\x60\x89\x40\xf9\x16\xe6\xc0\xa6\x88\xd2\x71\x1a\x16\x57\xda\x08\x2e\x2e\xb0\xcf\x01\x54\x32\xa1\x43\x24\xc1\x36\x05\xa9\x6b\xf6\xed\x2d\xae\x5a\x94\xdd\x49\xac\xae\x4c\x76\x3a\xee\x51\x40\xcb\x58\x2a\x2f\xf1\xe3\x07\x3b\x8c\x15\x05\x56\x03\xe5\x01\x59\xeb\x04\xe1\x3c\x71\x68\x7f\xea\x0a\x11\x68\x3c\xa2\xbf\x2e\xa1\xb2\xeb\x55\x94\x1d\x60\x33\x3c\x43\x06\x25\xde\x5c\x34\xc8\xae\xed\x84\x45\x0c\xb0\xc9\x37\x4e\x91\xe4\x26\x40\x43\x4e\xb8\x34\x76\xa9\xcf\x08\x7a\xaa\x1f\x92\xaf\xec\x70\x63\xe9\x2d\xb2\x3f\xc0\xab\xe7\x82\x1f\x3b\xcc\x38\x55\x86\x99\x11\x69\xf0\x1d\xa7\x7c\xa2\xb8\x1a\x40\x4b\x83\x6b\x8d\x3b\x21\xfc\x0b\xdc\x22\x69\xee\x6f\x84\xb1\x3e\x1f\x11\x91\x11\xca\x20\x62\x77\xb4\xdf\xcc\x30\x63\xae\x67\x37\x13\x68\x5d\x8a\xea\xd0\x09\xe9\x3e\x76\xc7\x0f\x46\x70\xfa\x80\xd4\xb8\x65\x81\x16\xa4\xca\x99\xe4\xc8\x40\xf8\x16\xaa\x5d\xbb\x5e\xe2\xec\xba\xbd\x3c\xa5\xbd\x23\x5b\xd4\xb9\x0c\x51\x46\x69\x5d\x5c\x5b\xbd\xdd\xef\x08\x82\xbb\x6b\x42\x30\x35\x9d\xe0\x09\x56\xf9\xfb\x57\x5d\x03\x3c\xc7\x02\x21\x4c\x6a\x02\x35\x9a\x9f\x36\x2c\x76\x83\x1b\x23\x7d\xe5\x2f\x4a\x0a\xd7\xdb\x13\x5d\x5d\xb1\x00\x36\x25\xd7\xa3\x90\x1c\x9d\x2f\x5d\xc0\x74\x07\x86\xfc\x71\x83\x2d\xdc\x58\xf1\x43\xda\xc9\xba\xc7\x5a\x9c\x20\x0b\x1d\xac\xb7\xb5\x08\x75\x59\xa6\x0e\x10\x18\x8b\x2f\xd9\xb9\xcc\xdd\x69\xdc\x13\x59\x67\x33\xa9\x2b\xaa\x44\x34\xc9\x09\x58\xd3\x01\xbb\xc8\x26\xaf\xc0\xab\x49\x44\x5e\x11\x7e\x7f\x40\x80\x53\xe0\x94\x03\xea\xeb\xc9\xd9\xe0\x0c\xa2\xb4\x43\x65\x27\xd8\x68\x01\x04\x7e\xfc\xd0\xba\x52\xe1\xf9\x16\xa5\x36\x12\x23\x56\x83\x6b\x04\x37\x95\x63\x83\xb3\x3b\x04\xeb\x48\x99\xc0\x1b\x46\xe4\x22\xfa\xc8\x5a\xb9\xcb\x99\x95\x6e\xb1\x6f\x14\x45\x0e\x54\x6a\x76\x97\x13\xbc\xc8\xff\xfe\xf8\xaa\xc0\x82\x17\x07\xa8\xec\x4a\xb9\xbb\xdc\xc3\xdb\x9d\x78\x03\xd3\xdc\x61\x52\x07\xb0\x24\xff\xd0\xd5\x56\x03\x1c\x4b\x80\x7c\x64\x73\x31\xab\x36\x6c\x56\x64\x58\xb9\x22\x91\x69\xc1\xc8\x17\xcc\xa1\xc3\x09\xda\xa4\xdf\x00\xcc\x0d\x27\x11\xc1\x0e\x2f\xae\x11\xe3\x81\xee\x90\xc6\xc5\x16\x8c\x1c\x93\xeb\x71\x2a\x71\x78\xb3\xfc\xfd\x63\xac\x09\x1d\x22\xe6\x7d\xd2\xbf\x07\xe4\x68\x00\x10\x3b\x06\x69\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\x01\x00\x00\xff\xff\x91\x78\x0d\x81\x26\x0f\x00\x00") + +func webdataTexPngBytes() ([]byte, error) { + return bindataRead( + _webdataTexPng, + "webdata/tex.png", + ) +} + +func webdataTexPng() (*asset, error) { + bytes, err := webdataTexPngBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "webdata/tex.png", size: 3878, mode: os.FileMode(436), modTime: time.Unix(1529766470, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "webdata/fn.js": webdataFnJs, + "webdata/icon.png": webdataIconPng, + "webdata/index.html": webdataIndexHtml, + "webdata/main.css": webdataMainCss, + "webdata/sha256.js": webdataSha256Js, + "webdata/tex.png": webdataTexPng, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} +var _bintree = &bintree{nil, map[string]*bintree{ + "webdata": &bintree{nil, map[string]*bintree{ + "fn.js": &bintree{webdataFnJs, map[string]*bintree{}}, + "icon.png": &bintree{webdataIconPng, map[string]*bintree{}}, + "index.html": &bintree{webdataIndexHtml, map[string]*bintree{}}, + "main.css": &bintree{webdataMainCss, map[string]*bintree{}}, + "sha256.js": &bintree{webdataSha256Js, map[string]*bintree{}}, + "tex.png": &bintree{webdataTexPng, map[string]*bintree{}}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} + + +func assetFS() *assetfs.AssetFS { + assetInfo := func(path string) (os.FileInfo, error) { + return os.Stat(path) + } + for k := range _bintree.Children { + return &assetfs.AssetFS{Asset: Asset, AssetDir: AssetDir, AssetInfo: assetInfo, Prefix: k} + } + panic("unreachable") +} diff --git a/bindata.go b/bindata.go new file mode 100644 index 0000000..5465368 --- /dev/null +++ b/bindata.go @@ -0,0 +1,3 @@ +package main + +//go:generate go-bindata-assetfs -o ./bindata.generated.go webdata/... diff --git a/desktop/remote-touchpad.appdata.xml b/desktop/remote-touchpad.appdata.xml new file mode 100644 index 0000000..c756511 --- /dev/null +++ b/desktop/remote-touchpad.appdata.xml @@ -0,0 +1,35 @@ + + + remote-touchpad.desktop + CC0-1.0 + AGPL-3.0-or-later + Remote Touchpad + Control mouse and keyboard from a smartphone + +

+ Control mouse and keyboard from the webbrowser of a smartphone (or any other device with a touchscreen). + To take control just open the displayed URL or scan the QR code. +

+

+ Supports Linux/X11 and Windows. +

+
+ https://github.com/Unrud/remote-touchpad/issues + https://github.com/Unrud/remote-touchpad + Unrud + + + + + + https://raw.githubusercontent.com/Unrud/remote-touchpad/0.0.1/screenshots/1.png + + + https://raw.githubusercontent.com/Unrud/remote-touchpad/0.0.1/screenshots/2.png + + + https://raw.githubusercontent.com/Unrud/remote-touchpad/0.0.1/screenshots/3.png + + + +
diff --git a/desktop/remote-touchpad.desktop b/desktop/remote-touchpad.desktop new file mode 100644 index 0000000..8ba6773 --- /dev/null +++ b/desktop/remote-touchpad.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Remote Touchpad +Comment=Control mouse and keyboard from a smartphone +Terminal=true +Exec=remote-touchpad +Icon=remote-touchpad +Categories=Network;RemoteAccess;ConsoleOnly; diff --git a/desktop/remote-touchpad.ico b/desktop/remote-touchpad.ico new file mode 100644 index 0000000000000000000000000000000000000000..6313008dbdce1c7fd111aa68fd9fb3069677ce86 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/desktop/remote-touchpad_256.png b/desktop/remote-touchpad_256.png new file mode 100644 index 0000000000000000000000000000000000000000..70eb4d4db77d88723fb781b463e2ef5ccb8fb566 GIT binary patch literal 14480 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 cL_`34FCWD literal 0 HcmV?d00001 diff --git a/flatpak/com.github.unrud.RemoteTouchpad.json b/flatpak/com.github.unrud.RemoteTouchpad.json new file mode 100644 index 0000000..f2b220f --- /dev/null +++ b/flatpak/com.github.unrud.RemoteTouchpad.json @@ -0,0 +1,113 @@ +{ + "app-id" : "com.github.unrud.RemoteTouchpad", + "runtime" : "org.freedesktop.Platform", + "runtime-version" : "1.6", + "sdk" : "org.freedesktop.Sdk", + "command" : "remote-touchpad", + "rename-appdata-file" : "remote-touchpad.appdata.xml", + "rename-desktop-file" : "remote-touchpad.desktop", + "rename-icon" : "remote-touchpad", + "finish-args" : [ + "--socket=x11", + "--share=network" + ], + "build-options" : { + "append-path" : "/app/share/go/bin", + "env" : { + } + }, + "modules" : [ + { + "name" : "go-compiler", + "sources" : [ + { + "only-arches" : [ + "i386" + ], + "type" : "archive", + "strip-components" : 0, + "url" : "https://dl.google.com/go/go1.10.3.linux-386.tar.gz", + "sha256" : "3d5fe1932c904a01acb13dae07a5835bffafef38bef9e5a05450c52948ebdeb4" + }, + { + "only-arches" : [ + "x86_64" + ], + "type" : "archive", + "strip-components" : 0, + "url" : "https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz", + "sha256" : "fa1b0e45d3b647c252f51f5e1204aba049cde4af177ef9f2181f43004f901035" + }, + { + "only-arches" : [ + "arm" + ], + "type" : "archive", + "strip-components" : 0, + "url" : "https://dl.google.com/go/go1.10.3.linux-armv6l.tar.gz", + "sha256" : "d3df3fa3d153e81041af24f31a82f86a21cb7b92c1b5552fb621bad0320f06b6" + }, + { + "only-arches" : [ + "aarch64" + ], + "type" : "archive", + "strip-components" : 0, + "url" : "https://dl.google.com/go/go1.10.3.linux-arm64.tar.gz", + "sha256" : "355128a05b456c9e68792143801ad18e0431510a53857f640f7b30ba92624ed2" + } + ], + "buildsystem" : "simple", + "build-commands" : [ + "mkdir -p /app/share", + "cp -r go /app/share" + ], + "build-options" : { + "no-debuginfo" : true + }, + "cleanup" : [ + "*" + ] + }, + { + "name" : "remote-desktop", + "sources" : [ + { + "type" : "git", + "url" : "https://github.com/golang/net", + "commit" : "afe8f62b1d6bbd81f31868121a50b06d8188e1f9", + "dest" : "src/golang.org/x/net" + }, + { + "type" : "git", + "url" : "https://github.com/skip2/go-qrcode", + "commit" : "cf5f9fa2f0d847edb8e038db7ed975e239095e1a", + "dest" : "src/github.com/skip2/go-qrcode" + }, + { + "type" : "git", + "url" : "https://github.com/elazarl/go-bindata-assetfs", + "commit" : "38087fe4dafb822e541b3f7955075cc1c30bd294", + "dest" : "src/github.com/elazarl/go-bindata-assetfs" + }, + { + "type" : "git", + "path" : "..", + "branch" : "master", + "dest" : "src/github.com/unrud/remote-touchpad" + } + ], + "buildsystem" : "simple", + "build-commands" : [ + "env GOPATH=\"$(pwd)\" go build github.com/unrud/remote-touchpad", + "install -Dm0755 -t /app/bin remote-touchpad", + "install -Dm0644 -t /app/share/appdata src/github.com/unrud/remote-touchpad/desktop/remote-touchpad.appdata.xml", + "install -Dm0644 -t /app/share/applications src/github.com/unrud/remote-touchpad/desktop/remote-touchpad.desktop", + "install -Dm0644 src/github.com/unrud/remote-touchpad/desktop/remote-touchpad_64.png /app/share/icons/hicolor/64x64/apps/remote-touchpad.png", + "install -Dm0644 src/github.com/unrud/remote-touchpad/desktop/remote-touchpad_128.png /app/share/icons/hicolor/128x128/apps/remote-touchpad.png", + "install -Dm0644 src/github.com/unrud/remote-touchpad/desktop/remote-touchpad_256.png /app/share/icons/hicolor/256x256/apps/remote-touchpad.png", + "install -Dm0644 src/github.com/unrud/remote-touchpad/desktop/remote-touchpad_512.png /app/share/icons/hicolor/512x512/apps/remote-touchpad.png" + ] + } + ] +} diff --git a/host.go b/host.go new file mode 100644 index 0000000..beb5921 --- /dev/null +++ b/host.go @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +import ( + "fmt" + "net" + "strings" +) + +func FindDefaultHost() string { + fallbackAddr := "" + for _, publicIP := range []string{"2001:4860:4860::8888", "8.8.8.8"} { + addr := fmt.Sprintf("[%s]:80", publicIP) + conn, err := net.Dial("udp", addr) + if err != nil { + continue + } + conn.Close() + host, _, err := net.SplitHostPort(conn.LocalAddr().String()) + if err != nil { + continue + } + return host + } + interfaces, err := net.Interfaces() + if err != nil { + goto fallback + } + for _, inter := range interfaces { + if inter.Flags&net.FlagUp == 0 || inter.Flags&net.FlagLoopback != 0 { + continue + } + addrs, err := inter.Addrs() + if err != nil { + continue + } + addrs: + for _, addr := range addrs { + ip, _, err := net.ParseCIDR(addr.String()) + if err != nil { + continue + } + if fallbackAddr == "" { + fallbackAddr = ip.String() + } + for _, linkLocalPrefix := range []string{"169.254.", "fe8", "fe9", "fea", "feb"} { + if strings.HasPrefix(ip.String(), linkLocalPrefix) { + continue addrs + } + } + return ip.String() + } + + } +fallback: + if fallbackAddr != "" { + return fallbackAddr + } + return "localhost" +} diff --git a/icon.go b/icon.go new file mode 100644 index 0000000..2706811 --- /dev/null +++ b/icon.go @@ -0,0 +1,3 @@ +package main + +//go:generate rsrc -ico desktop/remote-touchpad.ico -o icon.syso diff --git a/icon_windows.syso b/icon_windows.syso new file mode 100644 index 0000000000000000000000000000000000000000..ac271e9342004e82507e9326fcd2949fcde586c2 GIT binary patch literal 67906 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 literal 0 HcmV?d00001 diff --git a/main.go b/main.go new file mode 100644 index 0000000..394d5ea --- /dev/null +++ b/main.go @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +import ( + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "errors" + "flag" + "fmt" + "golang.org/x/net/websocket" + "log" + mathrand "math/rand" + "net" + "net/http" + "strconv" + "strings" + "time" +) + +const ( + defaultSecretLength int = 8 + authenticationRateLimit time.Duration = time.Second / 10 + authenticationRateBurst int = 10 + challengeLength int = 8 + defaultBind string = ":0" + version string = "0.0.1" +) + +func processCommand(plugin Plugin, command string) error { + commandParts := strings.Split(command, " ") + if commandParts[0] == "KeyboardText" { + text := strings.Join(commandParts[1:], " ") + return plugin.KeyboardText(text) + } + if len(commandParts) != 3 { + return errors.New("wrong number of arguments") + } + x, err := strconv.ParseInt(commandParts[1], 10, 32) + if err != nil { + return err + } + y, err := strconv.ParseInt(commandParts[2], 10, 32) + if err != nil { + return err + } + if commandParts[0] == "PointerMove" { + return plugin.PointerMove(int(x), int(y)) + } + if commandParts[0] == "PointerScroll" { + return plugin.PointerScroll(int(x), int(y)) + } + if commandParts[0] == "PointerButton" { + if x <= 0 || x > 3 { + return errors.New("unknown pointer button") + } + b := true + if y == 0 { + b = false + } + return plugin.PointerButton(uint(x), b) + } + return errors.New("unknown command") +} + +type challenge struct { + message, expectedResponse string +} + +func (c challenge) verify(response string) bool { + return c.expectedResponse == response +} + +func authenticationChallengeGenerator(secret string, challenges chan<- challenge) { + unsecureSource := mathrand.NewSource(time.Now().UnixNano()) + unsecureRand := mathrand.New(unsecureSource) + b := make([]byte, challengeLength) + for { + if _, err := unsecureRand.Read(b[:]); err != nil { + log.Fatal(err) + } + message := base64.StdEncoding.EncodeToString(b[:]) + mac := hmac.New(sha256.New, []byte(message)) + mac.Write([]byte(secret)) + challenges <- challenge{ + message: message, + expectedResponse: base64.StdEncoding.EncodeToString(mac.Sum(nil)), + } + time.Sleep(authenticationRateLimit) + } +} + +func secureRandBase64(length int) string { + b := make([]byte, length) + if _, err := rand.Read(b[:]); err != nil { + log.Fatal(err) + } + return base64.StdEncoding.EncodeToString(b[:]) +} + +func main() { + var bind, certFile, keyFile, secret string + var showVersion, invert bool + flag.BoolVar(&showVersion, "version", false, "show program's version number and exit") + flag.StringVar(&bind, "bind", defaultBind, "bind server to [IP]:PORT") + flag.StringVar(&secret, "secret", "", "shared secret for client authentication") + flag.StringVar(&certFile, "cert", "", "file containing TLS certificate") + flag.StringVar(&keyFile, "key", "", "file containing TLS private key") + flag.BoolVar(&invert, "invert", false, "use inverse colors for QR code") + flag.Parse() + if showVersion { + fmt.Println(version) + return + } + if certFile != "" && keyFile == "" { + log.Fatal("TLS certificate missing") + } + if certFile == "" && keyFile != "" { + log.Fatal("TLS private key missing") + } + tls := certFile != "" && keyFile != "" + if secret == "" { + secret = secureRandBase64(defaultSecretLength) + } + var plugin Plugin + platformErrors := "" + for _, f := range Plugins { + var err error + plugin, err = f() + if err == nil { + break + } else if _, ok := err.(UnsupportedPlatformError); ok { + platformErrors += err.Error() + "\n" + } else { + log.Fatal(err) + } + } + if plugin == nil { + log.Fatal("unsupported platform:\n" + platformErrors) + } + defer plugin.Close() + authenticationChallenges := make(chan challenge, authenticationRateBurst) + go authenticationChallengeGenerator(secret, authenticationChallenges) + listener, err := net.Listen("tcp", bind) + if err != nil { + log.Fatal(err) + } + addr := listener.Addr().(*net.TCPAddr) + host := "" + bindHost, _, err := net.SplitHostPort(bind) + if err != nil { + log.Fatal(err) + } + for _, b := range addr.IP { + if b != 0 { + host = bindHost + break + } + } + if host == "" { + host = FindDefaultHost() + } + port := addr.Port + mux := http.NewServeMux() + mux.Handle("/", http.FileServer(assetFS())) + mux.Handle("/ws", websocket.Handler(func(ws *websocket.Conn) { + var message string + challenge := <-authenticationChallenges + websocket.Message.Send(ws, challenge.message) + if err := websocket.Message.Receive(ws, &message); err != nil { + return + } + if !challenge.verify(message) { + return + } + for { + if err := websocket.Message.Receive(ws, &message); err != nil { + return + } + if err := processCommand(plugin, message); err != nil { + return + } + } + })) + domain := host + if port != 80 && !tls || port != 443 && tls { + domain = net.JoinHostPort(host, strconv.Itoa(port)) + } + scheme := "http" + if tls { + scheme = "https" + } + url := fmt.Sprintf("%s://%s/#%s\n", scheme, domain, secret) + readyMsg := "ready: " + url + qrCode, _ := GenerateQRCode(url, invert) + readyMsg += qrCode + if !tls { + readyMsg += ("" + + "▌ WARNING: TLS is not enabled ▐\n" + + "▌Don't use in an untrusted network!▐\n") + } + log.Print(readyMsg) + if tls { + err = http.ServeTLS(listener, mux, certFile, keyFile) + } else { + err = http.Serve(listener, mux) + } + log.Fatal(err) +} diff --git a/plugin.go b/plugin.go new file mode 100644 index 0000000..014f6ef --- /dev/null +++ b/plugin.go @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +import "fmt" + +var Plugins [](func() (Plugin, error)) = [](func() (Plugin, error)){ + InitX11Plugin, + InitWindowsPlugin, +} + +type UnsupportedPlatformError struct { + name string + message string +} + +func (e UnsupportedPlatformError) Error() string { + return fmt.Sprintf("%s plugin: %s", e.name, e.message) +} + +type Plugin interface { + Close() error + KeyboardText(text string) error + PointerButton(button uint, press bool) error + PointerMove(deltaX, deltaY int) error + PointerScroll(stepsHorizontal, stepsVertical int) error +} diff --git a/plugin_windows.go b/plugin_windows.go new file mode 100644 index 0000000..34c472f --- /dev/null +++ b/plugin_windows.go @@ -0,0 +1,169 @@ +// +build windows + +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +import ( + "errors" + "syscall" + "unsafe" +) + +const ( + inputMouse uintptr = 0x0 + inputKeyboard uintptr = 0x1 + + keyeventfKeyup uint32 = 0x2 + keyeventfUnicode uint32 = 0x4 + + mouseeventfMove uint32 = 0x1 + mouseeventfLeftdown uint32 = 0x2 + mouseeventfLeftup uint32 = 0x4 + mouseeventfRightdown uint32 = 0x8 + mouseeventfRightup uint32 = 0x10 + mouseeventfMiddledown uint32 = 0x20 + mouseeventfMiddleup uint32 = 0x40 + mouseeventfWheel uint32 = 0x800 + mouseeventfHwheel uint32 = 0x1000 + + wheelDelta int = 120 +) + +type mouseInput struct { + typ uintptr // HACK: padded uint32 + + dx, dy int32 + mouseData, dwFlags, time uint32 + dwExtraInfo uintptr +} + +type keybdInput struct { + typ uintptr // HACK: padded uint32 + + wVk, wScan uint16 + dwFlags, time uint32 + dwExtraInfo uintptr + + padding [8]byte +} + +type windowsPlugin struct { + userDLL *syscall.LazyDLL + sendInputProc *syscall.LazyProc +} + +func InitWindowsPlugin() (Plugin, error) { + p := &windowsPlugin{} + p.userDLL = syscall.NewLazyDLL("user32.dll") + p.sendInputProc = p.userDLL.NewProc("SendInput") + if err := p.sendInputProc.Find(); err != nil { + return nil, UnsupportedPlatformError{"Windows", err.Error()} + } + return p, nil +} + +func (p *windowsPlugin) Close() error { + return nil +} + +func (p *windowsPlugin) KeyboardText(text string) error { + runes := []rune(text) + if len(runes) == 0 { + return nil + } + inputs := make([]keybdInput, len(runes)*2) + for i := range inputs { + inputs[i].typ = inputKeyboard + inputs[i].wScan = uint16(runes[i/2]) + inputs[i].dwFlags = keyeventfUnicode + if i%2 == 1 { + inputs[i].dwFlags |= keyeventfKeyup + } + } + if r, _, err := p.sendInputProc.Call(uintptr(len(inputs)), uintptr(unsafe.Pointer(&inputs[0])), unsafe.Sizeof(inputs[0])); int(r) != len(inputs) { + return err + } + return nil +} + +func (p *windowsPlugin) PointerButton(button uint, press bool) error { + if button == 0 || button > 3 { + return errors.New("unsupported pointer button") + } + input := mouseInput{ + typ: inputMouse, + } + if button == 1 && press { + input.dwFlags = mouseeventfLeftdown + } else if button == 1 { + input.dwFlags = mouseeventfLeftup + } else if button == 2 && press { + input.dwFlags = mouseeventfMiddledown + } else if button == 2 { + input.dwFlags = mouseeventfMiddleup + } else if button == 3 && press { + input.dwFlags = mouseeventfRightdown + } else if button == 3 { + input.dwFlags = mouseeventfRightup + } + if r, _, err := p.sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), unsafe.Sizeof(input)); int(r) != 1 { + return err + } + return nil +} + +func (p *windowsPlugin) PointerMove(deltaX, deltaY int) error { + input := mouseInput{ + typ: inputMouse, + dx: int32(deltaX), + dy: int32(deltaY), + dwFlags: mouseeventfMove, + } + if r, _, err := p.sendInputProc.Call(1, uintptr(unsafe.Pointer(&input)), unsafe.Sizeof(input)); int(r) != 1 { + return err + } + return nil +} + +func (p *windowsPlugin) PointerScroll(stepsHorizontal, stepsVertical int) error { + inputs := make([]mouseInput, 0, 2) + if stepsHorizontal != 0 { + inputs = append(inputs, mouseInput{ + typ: inputMouse, + dwFlags: mouseeventfHwheel, + mouseData: uint32(stepsHorizontal * wheelDelta), + }) + } + if stepsVertical != 0 { + inputs = append(inputs, mouseInput{ + typ: inputMouse, + dwFlags: mouseeventfWheel, + mouseData: uint32(stepsVertical * wheelDelta), + }) + } + if len(inputs) == 0 { + return nil + } + if r, _, err := p.sendInputProc.Call(uintptr(len(inputs)), uintptr(unsafe.Pointer(&inputs[0])), unsafe.Sizeof(inputs[0])); int(r) != len(inputs) { + return err + } + return nil +} diff --git a/plugin_windows_dummy.go b/plugin_windows_dummy.go new file mode 100644 index 0000000..8db1b06 --- /dev/null +++ b/plugin_windows_dummy.go @@ -0,0 +1,26 @@ +// +build !windows + +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +func InitWindowsPlugin() (Plugin, error) { + return nil, UnsupportedPlatformError{"Windows", "disabled"} +} diff --git a/plugin_x11.go b/plugin_x11.go new file mode 100644 index 0000000..bf520f4 --- /dev/null +++ b/plugin_x11.go @@ -0,0 +1,173 @@ +// +build linux + +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +// #cgo LDFLAGS: -lX11 -lXtst +// #include +// #include +// #include +import "C" +import ( + "errors" + "sync" + "time" + "unsafe" +) + +const typingDelay time.Duration = 100 * time.Millisecond + +type x11Plugin struct { + display *C.Display + lock sync.Mutex +} + +func InitX11Plugin() (Plugin, error) { + display := C.XOpenDisplay(nil) + if display == nil { + return nil, UnsupportedPlatformError{"X11", "failed to connect to X server"} + } + return &x11Plugin{display: display}, nil +} + +func (p *x11Plugin) Close() error { + p.lock.Lock() + defer p.lock.Unlock() + if p.display == nil { + return errors.New("X server connection closed") + } + C.XCloseDisplay(p.display) + p.display = nil + return nil +} + +func (p *x11Plugin) KeyboardText(text string) error { + p.lock.Lock() + defer p.lock.Unlock() + if p.display == nil { + return errors.New("X server connection closed") + } + if text == "" { + return nil + } + var minKeycodes, maxKeycodes C.int + C.XDisplayKeycodes(p.display, &minKeycodes, &maxKeycodes) + var keysymsPerKeycode C.int + keysyms := C.XGetKeyboardMapping(p.display, C.KeyCode(minKeycodes), maxKeycodes-minKeycodes+1, &keysymsPerKeycode) + if keysyms == nil { + return errors.New("failed to get keyboard mapping") + } + emptyKeycode := C.KeyCode(0) +keycodes: + for keycode := C.KeyCode(minKeycodes); keycode <= C.KeyCode(maxKeycodes); keycode++ { + for i := 0; i < int(keysymsPerKeycode); i++ { + keysymsIndex := int(keycode-C.KeyCode(minKeycodes))*int(keysymsPerKeycode) + i + keysym := *(*C.KeySym)(unsafe.Pointer(uintptr(unsafe.Pointer(keysyms)) + uintptr(keysymsIndex)*unsafe.Sizeof(*keysyms))) + if keysym != 0 { + continue keycodes + } + } + emptyKeycode = keycode + break + } + C.XFree(unsafe.Pointer(keysyms)) + if emptyKeycode == 0 { + return errors.New("no empty keycode found") + } + keycodeMapping := make([]C.KeySym, keysymsPerKeycode) + for _, runeValue := range text { + keysym := C.KeySym(0x01000000 + runeValue) + for i := range keycodeMapping { + keycodeMapping[i] = keysym + } + C.XChangeKeyboardMapping(p.display, C.int(emptyKeycode), keysymsPerKeycode, (*C.KeySym)(unsafe.Pointer(&keycodeMapping[0])), 1) + C.XTestFakeKeyEvent(p.display, C.uint(emptyKeycode), C.True, 0) + C.XTestFakeKeyEvent(p.display, C.uint(emptyKeycode), C.False, 0) + // race condition! + C.XFlush(p.display) + time.Sleep(typingDelay) + } + for i := range keycodeMapping { + keycodeMapping[i] = 0 + } + C.XChangeKeyboardMapping(p.display, C.int(emptyKeycode), keysymsPerKeycode, (*C.KeySym)(unsafe.Pointer(&keycodeMapping[0])), 1) + C.XFlush(p.display) + return nil +} + +func (p *x11Plugin) PointerButton(button uint, press bool) error { + p.lock.Lock() + defer p.lock.Unlock() + if p.display == nil { + return errors.New("X server connection closed") + } + if button == 0 || button > 9 { + return errors.New("unsupported pointer button") + } + var pressC C.int = C.False + if press { + pressC = C.True + } + C.XTestFakeButtonEvent(p.display, C.uint(button), pressC, 0) + C.XFlush(p.display) + return nil +} + +func (p *x11Plugin) PointerMove(deltaX, deltaY int) error { + p.lock.Lock() + defer p.lock.Unlock() + if p.display == nil { + return errors.New("X server connection closed") + } + C.XTestFakeRelativeMotionEvent(p.display, C.int(deltaX), C.int(deltaY), 0) + C.XFlush(p.display) + return nil +} + +func (p *x11Plugin) PointerScroll(stepsHorizontal, stepsVertical int) error { + var buttonHorizontal uint = 7 + if stepsHorizontal < 0 { + buttonHorizontal = 6 + stepsHorizontal = -stepsHorizontal + } + for i := 0; i < stepsHorizontal; i++ { + if err := p.PointerButton(buttonHorizontal, true); err != nil { + return err + } + if err := p.PointerButton(buttonHorizontal, false); err != nil { + return err + } + } + var buttonVertical uint = 5 + if stepsVertical < 0 { + buttonVertical = 4 + stepsVertical = -stepsVertical + } + for i := 0; i < stepsVertical; i++ { + if err := p.PointerButton(buttonVertical, true); err != nil { + return err + } + if err := p.PointerButton(buttonVertical, false); err != nil { + return err + } + } + return nil +} diff --git a/plugin_x11_dummy.go b/plugin_x11_dummy.go new file mode 100644 index 0000000..029f5aa --- /dev/null +++ b/plugin_x11_dummy.go @@ -0,0 +1,26 @@ +// +build !linux + +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +func InitX11Plugin() (Plugin, error) { + return nil, UnsupportedPlatformError{"X11", "disabled"} +} diff --git a/qr.go b/qr.go new file mode 100644 index 0000000..6e9e0f3 --- /dev/null +++ b/qr.go @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + +package main + +import qrcode "github.com/skip2/go-qrcode" + +func GenerateQRCode(message string, invert bool) (string, error) { + q, err := qrcode.New(message, qrcode.Medium) + if err != nil { + return "", err + } + return qrCodeToString(q.Bitmap(), invert), nil +} + +func qrCodeToString(bits [][]bool, invert bool) string { + s := "" + for y := -1; y < len(bits); y += 2 { + for x := range bits[0] { + upper := !invert + if 0 <= y && y < len(bits) { + upper = bits[y][x] + } + lower := !invert + if 0 <= y+1 && y+1 < len(bits) { + lower = bits[y+1][x] + } + if upper != invert && lower != invert { + s += " " + } else if upper == invert && lower != invert { + s += "▀" + } else if upper != invert && lower == invert { + s += "▄" + } else { + s += "█" + } + } + s += "\n" + } + return s +} diff --git a/screenshots/1.png b/screenshots/1.png new file mode 100644 index 0000000000000000000000000000000000000000..50333e3dca6c61f0a794025ad8fd4a18d00b08a3 GIT binary patch literal 71316 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 a;U1!vAK9N9a0i8eOIcA}p;FE)^#20$cLFp3 literal 0 HcmV?d00001 diff --git a/screenshots/3.png b/screenshots/3.png new file mode 100644 index 0000000000000000000000000000000000000000..26f49451b0144096ee9206c85338127c5797298c GIT binary patch literal 17817 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%0AKL8HGm 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 literal 0 HcmV?d00001 diff --git a/webdata/fn.js b/webdata/fn.js new file mode 100644 index 0000000..78287c5 --- /dev/null +++ b/webdata/fn.js @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2018 Unrud + * + * This file is part of Remote-Touchpad. + * + * Foobar 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. + * + * Remote-Touchpad 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 Foobar. If not, see . + */ + + // [1 Touch, 2 Touches, 3 Touches] +const TOUCH_MOVE_THRESHOLD = [10, 15, 15]; +const TOUCH_TIMEOUT = 250; +const MOVE_MULT = 1; +const SCROLL_MULT = 0.05; +// [[px/s, mult], ...] +const POINTER_ACCELERATION = [[0, 0], [87, 1], [173, 1], [553, 2]]; +const UPDATE_INTERVAL = 50; +const MAX_IDLE_UPDATES = 10; + +var ws; +var pad; +var padlabel; + +var touchMoved = false; +var touchStart = 0; +var touchLastEnd = 0; +var touchReleasedCount = 0; +var ongoingTouches = []; +var moveXSum = 0; +var moveYSum = 0; +var scrollXSum = 0; +var scrollYSum = 0; +var dragging = false; +var draggingTimeout = null; +var updateTimer = null; +var idleUpdates = 0; + +function fullscreenEnabled() { + return (document.fullscreenEnabled || + document.webkitFullscreenEnabled || + document.mozFullScreenEnabled || + document.msFullscreenEnabled || + false); +} + +function requestFullscreen(e) { + if (e.requestFullscreen) { + e.requestFullscreen(); + } else if (e.webkitRequestFullscreen) { + e.webkitRequestFullscreen(); + } else if (e.mozRequestFullScreen) { + e.mozRequestFullScreen(); + } else if (e.msRequestFullscreen) { + e.msRequestFullscreen(); + } +} + +function exitFullscreen() { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } +} + +function fullscreenElement() { + return (document.fullscreenElement || + document.webkitFullscreenElement || + document.mozFullScreenElement || + document.msFullscreenElement || + null); +} + +function addFullscreenchangeEventListener(listener) { + if (document.fullscreenElement !== undefined) { + document.addEventListener("fullscreenchange", listener); + } else if (document.webkitFullscreenElement !== undefined) { + document.addEventListener("webkitfullscreenchange", listener); + } else if (document.mozFullScreenElement !== undefined) { + document.addEventListener("mozfullscreenchange", listener); + } else if (document.msFullscreenElement !== undefined) { + document.addEventListener("MSFullscreenChange", listener); + } +} + +function copyTouch(touch, timeStamp) { + return { + identifier: touch.identifier, + pageX: touch.pageX, + pageXStart: touch.pageX, + pageY: touch.pageY, + pageYStart: touch.pageY, + timeStamp: timeStamp + }; +} + +function ongoingTouchIndexById(idToFind) { + for (var i = 0; i < ongoingTouches.length; i++) { + var id = ongoingTouches[i].identifier; + + if (id == idToFind) { + return i; + } + } + return -1; +} + +function calculatePointerAccelerationMult(speed) { + for (var i = 0; i < POINTER_ACCELERATION.length; i++) { + s2 = POINTER_ACCELERATION[i][0]; + a2 = POINTER_ACCELERATION[i][1]; + if (s2 <= speed) { + continue; + } + if (i == 0) { + return a2; + } + s1 = POINTER_ACCELERATION[i-1][0]; + a1 = POINTER_ACCELERATION[i-1][1]; + return ((speed-s1) / (s2-s1)) * (a2-a1) + a1; + } + if (POINTER_ACCELERATION.length > 0) { + return POINTER_ACCELERATION[POINTER_ACCELERATION.length-1][1]; + } + return 1; +} + +function onDraggingTimeout() { + draggingTimeout = null; + ws.send("PointerButton 1 0"); +} + +function updateMoveAndScroll() { + if (updateTimer == null) { + onUpdateTimeout(); + if (UPDATE_INTERVAL > 0 && idleUpdates == 0) { + updateTimer = setInterval(onUpdateTimeout, UPDATE_INTERVAL); + } + } +} + +function onUpdateTimeout() { + idleUpdates += 1; + var moveX = Math.trunc(moveXSum); + var moveY = Math.trunc(moveYSum); + if (Math.abs(moveX) >= 1 || Math.abs(moveY) >= 1) { + moveXSum -= moveX; + moveYSum -= moveY; + idleUpdates = 0; + ws.send("PointerMove " + moveX + " " + moveY); + } + var scrollX = Math.trunc(scrollXSum); + var scrollY = Math.trunc(scrollYSum); + if (Math.abs(scrollX) >= 1 || Math.abs(scrollY) >= 1) { + scrollXSum -= scrollX; + scrollYSum -= scrollY; + idleUpdates = 0; + ws.send("PointerScroll " + scrollX + " " + scrollY); + } + if (idleUpdates >= MAX_IDLE_UPDATES) { + clearInterval(updateTimer); + updateTimer = null; + } +} + +function handleStart(evt) { + if (ongoingTouches.length == 0) { + touchStart = evt.timeStamp; + touchMoved = false; + touchReleasedCount = 0; + dragging = false; + } + var touches = evt.changedTouches; + for (var i = 0; i < touches.length; i++) { + if (touches[i].target !== pad && touches[i].target !== padlabel) { + continue; + } + evt.preventDefault(); + ongoingTouches.push(copyTouch(touches[i], evt.timeStamp)); + touchLastEnd = 0; + if (!dragging) { + moveXSum = Math.trunc(moveXSum); + moveYSum = Math.trunc(moveYSum); + } + scrollXSum = Math.trunc(scrollXSum); + scrollYSum = Math.trunc(scrollYSum); + if (draggingTimeout !== null) { + clearTimeout(draggingTimeout); + draggingTimeout = null; + dragging = true; + } + } +} + +function handleEnd(evt) { + var touches = evt.changedTouches; + for (var i = 0; i < touches.length; i++) { + var idx = ongoingTouchIndexById(touches[i].identifier); + if (idx < 0) { + continue; + } + ongoingTouches.splice(idx, 1); + touchReleasedCount++; + touchLastEnd = evt.timeStamp; + } + if (touchReleasedCount > TOUCH_MOVE_THRESHOLD.length) { + touchMoved = true; + } + if (ongoingTouches.length == 0 && touchReleasedCount >= 1 && + dragging) { + ws.send("PointerButton 1 0"); + } + if (ongoingTouches.length == 0 && touchReleasedCount >= 1 && + !touchMoved && evt.timeStamp - touchStart < TOUCH_TIMEOUT) { + var button = 0; + if (touchReleasedCount == 1) { + button = 1; + } else if (touchReleasedCount == 2) { + button = 3; + }else if (touchReleasedCount == 3) { + button = 2; + } + ws.send("PointerButton " + button + " 1"); + if (button == 1) { + draggingTimeout = setTimeout(onDraggingTimeout, TOUCH_TIMEOUT); + } else { + ws.send("PointerButton " + button + " 0"); + } + } +} + +function handleCancel(evt) { + var touches = evt.changedTouches; + for (var i = 0; i < touches.length; i++) { + var idx = ongoingTouchIndexById(touches[i].identifier); + if (idx < 0) { + continue; + } + ongoingTouches.splice(idx, 1); + touchReleasedCount++; + touchLastEnd = evt.timeStamp; + touchMoved = true; + } +} + +function handleMove(evt) { + var sumX = 0; + var sumY = 0; + var touches = evt.changedTouches; + for (var i = 0; i < touches.length; i++) { + var idx = ongoingTouchIndexById(touches[i].identifier); + if (idx < 0) { + continue; + } + var dist = Math.sqrt(Math.pow(touches[i].pageX - ongoingTouches[idx].pageXStart, 2) + Math.pow(touches[i].pageY - ongoingTouches[idx].pageYStart, 2)); + if (ongoingTouches.length > TOUCH_MOVE_THRESHOLD.length || dist > TOUCH_MOVE_THRESHOLD[ongoingTouches.length - 1]) { + touchMoved = true; + } + var dx = touches[i].pageX - ongoingTouches[idx].pageX; + var dy = touches[i].pageY - ongoingTouches[idx].pageY; + var timeDelta = evt.timeStamp - ongoingTouches[idx].timeStamp; + sumX += dx * calculatePointerAccelerationMult(Math.abs(dx) / timeDelta * 1000); + sumY += dy * calculatePointerAccelerationMult(Math.abs(dy) / timeDelta * 1000); + ongoingTouches[idx].pageX = touches[i].pageX; + ongoingTouches[idx].pageY = touches[i].pageY; + ongoingTouches[idx].timeStamp = evt.timeStamp; + } + if (touchMoved && evt.timeStamp - touchLastEnd >= TOUCH_TIMEOUT) { + if (ongoingTouches.length == 1 || dragging) { + moveXSum += sumX * MOVE_MULT; + moveYSum += sumY * MOVE_MULT; + } else if (ongoingTouches.length == 2) { + scrollXSum -= sumX * SCROLL_MULT; + scrollYSum -= sumY * SCROLL_MULT; + } + updateMoveAndScroll(); + } +} + +function challengeResponse(message) { + var shaObj = new jsSHA("SHA-256", "TEXT"); + shaObj.setHMACKey(message, "TEXT"); + shaObj.update(window.location.hash.substr(1)); + return btoa(shaObj.getHMAC("BYTES")); +} + +window.addEventListener("load", function() { + var authenticated = false; + var opening = document.getElementById("opening"); + var closed = document.getElementById("closed"); + pad = document.getElementById("pad"); + padlabel = document.getElementById("padlabel"); + var keyboard = document.getElementById("keyboard"); + var fullscreenbutton = document.getElementById("fullscreenbutton"); + var text = document.getElementById("text"); + closed.style.display = "none"; + pad.style.display = "none"; + keyboard.style.display = "none"; + text.value = ""; + + ws = new WebSocket("ws://" + location.hostname + + (location.port ? ":" + location.port : "") + + "/ws"); + + ws.onmessage = function(event) { + if (authenticated) { + ws.close(); + return; + } + authenticated = true; + ws.send(challengeResponse(event.data)); + opening.style.display = "none"; + if (history.state == "keyboard") { + keyboard.style.display = "flex"; + text.focus(); + } else { + pad.style.display = "flex"; + } + }; + + ws.onclose = function() { + if (fullscreenElement()) { + exitFullscreen(); + } + opening.style.display = "none"; + pad.style.display = "none"; + keyboard.style.display = "none" + closed.style.display = "flex"; + }; + + document.getElementById("keyboardbutton").addEventListener("click", + function(e) { + if (fullscreenElement()) { + exitFullscreen(); + } + pad.style.display = "none"; + keyboard.style.display = "flex"; + text.focus(); + history.pushState("keyboard", "Remote Keyboard"); + }); + if (!fullscreenEnabled()) { + fullscreenbutton.style.display = "none"; + } + fullscreenbutton.addEventListener("click", function(e) { + if (fullscreenElement()) { + exitFullscreen(); + } else { + requestFullscreen(pad); + } + }); + document.getElementById("sendbutton").addEventListener("click", + function(e) { + if (text.value != "") { + ws.send("KeyboardText " + text.value); + text.value = ""; + } + window.history.back(); + }); + window.onpopstate = function(event) { + if (keyboard.style.display == "flex") { + pad.style.display = "flex"; + keyboard.style.display = "none"; + } else { + window.history.back(); + } + }; + pad.addEventListener("touchstart", handleStart, false); + pad.addEventListener("touchend", handleEnd, false); + pad.addEventListener("touchcancel", handleCancel, false); + pad.addEventListener("touchmove", handleMove, false); +}, false); diff --git a/webdata/icon.png b/webdata/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..37844d533a42d1f54c3b3a8903d289e01f1cb71f GIT binary patch literal 1578 zcmV+_2G#kAP)035pU~p!R@72 z_qh8PxO>p^?qRq8L{~hCB6#uAQxS!pdhjN7DO6EQXXZP}WDlAllW&sAeCxu(<^$#1 z$>b$3?^oV?14KkbL_|bHL_|bHL_|dV??8MnrIc#`673mMN;FN=`8CId5S{tv+@@(J zXl?WKF#sJp*F2L(2*GdMxUn}#0A*SJbb5OF$9O!3lu{Rn_kZVI=yUDqhf^5?a+wLg0WP!z>4pFe-TucUbS@?|G8eZRi3AvDtntZ5n$LO=+? zyLa!9BneJVPJUfqUw_~ffRyse@$vDYGNt+Xd0fAK9fXjM#7*fdt+$IBno!R=tx0nx zKQ{Q#_x|wV1NQg#addP9DJ9;%eS78h?c0B=_e@{tidTZ ze%jbX&mz$fKkU20`YbHe^`^-;oB}vJJai@%L$yBiy^13~YY80>QQAZdV2t7E)2CpJ zIT_KJRDXR;*v5t)mQw1Ruio{f_7m$ea{?ixe6STTpQK#DMHM?)mZ7d|5JE5-joQt|<8eDyRTa`Sg_IJU zb1=q`Bwy;Qs;XLnrfCWx1nRm5W2|!%jK|}4KgC~N*PxUl%d(aqR|Yyb2-`oG+ve^k|b&8H%)`Ot|5d#k|b!F211DTS*=yq zbt`b)(#-vpKzoB=NP!b_Q>e{tnVHX56`i70bJH{hA!NeLZFjqQeM%|u1k`y z<{qxZYfupMRat$duD+p)4Yn)GMq}Or=6e-9^;^odhVBN0kXA84iBMnTB1EzwiHp9L zxn^G@#aD#cI!3o{-NL6&pZaeBm$~~69a6ODw?Sy#5t<5{>*_qK@zH2xjRD>u7z!Vq zs|z$u#TZgz53W32#Y|`!>??m=nwggIkS2@G|AUJmm95>pd9#hyK9latwrqj%EWLsu zw7SdrER@=`zqq(K5s7V0&rpV30d8mosas|Ut*dbI7DJ}C)ZMH{RQ0Rp|3iG&Rzdc; zgfD4onr0#$*1mCg3!>gcNI#_65-*AZd7e+zA$DnV8Wcr=xw$!Ol+Uuv%NGkZ-)q;d z;oP}%n4O))?(S||nb}%fHfyncTliM(c3nYwL8dFu6$Cp1;GCBLa@(h+nVA{9di4rd zuU^IZ^XEHh@X%tauLf|%h`#wv(_m|B3(L#Pc>Ve{9zT9OvEFz*E_}DZBVU5TIX_dY zY})&Kh(%OYg^wRUPFSecM|fnlfYsGi?CtISwz09XrAkf}d6Oi;@$oU%*VjP^!J9X4 z+D3#eZFPM<8&YfdK6jb#R7a_48tm-spss7AX^Je%I^{DV1kay8|9xR$0Y^tiU&c&E z_V@SynxCKlLG=fBcXyq>&N=Uty1uN?JXGkszD!efs8pe3S}*4u8yg$ooa5l&;Nj-x z=4MCmHf_9k@#5ji%F3O(u6vmsGByp3Paq*MLgzI=4|?%g{Rmgh3brKP3id-v{r zHyVv*%*FKvsIB{A>n*z8*?N$+XT3~z?P;ScilW%w-hTG}{rdw%L_|bHL_|bHL_|bH cL_`34FCWD literal 0 HcmV?d00001 diff --git a/webdata/index.html b/webdata/index.html new file mode 100644 index 0000000..c93bbe3 --- /dev/null +++ b/webdata/index.html @@ -0,0 +1,32 @@ + + + + + + + + + Remote Touchpad + + + + +
+

Connecting...

+
+
+

Disconnected

+
+
+

Touchpad

+
+ + +
+
+
+ + +
+ + diff --git a/webdata/main.css b/webdata/main.css new file mode 100644 index 0000000..bbd1605 --- /dev/null +++ b/webdata/main.css @@ -0,0 +1,99 @@ +html, body, #pad, #keyboard, #opening, #closed { + width: 100%; + height: 100%; + margin: 0; +} + +body { + font-family: sans; +} + +#pad, #sendbutton, #opening, #closed { + background-color: #404040 !important; + background-image: url(tex.png); +} + +#opening, #closed { + display: flex; + align-items: center; + justify-content: center; + font-size: 2em; + color: white; + word-wrap: break-word; +} + +#pad { + display: flex; + flex-direction: column; +} + +#padlabel { + color: #424242; + text-shadow: + -1px -1px 0 #383838, + 1px -1px 0 #383838, + -1px 1px 0 #383838, + 1px 1px 0 #383838; + font-weight: bold; + margin-top: auto; + margin-bottom: auto; + text-align: center; + font-size: 4em; + word-wrap: break-word; +} + +#fullscreenbutton, #keyboardbutton, #sendbutton { + background-color: transparent; + border: 1px solid black; + border-bottom: none; + height: 1.5em; + width: 2em; + font-size: 2em; + color: white; +} + +#fullscreenbutton { + border-left: none; +} + +#keyboardbutton { + border-right: none; + margin-left: auto; +} + +#keyboard { + display: flex; + flex-direction: row; +} + +#text { + flex: 2; + border: none; + resize: none; + font-size: 2em; + background-color: white; + color: black; +} + +.buttons { + display: flex; +} + +#sendbutton { + border-right: none; + border-top: none; + height: 100%; +} + +@media (max-aspect-ratio: 4/3) { + #keyboard { + flex-direction: column; + } + + #sendbutton { + border-left: none; + border-top: 1px solid black; + height: 1.5em; + width: 100%; + } +} \ No newline at end of file diff --git a/webdata/sha256.js b/webdata/sha256.js new file mode 100644 index 0000000..e62bf9e --- /dev/null +++ b/webdata/sha256.js @@ -0,0 +1,27 @@ +/* + A JavaScript implementation of the SHA family of hashes, as + defined in FIPS PUB 180-4 and FIPS PUB 202, as well as the corresponding + HMAC implementation as defined in FIPS PUB 198a + + Copyright 2008-2018 Brian Turek, 1998-2009 Paul Johnston & Contributors + Distributed under the BSD License + See http://caligatio.github.com/jsSHA/ for more information +*/ +'use strict';(function(I){function w(c,a,d){var l=0,b=[],g=0,f,n,k,e,h,q,y,p,m=!1,t=[],r=[],u,z=!1;d=d||{};f=d.encoding||"UTF8";u=d.numRounds||1;if(u!==parseInt(u,10)||1>u)throw Error("numRounds must a integer >= 1");if(0===c.lastIndexOf("SHA-",0))if(q=function(b,a){return A(b,a,c)},y=function(b,a,l,f){var g,e;if("SHA-224"===c||"SHA-256"===c)g=(a+65>>>9<<4)+15,e=16;else throw Error("Unexpected error in SHA-2 implementation");for(;b.length<=g;)b.push(0);b[a>>>5]|=128<<24-a%32;a=a+l;b[g]=a&4294967295; +b[g-1]=a/4294967296|0;l=b.length;for(a=0;a>>3;g=e/4-1;if(eb/8){for(;a.length<=g;)a.push(0);a[g]&=4294967040}for(b=0;b<=g;b+=1)t[b]=a[b]^909522486,r[b]=a[b]^1549556828;n=q(t,n);l=h;m=!0};this.update=function(a){var c,f,e,d=0,p=h>>>5;c=k(a,b,g);a=c.binLen;f=c.value;c=a>>>5;for(e=0;e>> +5);g=a%h;z=!0};this.getHash=function(a,f){var d,h,k,q;if(!0===m)throw Error("Cannot call getHash after setting HMAC key");k=C(f);switch(a){case "HEX":d=function(a){return D(a,e,k)};break;case "B64":d=function(a){return E(a,e,k)};break;case "BYTES":d=function(a){return F(a,e)};break;case "ARRAYBUFFER":try{h=new ArrayBuffer(0)}catch(v){throw Error("ARRAYBUFFER not supported by this environment");}d=function(a){return G(a,e)};break;default:throw Error("format must be HEX, B64, BYTES, or ARRAYBUFFER"); +}q=y(b.slice(),g,l,p(n));for(h=1;h>>2]>>>8*(3+b%4*-1),l+="0123456789abcdef".charAt(g>>>4&15)+"0123456789abcdef".charAt(g&15);return d.outputUpper?l.toUpperCase():l}function E(c,a,d){var l="",b=a/8,g,f,n;for(g=0;g>>2]:0,n=g+2>>2]:0,n=(c[g>>>2]>>>8*(3+g%4*-1)&255)<<16|(f>>>8*(3+(g+1)%4*-1)&255)<<8|n>>>8*(3+(g+2)%4*-1)&255,f=0;4>f;f+=1)8*g+6*f<=a?l+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(n>>> +6*(3-f)&63):l+=d.b64Pad;return l}function F(c,a){var d="",l=a/8,b,g;for(b=0;b>>2]>>>8*(3+b%4*-1)&255,d+=String.fromCharCode(g);return d}function G(c,a){var d=a/8,l,b=new ArrayBuffer(d),g;g=new Uint8Array(b);for(l=0;l>>2]>>>8*(3+l%4*-1)&255;return b}function C(c){var a={outputUpper:!1,b64Pad:"=",shakeLen:-1};c=c||{};a.outputUpper=c.outputUpper||!1;!0===c.hasOwnProperty("b64Pad")&&(a.b64Pad=c.b64Pad);if("boolean"!==typeof a.outputUpper)throw Error("Invalid outputUpper formatting option"); +if("string"!==typeof a.b64Pad)throw Error("Invalid b64Pad formatting option");return a}function B(c,a){var d;switch(a){case "UTF8":case "UTF16BE":case "UTF16LE":break;default:throw Error("encoding must be UTF8, UTF16BE, or UTF16LE");}switch(c){case "HEX":d=function(a,b,c){var f=a.length,d,k,e,h,q;if(0!==f%2)throw Error("String of HEX type must be in byte increments");b=b||[0];c=c||0;q=c>>>3;for(d=0;d>>1)+q;for(e=h>>>2;b.length<=e;)b.push(0);b[e]|=k<<8*(3+h%4*-1)}return{value:b,binLen:4*f+c}};break;case "TEXT":d=function(c,b,d){var f,n,k=0,e,h,q,m,p,r;b=b||[0];d=d||0;q=d>>>3;if("UTF8"===a)for(r=3,e=0;ef?n.push(f):2048>f?(n.push(192|f>>>6),n.push(128|f&63)):55296>f||57344<=f?n.push(224|f>>>12,128|f>>>6&63,128|f&63):(e+=1,f=65536+((f&1023)<<10|c.charCodeAt(e)&1023),n.push(240|f>>>18,128|f>>>12&63,128|f>>>6&63,128|f&63)),h=0;h>>2;b.length<=m;)b.push(0);b[m]|=n[h]<<8*(r+p%4*-1);k+=1}else if("UTF16BE"===a||"UTF16LE"===a)for(r=2,n="UTF16LE"===a&&!0||"UTF16LE"!==a&&!1,e=0;e>>8);p=k+q;for(m=p>>>2;b.length<=m;)b.push(0);b[m]|=f<<8*(r+p%4*-1);k+=2}return{value:b,binLen:8*k+d}};break;case "B64":d=function(a,b,c){var f=0,d,k,e,h,q,m,p;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw Error("Invalid character in base-64 string");k=a.indexOf("=");a=a.replace(/\=/g, +"");if(-1!==k&&k